Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] Finestre senza logica Win 32

    Ciao ragazzi, premetto, spero di aver trovato un titolo apppropriato e che questa discussione non sia considerata OT.
    Comunque, io ho sviluppato un semplice programma che trova hProc da un HWND,
    codice:
    DWORD dwPiD ;
    GetWindowThreadProcessId(
      GetForegroundWindow(),
       &dwPiD
    );
    e trova l'HWND con GetForegroundWindow().
    Poi uccide gentilmente il processo....molto utile se devo terminare giochi (senza dover fare menu....esci....etc....) oppure processi che fanno spuntare MessageBox()

    codice:
    BOOL KillProcess(DWORD dwProcessId, UINT uExitCode)
    {
        DWORD dwDesiredAccess = PROCESS_TERMINATE;
        BOOL  bInheritHandle  = FALSE;
        HANDLE hProcess = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
        if (hProcess == NULL)
            return FALSE;
    
        BOOL result = TerminateProcess(hProcess, uExitCode);
    
        CloseHandle(hProcess);
    
        return result;
    }
    La domanda è:
    Prima per caso ho provato a terminare kaspersky antivirus con questo metodo.....e MAGIA! non è successo nulla!!! ......come è possibile una cosa dal genere??? ogni finestra dovrebbe avere un HWND, compresa quella di Kaspersky!
    allora ho pensato: che per caso abbiano utilizzato un metodo inventato da loro per creare finestre???? proprio per difendersi dai virus? non capisco, mi sembra un fatto impossibile!!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intanto non hai agito tanto "gentilmente" dato che hai utilizzato la terminate (dovresti utilizzare un messaggio WM_CLOSE per essere "educato").

    In secondo luogo, parli di giochi e poi vuoi terminare l'antivirus ... mmmh ...

    Infine, è possibile che l'antivirus abbia un processo "sentinella" che controlli quello principale per riavviarlo in caso di caduta ... oppure, non hai semplicemente i "diritti" per farlo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    :)

    Sono consapevole che questa richiesta può sembrare un po' strana....
    comunque non è per scopi malefici non di certo....
    bhe problema risolto: se disabilito lqa self defense di kaspersky tutto va apposto (nel senso che riesco a terminare il processo.....)
    resta comunque un mistero capire come abbia fatto firefox.....proprio la chiamata a
    codice:
    BOOL result = TerminateProcess(hProcess, uExitCode);
    retituisce FALSE !!!!
    vabbè.....pazienza

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se una API fallisce, chiama la GetLastError e mostra il codice d'errore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    :)

    Ho provato con GetLastError()
    viene fuori il valore 0: ERROR_SUCCES.......per questo è mistero....

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: :)

    Originariamente inviato da kirakira93
    Ho provato con GetLastError()
    viene fuori il valore 0: ERROR_SUCCES.......per questo è mistero....
    No ... questo non è possibile.

    Naturalmente la GetLastError va eseguita subito dopo la API che fallisce ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487
    subito vuol dire prima anche di un semplice messagebox?

    Ho fatto così io:
    //string
    //sstream
    //namespace std
    BOOL KillProcess(DWORD dwProcessId, UINT uExitCode)
    {
    DWORD dwDesiredAccess = PROCESS_TERMINATE;
    BOOL bInheritHandle = FALSE;
    HANDLE hProcess = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
    if (hProcess == NULL)
    return FALSE;

    BOOL result = TerminateProcess(hProcess, uExitCode);
    if(result == FALSE)
    {
    string s;
    stringstream out;
    out.str("");
    out << GetLastError();
    s = out.str();
    out.str("");
    MessageBox(NULL,s.c_str(),"Output = 0",0);
    }
    CloseHandle(hProcess);

    return result;
    }

  8. #8
    Originariamente inviato da kirakira93
    subito vuol dire prima anche di un semplice messagebox?
    Vuol dire prima di qualunque altra chiamata alle API di Windows, che modificano il lasterror per segnalare le condizioni di errore.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da kirakira93
    subito vuol dire prima anche di un semplice messagebox?
    Subito significa subito.

    BOOL result = TerminateProcess(hProcess, uExitCode);
    int le = GetLastError();
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ok

    ok domani provo.....grazie
    spero di capire sto mistero!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.