2010-09-26 4 views
3

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?

+2

De quel système d'exploitation êtes-vous? Que dit exactement la boîte de dialogue? – cjm

+0

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

+2

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? –

Répondre

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); 
} 
Questions connexes