Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 2019
-
24 mars 2009 à 20:23
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
25 mars 2009 à 19:38
Bonjour,
Je fais un bench et j'ai besoin du gestionnaire des tâches de Windows pour contrôler certains trucs.
Je me suis dit, confiant (et décontracté au début) : «Tiens! Je vais intégrer le gestionnaire à mon projet. Ce sera plus bô».
J'avais donc besoin du Handle de fenêtre du gestionnaire...
J'ai donc fait :
var ShellHdl : THandle;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShellExecute(0,'OPEN','TaskMgr.exe', Nil, Nil, SW_SHOW);//On lance le gestionnaire.
repeat
ShellHdl := FindWindow('#32770',nil); //Récupération du Handle de sa fenêtre par le ClassName.
Application.ProcessMessages;
until ShellHdl<>0;
ShowMessage(IntToStr(ShellHdl));
end;
...
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
PostMessage(ShellHdl, WM_CLOSE, 0, 0);
end;
C'est là que ça commence à se gâter et à me pourrir la vie : ça ne ferme pas le gestionnaire quand on quitte!
Alors, j'ai essayé:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if ShellHdl <> 0 then ShellHdl := FindWindow('#32770',nil);
PostMessage(ShellHdl, WM_CLOSE, 0, 0);
ShowMessage(IntToStr(ShellHdl));
end;
Là, ça ferme le gestionnaire. Cool!
Mais que me rends-je compte, ahuri?
Le Handle de la fenêtre du gestionnaire a changé depuis sa création dans FormCreate? Pas cool!
En plus, histoire de me faire ch*** un max, parfois ça change pas.
Alors je viens vers vous pour vous demander si on peut vraiment faire confiance à ces saloperies de Handles ou si c'est moi qui perds la boule?
Merci de tendre la main à un mec qui va tourner chèvre.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 25 mars 2009 à 09:14
salut,
juste une idée comme ça...
as-tu fais un essai avec un autres programme (genre notepad) histoire de voir si c'est un problème de code/design ou de gestionnaire de tâche. (cela me semblerais logique que le gestionnaire de tâche soit différent des autres programmes)
bon code,
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 25 mars 2009 à 19:38
Salut,
J'allais dire : et s'il y avait deux gestionnaires ? -> CreateProcess pour avoir le PID au lancement.
Mais en fait il ne peut y avoir qu'une instance de gestionnaire visiblement (Dépend de le config de windows ?).
Comment fais tu si l'utilisateur avait déjà lancé le gestionnaire ?
Autre remarque, Process Explorer peut être configuré pour remplacer taskmgr (Options->Replace Task Mgr). Bilan c'est lui qui est lancé quand on demande taskmgr.exe. Je pense pas que ce soit si rare que ça sur une machine de développeur.
Et finalement, pourquoi avoir besoin du gestionnaire ? Ne peux tu pas recoder ce qui t'intéresse ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 25 mars 2009 à 13:12
@yannfrance
Oui. J'ai entendu parler du problème avec Nero. Mais d'un autre côté ça me gène de faire une recherche par le titre de la fenêtre à cause des PC qui ne sont pas forcément en langue française...
@Loda
Je dois m'absenter qq jours mais je ferai ce test dès mon retour pour confirmer ton idée. Mais de toute façon, moi, c'est du gestionnaire dont j'ai besoin. Il va bien falloir qu'il se plie à ma volonté et j'y arriverai. Mais j'aimerai quand même comprendre le pourquoi du comment...