2010-03-14 5 views
6

Ho cercato degli esempi per la funzione C++ dell'API Win32 TerminateProcess() ma non è stato possibile trovarne.C++ TerminateProcess function

Io non sono che la familiarità con l'API Win32 in generale, e quindi volevo chiedere se qualcuno qui che è meglio in esso che me me potrebbe mostrare un esempio per,

  • Recupero di un handle di processo per il suo PID ha richiesto di terminarlo e quindi chiamare TerminateProcess con esso.

Se non si ha familiarità con C++ un equivalente C# potrebbe aiutare anche.

+0

Stai solo cercando questa funzione WINAPI OpenProcess http://msdn.microsoft.com/en-us/library/ms684320%28VS.85%29.aspx? Metterlo insieme a TerminateProcess non dovrebbe essere troppo difficile. –

+0

No, voglio terminare un processo in esecuzione. Questo è il motivo per cui ho menzionato che devo prima recuperare il PID. – jemper

+1

Quando qualcuno ti dà un link, leggerlo. Non assumere dal nome solo ciò che fa. In effetti, OpenProcess crea un handle di processo, dato un PID, che è esattamente quello che hai chiesto. @ Charles: questa dovrebbe essere una risposta al posto di un commento. –

risposta

14

Per rispondere alla domanda iniziale, al fine di recuperare un handle di processo per la sua PID e chiamare TerminateProcess, è necessario il codice come il seguente:

BOOL TerminateProcess(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; 
} 

Tenete a mente che TerminateProcess non permette il suo obiettivo da pulire su e esce in uno stato valido. Pensaci due volte prima di usarlo.

+0

Come posso ottenere il PID del processo? – BlackBear

+0

Che tipo di identificativo hai per il processo per il quale desideri un PID? –

+0

Solo il nome (da taskmanager) – BlackBear