Discussion:
Gestion d'une fenêtre d'erreur sous Windows XP
(trop ancien pour répondre)
Yves Pointin
2012-09-22 08:14:53 UTC
Permalink
Bonjour,

Sur un PC sous Window XP avec ActivePerl, un programme d'acquisition
d'un capteur qui s'exécute comme un service, génère régulièrement une
erreur Window qui fait apparaître une fenêtre d'erreur dans laquelle il
faut cliquer sur un bouton oui ou non pour lancer ou non le debogger
Windows. Le problème est que le programme d'acquisition s'arrête et ne
se relance que si on clique sur le bouton non. J'aimerais faire un
programme Perl qui toutes les 5 minutes vérifierait si une fenêtre
d'erreur existe, déterminerait quel est le programme père qui l'a fait
apparaître ou qui récupérerait le texte écrit, et qui cliquerait sur non
ou tuerait la fenêtre.

Toutes suggestions concernant le(s) module(s) à utiliser et la manière
de faire serait les bienvenue.

Cordialement,
--
Dr. POINTIN Yves B.
perl -e "\$_='.frontermpclv-***@optinoinY.P';1 while
s/(.{3})(.{3})?/\$_{\$2}=\$1,\$2/e; ; print while \$_=\$_{\$_};"
ebrnospam
2012-09-26 20:22:42 UTC
Permalink
Post by Yves Pointin
s/(.{3})(.{3})?/\$_{\$2}=\$1,\$2/e; ; print while \$_=\$_{\$_};"
Je vois mal comment vous allez pouvoir identifier la fenêtre qui pose le
problème parmi tant d'autres ... aussi voici ce que je ferai,
j'utiliserai ce module :

http://search.cpan.org/~rpagitsch/Win32-Process-List-0.09/List.pm

pour connaître la liste des process qui s'exécute et les comparerait
toutes les 5 minutes à la liste originale.

http://www.lemoda.net/perl/win-ps-list/win-ps-list.html

Certains process peuvent bien sûr s'exécuter de par eux même mais un
filtre permettra de ne pas en tenir compte très rapidement, celui qui
restera sera celui qui provoque l'erreur.

Sinon pour l'identification du père ...

Process Explorer is your friend ...
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Voilà j'espère avoir pu vous aider ... même si ça ne répond pas
exactement à la demande.

Eric BERTHOMIER
http://eric.berthomier.free.fr
Yves Pointin
2012-12-18 11:02:25 UTC
Permalink
Post by ebrnospam
Post by Yves Pointin
s/(.{3})(.{3})?/\$_{\$2}=\$1,\$2/e; ; print while \$_=\$_{\$_};"
Je vois mal comment vous allez pouvoir identifier la fenêtre qui pose le
problème parmi tant d'autres ... aussi voici ce que je ferai,
http://search.cpan.org/~rpagitsch/Win32-Process-List-0.09/List.pm
pour connaître la liste des process qui s'exécute et les comparerait
toutes les 5 minutes à la liste originale.
http://www.lemoda.net/perl/win-ps-list/win-ps-list.html
Certains process peuvent bien sûr s'exécuter de par eux même mais un
filtre permettra de ne pas en tenir compte très rapidement, celui qui
restera sera celui qui provoque l'erreur.
Sinon pour l'identification du père ...
Process Explorer is your friend ...
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
Voilà j'espère avoir pu vous aider ... même si ça ne répond pas
exactement à la demande.
Eric BERTHOMIER
http://eric.berthomier.free.fr
Bonjour,

Merci de ces indications. En fait, j'ai résolu mon problème avec
Win32::GuiTest

use Win32::GuiTest qw( FindWindowLike
SetForegroundWindow
PushChildButton);

@whnds = FindWindowLike( undef, "^Débogueur" );
for $jj (@whnds) {
SetForegroundWindow( $jj );
my @texte = FindWindowLike( $jj,"MRRSrvc.exe","Static");
if($#texte >=0) {
PushChildButton( $jj, 7 ); ## Bouton "Non"
}
}

où le code 7 du bouton "Non" a été trouvé en utilisant winspy
http://www.catch22.net/software/winspy.asp

Cordialement,
--
Dr. POINTIN Yves B.
perl -e "\$_='.frontermpclv-***@optinoinY.P';1 while
s/(.{3})(.{3})?/\$_{\$2}=\$1,\$2/e; ; print while \$_=\$_{\$_};"
Loading...