Gestion d'une fenêtre d'erreur sous Windows XP

2 réponses
Avatar
Yves Pointin
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-bunigc.@optinoinY.P';1 while
s/(.{3})(.{3})?/\$_{\$2}=\$1,\$2/e; ; print while \$_=\$_{\$_};"

2 réponses

Avatar
ebrnospam
Le 22/09/2012 10:14, Yves Pointin a écrit :
perl -e "$_='';1 while
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
Avatar
Yves Pointin
Le 26/09/2012 22:22, ebrnospam a écrit :
Le 22/09/2012 10:14, Yves Pointin a écrit :
perl -e "$_='';1 while
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



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 "$_='';1 while
s/(.{3})(.{3})?/$_{$2}=$1,$2/e; ; print while $_=$_{$_};"