HANDLE

Le
Lacour Arthur
Salut

Comment récuperer le HANDLE d'un processus ? Pour le terminer avec
TerminateProcess ? J'ai juste son nom !

Merci ! @+
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
marc
Le #20345321
On 13 oct, 18:55, "Lacour Arthur"
Salut

Comment récuperer le HANDLE d'un processus ? Pour le terminer avec
TerminateProcess ? J'ai juste son nom !

Merci ! @+



Enumère les process pour trouver le tien comme sur
http://support.microsoft.com/kb/175030/fr
Lacour Arthur
Le #20373601
Le problème c'est que je débute et j'ai du mal à comprendre tout cela.
Un peu d'aide svp !


"marc"
On 13 oct, 18:55, "Lacour Arthur"
Salut

Comment récuperer le HANDLE d'un processus ? Pour le terminer avec
TerminateProcess ? J'ai juste son nom !

Merci ! @+



Enumère les process pour trouver le tien comme sur
http://support.microsoft.com/kb/175030/fr
Christian ASTOR
Le #20377951
On 18 oct, 14:52, "Lacour Arthur"
Le problème c'est que je débute et j'ai du mal à comprendre tout ce la.
Un peu d'aide svp !



Exemple simplifié pour killer un process avec la PSAPI =>

#define UNICODE
#define _UNICODE

#include #include <iostream>
#include
typedef BOOL (WINAPI* PENUMPROCESSES)(DWORD* pProcessIds, DWORD cb,
DWORD* pBytesReturned );
typedef BOOL (WINAPI* PNUMPROCESSMODULES)(HANDLE hProcess, HMODULE
*lphModule, DWORD cb, LPDWORD lpcbNeeded );
typedef DWORD (WINAPI* PGETMODULEBASENAMEW)(HANDLE hProcess, HMODULE
hModule, LPWSTR lpBaseName, DWORD nSize );
PENUMPROCESSES pEnumProcesses = NULL;
PNUMPROCESSMODULES pEnumProcessModules = NULL;
PGETMODULEBASENAMEW pGetModuleBaseNameW = NULL;

DWORD GetProcessHandleFromExe(LPWSTR pszProcessName, HANDLE
*phProcess)
{
DWORD procId = 0;
*phProcess = 0;
HINSTANCE hPSAPI = LoadLibrary(TEXT("psapi.dll"));
if (hPSAPI != NULL)
{
pEnumProcesses = (PENUMPROCESSES)GetProcAddress(hPSAPI,
"EnumProcesses");
pEnumProcessModules = (PNUMPROCESSMODULES)GetProcAddress(hPSAPI,
"EnumProcessModules");
pGetModuleBaseNameW = (PGETMODULEBASENAMEW)GetProcAddress(hPSAPI,
"GetModuleBaseNameW");
if(pEnumProcesses && pEnumProcessModules && pGetModuleBaseNameW)
{
DWORD dwProcesses[1024], dwNeeded, dwNbProcesses;
if(pEnumProcesses(dwProcesses, sizeof(dwProcesses), &dwNeeded))
{
dwNbProcesses = dwNeeded / sizeof(DWORD);
for (int i = 0; i < dwNbProcesses; i++)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE |
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcesses[i]);
if (hProcess)
{
HMODULE hModule;
if (pEnumProcessModules(hProcess, &hModule, sizeof(hModule),
&dwNeeded))
{
if(dwNeeded / sizeof(HMODULE) > 0)
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
pGetModuleBaseNameW(hProcess, hModule, szProcessName, sizeof
(szProcessName)/sizeof(TCHAR));
if(lstrcmpi(szProcessName, pszProcessName) == 0)
{
*phProcess = hProcess;
procId = dwProcesses[i];
break;
}
}
}
CloseHandle( hProcess );
}
}
}
}
FreeLibrary(hPSAPI);
}
return procId;
}

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hProcess;
//TCHAR szProcessName[MAX_PATH] = TEXT("notepad.exe");
TCHAR szProcessName[MAX_PATH] = TEXT("winhlp32.exe");
DWORD dwPID = GetProcessHandleFromExe(szProcessName, &hProcess);
if (dwPID)
{
if (TerminateProcess(hProcess, 1))
_tprintf(TEXT("Process [%s] (%d) killed !"), szProcessName, dwPID);
else
_tprintf(TEXT("Unable to kill process [%s] (%d)"), szProcessName,
dwPID);
}
else
_tprintf(TEXT("Process [%s] not found !"), szProcessName);
return 0;
}
Lacour Arthur
Le #20381291
1>D:Documents and SettingsLacour ArthurMes documentsVisual Studio
2008Projectskiller proccessDebugkiller proccess.exe : fatal error
LNK1120: 1 externes non résolus


C'est quoi ca ? XD


"Christian ASTOR" news:
On 18 oct, 14:52, "Lacour Arthur"
Le problème c'est que je débute et j'ai du mal à comprendre tout cela.
Un peu d'aide svp !



Exemple simplifié pour killer un process avec la PSAPI =>

#define UNICODE
#define _UNICODE

#include #include <iostream>
#include
typedef BOOL (WINAPI* PENUMPROCESSES)(DWORD* pProcessIds, DWORD cb,
DWORD* pBytesReturned );
typedef BOOL (WINAPI* PNUMPROCESSMODULES)(HANDLE hProcess, HMODULE
*lphModule, DWORD cb, LPDWORD lpcbNeeded );
typedef DWORD (WINAPI* PGETMODULEBASENAMEW)(HANDLE hProcess, HMODULE
hModule, LPWSTR lpBaseName, DWORD nSize );
PENUMPROCESSES pEnumProcesses = NULL;
PNUMPROCESSMODULES pEnumProcessModules = NULL;
PGETMODULEBASENAMEW pGetModuleBaseNameW = NULL;

DWORD GetProcessHandleFromExe(LPWSTR pszProcessName, HANDLE
*phProcess)
{
DWORD procId = 0;
*phProcess = 0;
HINSTANCE hPSAPI = LoadLibrary(TEXT("psapi.dll"));
if (hPSAPI != NULL)
{
pEnumProcesses = (PENUMPROCESSES)GetProcAddress(hPSAPI,
"EnumProcesses");
pEnumProcessModules = (PNUMPROCESSMODULES)GetProcAddress(hPSAPI,
"EnumProcessModules");
pGetModuleBaseNameW = (PGETMODULEBASENAMEW)GetProcAddress(hPSAPI,
"GetModuleBaseNameW");
if(pEnumProcesses && pEnumProcessModules && pGetModuleBaseNameW)
{
DWORD dwProcesses[1024], dwNeeded, dwNbProcesses;
if(pEnumProcesses(dwProcesses, sizeof(dwProcesses), &dwNeeded))
{
dwNbProcesses = dwNeeded / sizeof(DWORD);
for (int i = 0; i < dwNbProcesses; i++)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE |
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcesses[i]);
if (hProcess)
{
HMODULE hModule;
if (pEnumProcessModules(hProcess, &hModule, sizeof(hModule),
&dwNeeded))
{
if(dwNeeded / sizeof(HMODULE) > 0)
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
pGetModuleBaseNameW(hProcess, hModule, szProcessName, sizeof
(szProcessName)/sizeof(TCHAR));
if(lstrcmpi(szProcessName, pszProcessName) == 0)
{
*phProcess = hProcess;
procId = dwProcesses[i];
break;
}
}
}
CloseHandle( hProcess );
}
}
}
}
FreeLibrary(hPSAPI);
}
return procId;
}

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hProcess;
//TCHAR szProcessName[MAX_PATH] = TEXT("notepad.exe");
TCHAR szProcessName[MAX_PATH] = TEXT("winhlp32.exe");
DWORD dwPID = GetProcessHandleFromExe(szProcessName, &hProcess);
if (dwPID)
{
if (TerminateProcess(hProcess, 1))
_tprintf(TEXT("Process [%s] (%d) killed !"), szProcessName, dwPID);
else
_tprintf(TEXT("Unable to kill process [%s] (%d)"), szProcessName,
dwPID);
}
else
_tprintf(TEXT("Process [%s] not found !"), szProcessName);
return 0;
}
Christian ASTOR
Le #20381381
On 19 oct, 20:32, "Lacour Arthur"
1>D:Documents and SettingsLacour ArthurMes documentsVisual Studio
2008Projectskiller proccessDebugkiller proccess.exe : fatal error
LNK1120: 1 externes non résolus
C'est quoi ca ? XD



Tu ne mets pas quel est le "unresolved external symbol"
Certainement pas le bon subsystem dans les propriétés du projet...
Lacour Arthur
Le #20393381
Tu parle de ca ?

1>MSVCRTD.lib(crtexew.obj) : error LNK2019: symbole externe non rsolu
rfrenc dans la fonction ___tmainCRTStartup


"Christian ASTOR" news:
On 19 oct, 20:32, "Lacour Arthur"
1>D:Documents and SettingsLacour ArthurMes documentsVisual Studio
2008Projectskiller proccessDebugkiller proccess.exe : fatal error
LNK1120: 1 externes non résolus
C'est quoi ca ? XD



Tu ne mets pas quel est le "unresolved external symbol"
Certainement pas le bon subsystem dans les propriétés du projet...
Christian ASTOR
Le #20394001
On 21 oct, 14:13, "Lacour Arthur"
Tu parle de ca ?

1>MSVCRTD.lib(crtexew.obj) : error LNK2019: symbole externe non rsolu
rfrenc dans la fonction ___tmainCRTStartup



Oui, voilà.
C'est dans les propriétés de ton projet : c'est soit le subsystem
Windows<=>Console ou Unicode<=>ANSI
Google ramène des tonnes de hits pour cette erreur, comme :
http://www.ogre3d.org/forums/viewtopic.php?f=2&t7619&start=0
Lacour Arthur
Le #20394421
Ok j'ai mis subsystem console, ca marche mais j'ai une vilaine console noir
derrière ! Comment je l'enlève ?


"Christian ASTOR" news:
On 21 oct, 14:13, "Lacour Arthur"
Tu parle de ca ?

1>MSVCRTD.lib(crtexew.obj) : error LNK2019: symbole externe non rsolu
rfrenc dans la fonction ___tmainCRTStartup



Oui, voilà.
C'est dans les propriétés de ton projet : c'est soit le subsystem
Windows<=>Console ou Unicode<=>ANSI
Google ramène des tonnes de hits pour cette erreur, comme :
http://www.ogre3d.org/forums/viewtopic.php?f=2&t7619&start=0
Christian ASTOR
Le #20402121
On 21 oct, 16:23, "Lacour Arthur"
Ok j'ai mis subsystem console, ca marche mais j'ai une vilaine console no ir
derrière ! Comment je l'enlève ?



C'est un peu normal qu'il y ait une console si on choisit de faire un
prog console.
Si on fait un prog GUI (WinMain() au lieu de main(), subsystem
windows), il n'y aura pas de console..
Lacour Arthur
Le #20402961
Non mon programme n'affiche que des MessageBox donc je voudrais enlever la
console ( avec subsystem window j'ai des erreurs de li,kers)

"Christian ASTOR" news:
On 21 oct, 16:23, "Lacour Arthur"
Ok j'ai mis subsystem console, ca marche mais j'ai une vilaine console
noir
derrière ! Comment je l'enlève ?



C'est un peu normal qu'il y ait une console si on choisit de faire un
prog console.
Si on fait un prog GUI (WinMain() au lieu de main(), subsystem
windows), il n'y aura pas de console..
Publicité
Poster une réponse
Anonyme