J'ai un script Perl qui appelle une autre application sur laquelle je n'ai aucun contrôle. J'utilise le system()
pour appeler cette application. À l'occasion, cette application génère une exception non gérée et affiche une boîte de dialogue d'exception qui doit être traitée. Comme il s'agit d'un script Perl sans surveillance, je voudrais détecter cette situation et la gérer dans le script Perl et continuer. Ma recherche de solutions n'a pas été fructueuse. Puisque system()
génère un processus fils, les mécanismes de gestion des exceptions standard dans Perl ne s'appliquent pas. Je cours sur Windows XP. Aucune suggestion?Comment gérer une boîte de dialogue déclenchée par un programme que je démarre depuis Perl?
3
A
Répondre
2
Peut-être le message Perlmonks Win32::OLE: how to call Excel VBA macros and catch all VBA errors without dialog boxes appearing? peut vous aider.
Presque chaque fois que vous devez interagir avec des choses du système Windows, vous allez finir par utiliser l'API Windows (y a-t-il un nom officiel pour cela?) Via Win32::OLE.
2
Recherchez la boîte de dialogue et supprimez-la. Par exemple, si vous voulez tuer automatiquement une fenêtre ayant le titre de Calculatrice, le script suivant devrait fonctionner.
use strict;
use warnings;
use Win32::GUI();
use constant WM_CLOSE => 16;
sub kill {
my $handle = Win32::GUI::FindWindow('', 'Calculator');
Win32::GUI::SendMessage($handle, WM_CLOSE, 0, 0);
}
while(1){
&kill;
sleep(5);
}
De quel système d'exploitation êtes-vous? Que dit exactement la boîte de dialogue? – cjm
Désolé j'ai oublié de mentionner que je suis sur Windows XP en cours d'exécution perl sur un shell Cygwin et l'application qui provoque l'exception est «make». – bata
make est l'élévation d'une boîte de dialogue? Pouvez-vous nous montrer une capture d'écran, peut-être? Que dit la boîte de dialogue? –