Fermer un processus. - Delphi/Pascal - Programmation
Marsh Posté le 13-04-2005 à 12:24:36
Je suppose que ça peut se faire avec TerminateProcess en utilisant le Handle mis dans les infos du process ("Pi" dans ton cas, mais tu vas donc devoir faire trois structures ou au moins garder les trois valeurs de Pi.hProcess)
Marsh Posté le 13-04-2005 à 12:35:04
TerminateProcess(Pi.hProcess,0)
j'ai essayer ca... mais cela ne marche pas
Marsh Posté le 13-04-2005 à 12:57:31
Il renvoie quoi ?
Fais un RaiseLastOsError s'il renvoie 0
Marsh Posté le 13-04-2005 à 20:31:12
Bon, je suis un peu pomé pour fermer les apps, mais ca c'est d'ordre N°2...
pour le moment ce qui compte le plus, ca serait la commande qui vérifie si les exe dos1 dos2 dos3 sont présents et si la réponse est négative, un showmessage('exes introuvables');, connaitrais tu le code ? j'ai cherché longtemps mais j'ai pas trouvé grand chose
Marsh Posté le 13-04-2005 à 20:48:44
if not FileExists('....') then
...
Marsh Posté le 13-04-2005 à 21:28:08
je vais tester ca ^^
merci beaucoup d'avance, meme si ca marche pas, c'est sympas de m'aider ^^ (ca a l'air bien vide ici).
Marsh Posté le 13-04-2005 à 21:30:18
Ca marche !!!
merci beaucoup !!!!
alala ^^ suis trop content
Marsh Posté le 14-04-2005 à 09:38:12
Hm ^_^ me revoila, Bonjour.
Alors, après des tas de tentatives ( ), toujours rien n'y fait pour ma commande "arreter" les processus. Donc j'ai pensé a une possibilité, mais je ne sais pas si c'est réalisable...
Alors je m'explique :
ctrl alt suppr, il y a une liste de processus, chaqun portant un nom (...exe, ...exe etc), après avoir cliqué sur mon bouton demarrer, les processus dos1 dos2 et dos3.exe apparaissent (logique, c'est le but), n'y a t'il pas une commande pour envoyer au system "fermer les processus ayant pour nom "dos1.exe" "dos2.exe" et "dos3.exe" ?
J'espère que j'ai été assez clair
Merci de ton aide antp
Marsh Posté le 14-04-2005 à 10:05:50
Il doit y avoir des fonctions pour rechercher des processus, mais je ne les connais pas par cur, je te laisse faire la recherche Si ça se trouve, ça a été évoqué ici sur le forum.
Marsh Posté le 14-04-2005 à 10:27:16
ne jamais utiliser TerminateProcess() !!!
aucune libération des ressources n'est effectuée, c'est la pire des méthodes pour fermer un processus. c'est pour la même raison qu'il ne faut jamais stopper un thread brutalement, mais attendre qu'il se termine
la meilleure solution consiste à :
- utiliser EnumThreadWindows pour trouver la fenêtre associée au processus (via le theadID renvoyé par CreateProcess), et lui envoyer un WM_CLOSE
- oo bien utiliser PostThreadMessage(threadID, WM_QUIT, 0, 0) pour faire sortir le thread de sa boucle de messages
edit: on préferera la 1ere solution
Marsh Posté le 14-04-2005 à 10:34:42
Harkonnen a écrit : ne jamais utiliser TerminateProcess() !!! |
Ha J'avais juste regardé en vitesse dans la doc ce qui commençait par "Terminate"
Marsh Posté le 14-04-2005 à 10:38:51
antp a écrit : Ha J'avais juste regardé en vitesse dans la doc ce qui commençait par "Terminate" |
je commence à comprendre d'ou viennent les leaks quand j'utilise Ant Renamer
Marsh Posté le 14-04-2005 à 10:41:51
ReplyMarsh Posté le 14-04-2005 à 10:42:10
merci beaucoup pour vos réponse, mais je ne sais pas comment utiliser cette commande (EnumThreadWindows), tu pourrais me donner un exemple :s ?
j'dois passer pour un gros boulet vraiment désolé xD
Marsh Posté le 14-04-2005 à 10:42:36
et un coup de pelle à clous pour antp qui lit pas la MSDN en entier
http://msdn.microsoft.com/library/ [...] rocess.asp
Citation : |
edit: putain, en plus les dll restent attachées au processus, cette fonction est une calamité à elle seule
Marsh Posté le 14-04-2005 à 10:46:54
Vince131 a écrit : merci beaucoup pour vos réponse, mais je ne sais pas comment utiliser cette commande (EnumThreadWindows), tu pourrais me donner un exemple :s ? |
y'a un exemple ici
http://msdn.microsoft.com/library/ [...] events.asp
Marsh Posté le 14-04-2005 à 10:51:30
Putain j'y comprend rien -_- c'est bon j'vais aller me jeter... j'sers trop a rien la -_-...
Merci quand meme pour votre aide... aurevoir
Marsh Posté le 14-04-2005 à 11:01:17
Harkonnen a écrit : et un coup de pelle à clous pour antp qui lit pas la MSDN en entier |
Désolé de pas lire toute la doc avant de répondre sur le forum Je supposais que celui qui utilise la fonction la liste, la doc.
Et si j'avais dû l'utiliser j'aurais tout lu
Edit : Et toi, t'as pas lu la doc sur le protocole HTTP avant de faire ton plugin ? T'aurais vu qu'il fallait encoder les caractères spéciaux
Marsh Posté le 14-04-2005 à 11:01:44
en delphi tu peux faire ça comme ça :
tu declare des tableaux, tu peux faire ça avec stringlist si tu veux..
Code :
|
la fonction callback
Code :
|
et finalement tu utilises ça tu affiche les handle et le caption des fenêtres dans un TListbox par exemple :
Code :
|
apres il te reste plus qu'a chercher le texte que tu veux, tu prends le handle et tu envoi un WM_CLOSE comme te dit Harkonnen
sinon doit y'avoir des exemples sur des sites genre delphifr ou phidels par exemple.
bonne chance
Marsh Posté le 14-04-2005 à 11:02:56
antp a écrit : |
coup bas
Marsh Posté le 14-04-2005 à 12:35:30
elle est bien, l'icone du truc là
Marsh Posté le 14-04-2005 à 12:48:36
the real moins moins a écrit : elle est bien, l'icone du truc là |
Marsh Posté le 14-04-2005 à 12:50:18
cfr 1er post : http://img228.echo.cx/img228/5701/screen2cz.jpg
Marsh Posté le 14-04-2005 à 12:50:42
Il parle de l'image dans le 1er post je suppose
edit :
Marsh Posté le 14-04-2005 à 13:08:25
C'est une image d'un mmorpg (Ragnarok Online)...
Enfin voilà, me manque plus qu'a comprendre/trouver une fonction pour fermer les 3 dos, et l'appliquer aussi pour "OnClose" de manière a les fermer quand on quitte mon programme.
Merci ^^
Marsh Posté le 14-04-2005 à 13:44:01
3 Processus ? Ragnarok Online ?
snif, snif,... Spas bien. (En plus sur la même machine Oo ? Ca doit mettre pas loin d'une demi-heure pour démarrer...)
Marsh Posté le 15-04-2005 à 09:44:17
Non pas un brain ^^
4-5 seconde max sur mon 3000+ 64bit, 1go ddr.
Fin bref... si tu sais ce que c'est, ca m'arrangerait qu'on évite d'en parler ^^ (tu vois ce que je veux dire). Merci
Marsh Posté le 15-04-2005 à 09:50:29
euh.. je pense que je vais fermer ce topic
Marsh Posté le 13-04-2005 à 11:49:51
Bonjour tout le monde.
Je m'appelle Vincent, j'ai 14 ans (mais tout le monde s'en fout lol).
Enfin, je vous présente la situation ^_^, j'"apprend" le delphi depuis hier, et je suis en train de concevoir un programme très "basic", lançant 3 applications DOS cachées (sw_hide).
Alors, problèmes que je n'arrive pas a résoudre :
1) Quand on quitte mon programme, les 3 fenêtres dos restent actives.
2) Je n'arrive pas a trouver/faire fonctionner une commande qui me permettrer de stoper les 3 exe, grace a mon bouton "arreter".
3) Si le prog n'est pas dans le meme repertoire que les 3 fenêtres dos, on clique sur "demarrer" et cela ne fait rien, y a t-il une commande type "check" ? pour vérifier la présence des 3 programmes dos ?
voici la commande que j'utilise pour lancer les 3 exe :
procedure TForm1.Button1Click(Sender: TObject);
var
Si : STARTUPINFO;
Pi : PROCESS_INFORMATION;
begin
ZeroMemory(@si,sizeof(STARTUPINFO));
Si.dwFlags:=STARTF_USESHOWWINDOW;
Si.wShowWindow:=SW_HIDE;
CreateProcess(nil, 'dos1.exe',nil,nil,True,0,nil,nil,Si,Pi);
CreateProcess(nil, 'dos2.exe',nil,nil,True,0,nil,nil,Si,Pi);
CreateProcess(nil, 'dos3.exe',nil,nil,True,0,nil,nil,Si,Pi);
end;
J'utilise Delphi 6, voici une petite screen de mon "prog" :
A oui j'oublier, quand on clic sur Démarrer, cela lance les 3 prog dos, et le bouton se transforme en "arreter" (plus pratique).
La tache bleu c'est une url que j'ai volontairement cachée.
Si la question a déja été posée, je m'excuse à l'avance.
Merci
Message édité par Vince131 le 13-04-2005 à 11:51:24