OVH Cloud OVH Cloud

Détecter les modifications du titre d'une fenêtre

4 réponses
Avatar
Philou
Bonsoir,
pour automatiser le traitement de fichiers téléchargés, je dois suivre
l'évolution du titre d'une fenêtre d'un logiciel lancé par mon programme.
Concrètement, il s'agit de "quickpar" qui en gros a d'abord comme titre :
"quickpar - vérification des fichiers" puis "quickpar - vérification
terminée" ou bien "quickpar - réparation nécessaire".

Mon but est que mon programme lance quickpar, puis attende le résultat pour
faire une suite d'actions en fonction de l'état final de quickpar.
J'ai donc lancé un process :
proc.StartInfo.FileName="quickpar";

proc.StartInfo.Arguments="d:\\aaa.par2";

proc.Start();

proc.WaitForInputIdle();

puis j'essaie de suivre l'état du titre de la fenêtre avec

proc.MainWindowTitle

J'obtiens bien le premier titre de la fenêtre, mais quand le titre de
quickpar change, cette proprieté n'est pas mise à jour !

Tout se passe comme si MainWindowTitle prenait la valeur du premier titre,
puis qu'elle ignorait toutes les modifications.



Voyez vous un moyen de lire le titre en temps réel ?



Merci d'avance et bonne soirée

Philippe
--
Pour me répondre : philippe (POINT) maire (@) evc (POINT) net
Vive le spam :-)

4 réponses

Avatar
Paul Bacelar
C'est une très mauvaise approche.

Rien ne garantie que la fenêtre principale (la première créée) est celle qui
est visible.

Vous êtes fortement lié à des caractéristiques d'une application tierce qui
n'ont rien d'une API, le texte des titres ainsi que l'utilisation des
fenêtres ne sont pas des API et de très loin.

Utilisez Spy++ pour voir la hiérarchie de fenêtre et les envoies de message.

En un mot, utilisez des composants et pas des programmes standalone qui ne
sont pas prévus pour cela.
--
Paul Bacelar


"Philou" wrote in message
news:#
Bonsoir,
pour automatiser le traitement de fichiers téléchargés, je dois suivre
l'évolution du titre d'une fenêtre d'un logiciel lancé par mon programme.
Concrètement, il s'agit de "quickpar" qui en gros a d'abord comme titre :
"quickpar - vérification des fichiers" puis "quickpar - vérification
terminée" ou bien "quickpar - réparation nécessaire".

Mon but est que mon programme lance quickpar, puis attende le résultat


pour
faire une suite d'actions en fonction de l'état final de quickpar.
J'ai donc lancé un process :
proc.StartInfo.FileName="quickpar";

proc.StartInfo.Arguments="d:aaa.par2";

proc.Start();

proc.WaitForInputIdle();

puis j'essaie de suivre l'état du titre de la fenêtre avec

proc.MainWindowTitle

J'obtiens bien le premier titre de la fenêtre, mais quand le titre de
quickpar change, cette proprieté n'est pas mise à jour !

Tout se passe comme si MainWindowTitle prenait la valeur du premier titre,
puis qu'elle ignorait toutes les modifications.



Voyez vous un moyen de lire le titre en temps réel ?



Merci d'avance et bonne soirée

Philippe
--
Pour me répondre : philippe (POINT) maire (@) evc (POINT) net
Vive le spam :-)




Avatar
Philou
Bonjour,
je sais bien qu'il serait beaucoup mieux d'utiliser des composants, mais un
composant permettant d'analyser un fichier par2 n'existe pas...
Je ne vois pas d'autre solution que ça...

Avec spy++, je vois bien que la fenêtre reçoit un WM_SETTEXT mais je ne sais
pas s'il est possible que mon programme intercepte ce message ?

Cordialement,
Philippe

--
Pour me répondre : philippe (POINT) maire (@) evc (POINT) net
Vive le spam :-)
"Paul Bacelar" a écrit dans le message
de news:
C'est une très mauvaise approche.

Rien ne garantie que la fenêtre principale (la première créée) est celle
qui
est visible.

Vous êtes fortement lié à des caractéristiques d'une application tierce
qui
n'ont rien d'une API, le texte des titres ainsi que l'utilisation des
fenêtres ne sont pas des API et de très loin.

Utilisez Spy++ pour voir la hiérarchie de fenêtre et les envoies de
message.

En un mot, utilisez des composants et pas des programmes standalone qui ne
sont pas prévus pour cela.
--
Paul Bacelar


"Philou" wrote in message
news:#
Bonsoir,
pour automatiser le traitement de fichiers téléchargés, je dois suivre
l'évolution du titre d'une fenêtre d'un logiciel lancé par mon programme.
Concrètement, il s'agit de "quickpar" qui en gros a d'abord comme titre :
"quickpar - vérification des fichiers" puis "quickpar - vérification
terminée" ou bien "quickpar - réparation nécessaire".

Mon but est que mon programme lance quickpar, puis attende le résultat


pour
faire une suite d'actions en fonction de l'état final de quickpar.
J'ai donc lancé un process :
proc.StartInfo.FileName="quickpar";

proc.StartInfo.Arguments="d:aaa.par2";

proc.Start();

proc.WaitForInputIdle();

puis j'essaie de suivre l'état du titre de la fenêtre avec

proc.MainWindowTitle

J'obtiens bien le premier titre de la fenêtre, mais quand le titre de
quickpar change, cette proprieté n'est pas mise à jour !

Tout se passe comme si MainWindowTitle prenait la valeur du premier
titre,
puis qu'elle ignorait toutes les modifications.



Voyez vous un moyen de lire le titre en temps réel ?



Merci d'avance et bonne soirée

Philippe
--
Pour me répondre : philippe (POINT) maire (@) evc (POINT) net
Vive le spam :-)








Avatar
Fabrice MALAINGRE
Bonjour Philou,

Les propriétés d'une instance de la classe "Process" sont un "snapshot" des
véritables valeurs du processus correspondant
(i.e. les valeurs sont figées au moment de la création de l'instance).

Afin de rafraîchir les propriétés de votre instance, il faut appeler la
méthode "Refresh".

//============================= proc.Refresh();
MessageBox.Show(proc.MainWindowTitle);
//=============================
Cordialement

____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr
Avatar
Philou
Bonjour,
c'est exactement ce que je cherchais !!
Merci beaucoup

Philippe

--
Pour me répondre : philippe (POINT) maire (@) evc (POINT) net
Vive le spam :-)
"Fabrice MALAINGRE" a écrit dans le message de news:
%
Bonjour Philou,

Les propriétés d'une instance de la classe "Process" sont un "snapshot"
des véritables valeurs du processus correspondant
(i.e. les valeurs sont figées au moment de la création de l'instance).

Afin de rafraîchir les propriétés de votre instance, il faut appeler la
méthode "Refresh".

//============================= > proc.Refresh();
MessageBox.Show(proc.MainWindowTitle);
//============================= >
Cordialement

____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr