Terminer un processus

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 3 févr. 2004 à 19:59
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 4 févr. 2004 à 18:22
Bonjour a tous,
voila j'essaie de fermer un processus (celui de MSN Messenger), j'ai donc fait comme ceci:

TerminateProcess((FindWindow("msnmsgr.exe", NULL)), NULL);


seulement rien ne se produit, est ce que quelqu'un pourrait me dire pourquoi?
Merci par avance...
Bob...

"La chance accorde ses faveur aux esprits avertis..."

24 réponses

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 20:05
Si j'en crois la doc, FindWindow demande un CLASSNAME et non pas un nom d'exécutable... Il va falloir la localiser autrement (et je ne sais pas comment le faire directement, mais on peut le faire avec une boucle et EnumWindows).

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 20:07
J'ai dit une connerie : pas une boucle, une CALLBACK.

La boucle, c'est avec FindNextWindow...

Enfin y'a plusieurs possibilités, quoi. Si tu trouves comment le faire directement, laisse un message, çà m'intéresse ;-)

Merci.

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 20:09
ok, mais avec EnumWindows, comment je peux savoir que le handle retourné et celui de MSN?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 20:11
En vérifiant son titre avec GetWindowText ?

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 20:13
ok je vais voir ca... merci pour ton aide !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 20:35
g ecrit sa pour la fonction EnumWindowsProc:

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
if(GetWindowText(hWnd, "MSN Messenger", NULL))
MSN = hWnd;

return TRUE;
}


et ceci dans la fonction qui l'appel:

EnumWindows(EnumWindowsProc, NULL);
TerminateProcess(MSN, NULL);


mais toujours rien ne se passe...
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 20:37
Le deuxième argument de GetWindowText est censé être un buffer dans lequel sera enregistré le titre de la fenêtre... Il faudra ensuite comparer les deux chaines, avec par exemple lstrcmp.

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 20:59
ma fonction EnumWindowsProc donne ca:

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
GetWindowText(hWnd, buffer, NULL);

if(lstrcmp(buffer, "MSN Messenger") == 0)
MSN = hWnd;

return TRUE;
}


le reste est pareil ca ne marche tjs pas :(
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 21:06
Essaie plutôt çà:
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) {

BYTE buffer[14];

ZeroMemory(buffer, 14);

GetWindowText(hWnd, buffer, 13);
if(lstrcmp(buffer, "MSN Messenger") 0) MSN hWnd;

return TRUE;

}


Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
3 févr. 2004 à 21:09
Salut,
Autre truc a modifier: TerminateProcess demande un HANDLE en 1er param, pas un HWND.
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 21:11
j'obtiens deux erreurs avec ton code:

main.cpp(54) : error C2664: 'GetWindowTextA' : impossible de convertir le paramètre 2 de 'BYTE [14]' en 'LPSTR'
Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
main.cpp(56) : error C2664: 'lstrcmpA' : impossible de convertir le paramètre 1 de 'BYTE [14]' en 'LPCSTR'
Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 21:12
Correct. Fais plutôt çà : SendMessage(MSN, WM_QUIT, 0, 0);

Radical.

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 21:13
aardman >> ca tombe, je vais poser une question con mais c'est quoi la difference entre un HWND et un handle, moi je croyais que c'était la meme chose
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 21:14
et je met la fonction SendMessage ou?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 21:16
Hum, çà fonctionne sous GCC, pourtant...

Essayons avec les cast :
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) {

BYTE buffer[14];

ZeroMemory(buffer, 14);

GetWindowText(hWnd, (LPTSTR) buffer, 13);
if(lstrcmp((LPTSTR) buffer, "MSN Messenger") 0) MSN hWnd;

return TRUE;

}


Quand à SendMessage, tu l'utilises pour remplacer TerminateProcess.

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
3 févr. 2004 à 21:20
Salut,
un handle est un "nombre" de 32bits qui sert a identifier de maniere unique quelque chose:
HWND est le handle d'une fenetre.
HANDLE est le ici le handle d'un processus.
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 21:25
bon je viens de compiler, et d'essayer, il n'y a pas d'erreur de compilation, mais msn ne veut pas se fermer !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
3 févr. 2004 à 21:39
Apparemment, EnumWindows ne renvoie que les fenêtres visibles, car chez moi il ne détecte pas MSN dans la systray. Par contre, si je l'affiche, il le détecte...

Va falloir utiliser une boucle et GetWindow, qui permet de trouver aussi les fenêtres invisibles...

Le savoir ne vaut quelque chose que s'il est partagé par tous.
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 21:50
ben moi il a pas l'air de me detecter la fenetre du tout :(
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
3 févr. 2004 à 21:55
chez moi il semblerai que se soit la que tout ne se passe pas comme il faut:

if(lstrcmp((LPTSTR) buffer, "MSN Messenger") == 0)

Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
Rejoignez-nous