Fermeture d'une application par un programme externe

Signaler
Messages postés
62
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
25 mai 2013
-
Messages postés
67
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
19 janvier 2009
-
Bonjour à Tous
J'ai un problème sur la fermeture d'une application par une application externe :
J'utilise FindWindow pour récupérer le Handle de mon application à fermer et SendMessage(handle,WM_CLOSE,0,0) pour fermer mon application.
Le problème est que pour certaines applications, ça fonctionne normalement et pour d'autres applications, la fenêtre principale ne se ferme pas. Je ne comprends pas pourquoi.
Le Handle récupéré est bien différent de 0. La fonction SendMessage ne renvoie pas d'erreur. Avec PostMessage ou TerminateProcess, c'est pareil.
Le titre de mon application est bien celui défini à la compilation de mon programme, vérifié aussi dans l'état des process de WinXP (le titre apparait lorsque l'on clique sur l'onglet Applications du gestionnaire de tâches de Windows).
Toutes mes applications sont compilées et écrites à peu près de la même façon et je ne comprends pas pourquoi sur certaines l'application se ferme sans probléme et pour d'autres l'application ne se ferme pas.
Si vous avez une idée, je suis preneur !
Merci d'avance.

Gabriel

2 réponses

Messages postés
62
Date d'inscription
lundi 8 novembre 2004
Statut
Membre
Dernière intervention
25 mai 2013

Re Bonjour
N'ayant pas de suggestion à mon problème et n'arrivant pas trouver la solution, je continue à solliciter les lecteurs et développeurs.
Si vous avez deux minutes à me consacrer, j'aimerais que vous essayez de votre de votre côté de fermer par l'intermédiaire d'une appli externe avec les deux instructions suivantes :

ahandle:=FindWindows(nil, 'CW_Player');
PostMessage(ahandle,WM_CLOSE,0,0);

Le programme CW_Player se trouve à l'adresse URL suivante :
http://www.f6dqm.fr/soft/cwplayer/cwplayer.zip
C'est un petit programme gratuit à l'usage des radioamateurs pour apprendre le Morse. Le titre de cette application est CW_Player (vérifiable par le gestionnaire de tâches de Windows).
Je voudrais savoir si, chez vous, vous arrivez à fermer le programme avec les 2 lignes de code ci-dessus.
Chez moi, il n'y a pas d'erreur générée ('opération réussie') mais la fenêtre de CW_Player ne se ferme pas alors que si j'essaie avec d'autres applis persos, il n'y a pas de problème.
Est-ce que ça vient de mon programme CW_Player ou est-ce que ça vient de mon système ?
Gabriel
Messages postés
67
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
19 janvier 2009

Bonjour, je n'ai pas tester avec ton programme/fonction mais pour ma part j'utilise TerminateProcess et je n'ai jamais rencontré de problème,
j'utilise une fonction que j'ai trouvé sur ce site il y a déjà quelque temps :

function KillProcess(const sProcessName : string): boolean;
var
Processentry32 : TProcessEntry32;
Handle : THandle;
HProc : THandle;
begin
  Result := False;
  Processentry32.dwSize := SizeOf(Processentry32);
  Handle := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
  Process32First(Handle,Processentry32);
  repeat
    if CompareText(Processentry32.szExeFile,sProcessName) = 0 then
    begin
      HProc := OpenProcess(1,False,Processentry32.th32ProcessID);
      TerminateProcess(HProc,4);
      Result := True;
      break;
    end;
  until
    not Process32Next(Handle,Processentry32);
end;

Voilà, si sa peu d'aider un peu.
Cordialement, Neil.