Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TERMINER UN PROCESSUS (API WIN32 - GCC)


Information sur la source

Catégorie :API Niveau : Expert Date de création : 03/02/2004 Vu : 8 908

Note :
7,29 / 10 - par 7 personnes
7,29 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

Description

Ce petit bout de code, rédigé en réponse au forum, permet de terminer un processus en connaissant son nom, ici "MsnMsgr.exe".

Il a été compilé avec GCC et testé sous Windows 2000, mais devrait fonctionner avec MSVC++ et d'autres versions de Windows.
 

Source

  • #include <stdlib.h>
  • #include <stdio.h>
  • #include <windows.h>
  • #include <tlhelp32.h>
  • int main(void) {
  • // création du snapshot
  • HANDLE sys = NULL;
  • if (!(sys = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0))) {
  • fprintf(stderr, "Snapshot failure.\n");
  • return EXIT_FAILURE;
  • }
  • // ouverture du premier process
  • PROCESSENTRY32 proc;
  • ZeroMemory(&proc, sizeof(proc));
  • proc.dwSize = sizeof(proc);
  • if (!Process32First(sys, &proc)) {
  • fprintf(stderr, "Process32First failure.\n");
  • return EXIT_FAILURE;
  • }
  • // on cherche le process msn
  • DWORD msn = 0;
  • do {
  • if (lstrcmp(proc.szExeFile, "MsnMsgr.Exe") == 0) {
  • msn = proc.th32ProcessID;
  • break;
  • }
  • } while (Process32Next(sys, &proc));
  • CloseHandle(sys);
  • // msn n'est probablement pas lancé (vérifier GetLastError pour en être sûr)
  • if (!msn) {
  • fprintf(stderr, "Process32Next failure.\n");
  • return EXIT_FAILURE;
  • }
  • // ouverture du process msn
  • HANDLE msnproc = NULL;
  • if (!(msnproc = OpenProcess(PROCESS_TERMINATE, FALSE, msn))) {
  • fprintf(stderr, "OpenProcess failure.\n");
  • return EXIT_FAILURE;
  • }
  • // terminaison du process msn
  • TerminateProcess(msnproc, 0);
  • CloseHandle(msnproc);
  • // fin du programme
  • return EXIT_SUCCESS;
  • }
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

int main(void) {

  // création du snapshot
  HANDLE sys = NULL;
  if (!(sys = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0))) {
    fprintf(stderr, "Snapshot failure.\n");
    return EXIT_FAILURE;
  }

  // ouverture du premier process
  PROCESSENTRY32 proc;
  ZeroMemory(&proc, sizeof(proc));
  proc.dwSize = sizeof(proc);
  if (!Process32First(sys, &proc)) {
    fprintf(stderr, "Process32First failure.\n");
    return EXIT_FAILURE;
  }

  // on cherche le process msn
  DWORD msn = 0;
  do {
    if (lstrcmp(proc.szExeFile, "MsnMsgr.Exe") == 0) {
      msn = proc.th32ProcessID;
      break;
    }
  } while (Process32Next(sys, &proc));
  CloseHandle(sys);

  // msn n'est probablement pas lancé (vérifier GetLastError pour en être sûr)
  if (!msn) {
    fprintf(stderr, "Process32Next failure.\n");
    return EXIT_FAILURE;
  }

  // ouverture du process msn
  HANDLE msnproc = NULL;
  if (!(msnproc = OpenProcess(PROCESS_TERMINATE, FALSE, msn))) {
    fprintf(stderr, "OpenProcess failure.\n");
    return EXIT_FAILURE;
  }

  // terminaison du process msn
  TerminateProcess(msnproc, 0);
  CloseHandle(msnproc);

  // fin du programme
  return EXIT_SUCCESS;

}

Conclusion

Ligne de compilation utilisée : gcc -g -Wall -W msnkill.c
 

Commentaires et avis

signaler à un administrateur
Commentaire de NuklearStriker le 04/02/2004 12:58:58

il n'est pas de toi ce code!!!!

signaler à un administrateur
Commentaire de Nebula le 04/02/2004 15:14:32

Bah si, j'ai passé deux heures à le faire, hier... Qu'est-ce qui te fait dire çà ?

signaler à un administrateur
Commentaire de LordBob le 04/02/2004 17:42:46

salut je viens de tester ton code... et j'ai moi ca ne donne rien... :'(

signaler à un administrateur
Commentaire de Nebula le 04/02/2004 17:46:43

Il affiche une erreur, ou pas ? Et tu tournes sous quelle version de Windows ?

signaler à un administrateur
Commentaire de LordBob le 04/02/2004 17:50:22

alors j'ai windows XP, et VC.NET... ensuite j'ai pas d'erreur... le programme s'ouvre, mais MSN ne se ferme pas...

signaler à un administrateur
Commentaire de LordBob le 04/02/2004 17:53:04

non c'est bon attend j'ai trouver le truc... sa marche... c'est a la ligne:
if (lstrcmp(proc.szExeFile, "MsnMsgr.Exe") == 0), ca marchais pas j'ai donc mis if (lstrcmp(proc.szExeFile, "msnmsgr.Exe") == 0) mais j'ai laisser le E... en fait pour que ca marche, il faut que j'ecrive tout en minuscule... voila... et merci pour la source...

signaler à un administrateur
Commentaire de BruNews le 04/02/2004 17:55:46 administrateur CS

Salut Nebula, enfin de retour.
Je suis absent en ce moment cause FreeBox toujours pas arrivee.
ciao...

signaler à un administrateur
Commentaire de Nebula le 04/02/2004 18:32:04

Bob&gt; arf ok, l'idéal serait de faire un test insensible à la casse... bonne continuation ! :)

BruNews&gt; et oui, j'ai retrouvé le démon de la prog'... j'aurais une question pour toi d'ailleurs, quand tu auras ta freebox :p

signaler à un administrateur
Commentaire de LordBob le 04/02/2004 18:39:38

question c'est quoi la freebox dont vous parlez?

signaler à un administrateur
Commentaire de Nebula le 04/02/2004 18:46:51

le modem/téléphone/décodeur tv de free (tout passant via l'adsl)

signaler à un administrateur
Commentaire de LukeSkywalker le 20/02/2004 13:05:12

oué ba kan jserai ariver la moi jserai conten avec ma calculette jfai pitie snif :'(

signaler à un administrateur
Commentaire de BruNews le 20/02/2004 13:08:55 administrateur CS

Nebula, je suis revenu via l'ADSL sovietique (d'Etat, Wanadoo) que j'ai repris, Free n'a jamais livre, qu'ils aillent au diable.

signaler à un administrateur
Commentaire de tueurdechats le 29/03/2004 18:57:48

Salut !
Ca m'interresse bocoup ce code ki ferme un processus, mais je comprend rien (je code pas, je m'debrouille :)
J'ai dl Dev-c++ pour essayer de compiler ca mais en vain.
si c un "bout de code" ou k'il est l'autre bout ?
Et pis "gcc -g -Wall -W msnkill.c" g mis un certain temps a touver ce ke ca voulait dire mais je sais toujours pas comment ca marche dans dev-c++
g essayer tous les endroits ou on pouvait mettre ce type de ligne de commandes mais en vain aussi.
y a t'il un moyen simple pour pouvoir compiler ce truc avec dev-c++ ? (pour un gros nul koi ...)
merci d'avance :) :) :)

signaler à un administrateur
Commentaire de tueurdechats le 29/03/2004 21:50:40

re,
en fait ma question se precise les "arguments" (gcc -g -Wall ...) j'ai toujours pas compris.
si je les mets nul part il me met un msg d'erreur sur "Process32First"
(ou mieux: \Dev-Cpp\Bin\..\lib\gcc-lib\mingw32\3.2\tradcpp0.exe invalid option `-std=c89')
faut dire g toucher à tout la ...
mais celle ke j'ai a chaque fois c'est celle la :
Makefile.win  [Build Error]  [../project/main.o] Error 1

Quelque soit l'endroit ou je met les infos supplementaire pour la compil c'est jamais le bon ...

Bref, si quelqu'un sait comment je peux configurer la compilation ou meme me dire si je suis loin loin loin ...
la moindre info serait la bienvenue :)

signaler à un administrateur
Commentaire de tueurdechats le 31/03/2004 22:32:06

Bon ben en fait c'est pas la peine
j'ai trouvé ca c'est plus simple :)
C:\WINDOWS\system32\taskkill.exe /F /IM msnmsgr.exe

signaler à un administrateur
Commentaire de guilOooo le 13/07/2004 20:48:50

sous dev-C++ :
Ligne 4 :
tlhelp32.h: No such file or directory ;-(
ou le trouver ?



signaler à un administrateur
Commentaire de Nebula le 17/08/2004 01:36:31

Aucune idée pour DevC++, j'utilise la version "rustique" de GCC disponible sur www.mingw.org ... Je vous conseille de vous pencher dessus, car j'ai eu plus de problèmes avec DevCpp qu'autre chose :p

signaler à un administrateur
Commentaire de BeLZeL le 02/10/2004 21:19:45

Pour DevCpp il faut inclure la librairie -ltlhelp32 (dans les options du projet (link). Il faut donc créer un projet d'abord et inclure ce source ensuite. Mais c'est sûr que ca marche. Bien sûr, il faut au moins DevCpp 4.9.x.x.

signaler à un administrateur
Commentaire de shadow1779 le 16/11/2005 17:22:29

alors la je dis chapeau, pas sur le prog en lui meme car j'men fiche mais j'comprenais rien a l'exemple d'msdn pour fermer un process et la c'est vraiment tres tres tres tres tres bien! merci :)

ps: pour moa aussi ca marchait pas mais tu regarde dans la source et tu remplace le nom du prog par msnmsgr.exe tout en minuscule c'est comme ca sous xp en tout cas

signaler à un administrateur
Commentaire de Nebula le 16/11/2005 18:23:11

Content que çà serve à d'autres :)

Sinon pour le nom du programme, on peut aussi remplacer lstrcmp par lstrcmpi et ainsi avoir un test qui ne tiendra pas compte de la casse des caractères.

signaler à un administrateur
Commentaire de ciriako le 22/05/2006 11:33:16

Salut,

Je suis avec Dev-C++ sous windows XP et voici ce que ça m'affiche quand je veux compliler...

[Linker error] undefined reference to `Process32First@8'
[Linker error] undefined reference to `Process32Next@8'

quel est le problème ??

signaler à un administrateur
Commentaire de Nebula le 22/05/2006 12:48:09

Faut lire les commentaires, belzel y répond juste au dessus...

signaler à un administrateur
Commentaire de ciriako le 22/05/2006 13:38:32

j'avais déjà lu...

la librairie -ltlhelp32 elle devrait être dans le dossier lib si je ne me trompe pas. je la trouve pas, ou alors je fais pas la bonne mannip pour inclure la librairie

signaler à un administrateur
Commentaire de Nebula le 22/05/2006 13:49:28

La librairie s'appelle libtlhelp32.a normalement, regarde si tu l'as bien... C'est bizarre qu'elle ne soit pas détectée, elle est peut être dans un dossier non parcouru par défaut ? Sinon tu dois pouvoir la télécharger depuis le pack w32api sur mingw.org, et l'installer manuellement.

signaler à un administrateur
Commentaire de ciriako le 22/05/2006 14:15:01

j'ai chercher dans le pack w32api je n'est trouver aucune libtlhelp32.a

peut être que je suis pas doué aussi, c'est pas ma période....

je sais plus ou chercher...

signaler à un administrateur
Commentaire de BeLZeL le 24/05/2006 21:01:29

Bon, je sais pas si c'est ca mais je te l'ai uploadé quand même au cas où :
http://belzel.free.fr/libth32.a

Regarde dans ton répertoire Dev-Cpp\lib si tu l'as pas déjà.
Apparemment, changement de nom, mais c louche quand même.
J'sais pas si ca marchera, dis moi.

A+

signaler à un administrateur
Commentaire de ciriako le 26/05/2006 09:39:54

Merci BeLZeL, ça fonctionne.

A+++

signaler à un administrateur
Commentaire de kerneltony95 le 01/10/2006 21:12:58

pas mal ton code ! :) bj

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.