如何处理我从Perl开始的程序引发的对话框?

时间:2010-09-26 16:31:47

标签: perl exception-handling windows-xp system

我有一个Perl脚本调用另一个我无法控制的应用程序。我使用system()来调用此应用程序。有时,此应用程序会生成未处理的异常,并会显示需要处理的异常对话框。由于这是一个无人参与的Perl脚本,我想检测这种情况并在Perl脚本中处理它并继续。我对解决方案的追求并不富有成效。由于system()生成子进程,因此Perl中的标准异常处理机制不适用。我在Windows XP上运行。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

也许Perlmonks帖子Win32::OLE: how to call Excel VBA macros and catch all VBA errors without dialog boxes appearing?可以提供帮助。

几乎在您必须与Windows系统进行交互的任何时候,您最终都会使用Windows API(有正式名称吗?)通过Win32::OLE

答案 1 :(得分:2)

找到对话框并将其删除。例如,如果要自动终止一个属于Calculator标题的窗口,则以下脚本应该可以正常工作。

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