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