Salut tout le monde,
Je voudrais savoir si on pouvé terminer un processus avec du C++?
Merci d'avance
A+
Version imprimable
Salut tout le monde,
Je voudrais savoir si on pouvé terminer un processus avec du C++?
Merci d'avance
A+
Avec es Api windows, t'as la fonctionCitation:
TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
ok merci, mais pour le nom du processus, est-ce que c'est le même que dans le gestionnaire des tâches?
Un process est identifié par un PID = un numéro. Tu donnes ce PID à OpenProcess qui te renvoie un handle (si tu en as le droit) à donner à TerminateProcess. EnumProcesses te renvoie tous les PID. GetModuleBaseName te donne le nom d'un process.
http://msdn.microsoft.com/library/en-us/perfmon/base/enumerating_all_processes.asp
Si tu veux récupérer un processus existant pour le tuer, le mieux est de le repérer par sa fenêtre (avec diverses techniques, FindWindow() peut être suffisant par exemple) et de récupérer ensuite l'ID du processus avec GetWindowThreadProcessId()...
Par contre, y'a pas de méthode plus sale que TerminateProcess() pour quitter un processus. Tu peux d'abord essayer en postant des messages à la fenêtre: WM_SYSCOMMAND(SC_CLOSE) , puis si ça ne marche pas WM_CLOSE...
Si ça ne marche toujours pas, le TerminateProcess() peut s'avérer nécessaire...
(ou bien, tu peux faire des techniques (beaucoup) plus tordues, comme injecter un thread qui appelle ExitProcess() :P )
Pour tuer proprement:
http://support.microsoft.com/kb/q178893/
Ok merci beaucoup c'était exactement ça qu'il me fallait. Je vais étudier les differentes solutions et je verrais ce qui me convient le plus, a mon avis un ExitProcess() devrait suffir.
A+ :wink:
Mais ExitProcess() ne termine que le processus courant...
J'utilise Visual Studio .NET, j'ai été sur le lien de Aurelien.Regat-Barrel et le code donné ne marche pas sur mon ordi.
Ce sont des erreurs externes non résolus, est-ce que j'ai une librairie à installer ou une ligne de code à rajouter?
Les symboles non-résolus, tu les as pour les fonctions WoW ?
En fait, celles-ci ne sont utiles que pour tuer des processus 16 bits (DOS et Win 3.11). Si tu as la garantie que le processus à tuer est un processus Win32, tu n'as besoin que des fonctions "processus 32-bits", qui sont directement contenues dans kernel32.dll...
Qu'est-ce que tu appele les fonctions WoW, parce-que oui moi je suis sur que ce sont des processus 32 bits que je veux terminer.
Je parlais des fonctions que l'article mentionnait pour les programmes 16 bits (VDMEnumTaskWOWEx et VDMTerminateTaskWOW), WoW signifiant ici "Windows on Windows".
Mais pour terminer un des processus 32 bits, tu n'as pas besoin de ces fonctions.
Tu n'as besoin que de OpenProcess et TerminateProcess pour tuer le processus une fois que tu connais son ID.
(Pour le connaitre, plusieurs moyens: Si c'est un processus fils que tu veux tuer, tu as directement un HANDLE vers le processus (une des valeurs retournées par CreateProcess), sinon, généralement, tu peux récupérer l'ID du processus avec FindWindow et GetWindowThreadProcessId...
Ok d'ac, par contre sur le lien
http://msdn.microsoft.com/library/en..._processes.asp
j'ai du code, et c'est avec celui là que j'ai des erreurs externes, pourtant je n'utilise pas les fonctions que tu viens de me dire.
Il n'y aurai pas une DLL à joindre ou quelque chose comme ça?
EnumProcesses ne marchant que sous Windows NT, je suppose qu'il y a un #define à mettre avant d'inclure windows.h...
Plus d'informations : Using the windows headers
Si tu veux avoir du code qui marche ailleurs, tu peux utiliser Process32First et les fonctions qui vont avec...
Oui c'est exactement ça, merci beaucoup j'ai reussi c'est bon, dans les liens que tu me donne, je peux même lister les modules et les threads.
Merci encore :wink:
A+
De rien.
Bientôt, ton processus victime pourra dire "black_is_beautiful m'a tuer" ;)
;)Citation:
tué
(Je remonte ce vieux thread car je suis retombé dessus par hasard)
Aurélien: tuer
Compare au titre du thread.