Terminer un processus

Signaler
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
-
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
-
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

Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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.
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
En vérifiant son titre avec GetWindowText ?

Le savoir ne vaut quelque chose que s'il est partagé par tous.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
ok je vais voir ca... merci pour ton aide !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Autre truc a modifier: TerminateProcess demande un HANDLE en 1er param, pas un HWND.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
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..."
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Correct. Fais plutôt çà : SendMessage(MSN, WM_QUIT, 0, 0);

Radical.

Le savoir ne vaut quelque chose que s'il est partagé par tous.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
et je met la fonction SendMessage ou?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
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.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
ben moi il a pas l'air de me detecter la fenetre du tout :(
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
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..."