2010-08-09 106 views

回答

0

在Windows上安装一些有静音模式推出的标志,因此他们将不会显示在安装过程中的任何弹出窗口。但是,此选项取决于安装包的类型。

1

我假设你有一个运行EXE安装程序的ruby脚本(通过system调用或类似的方式),然后安装程序打开一个弹出消息,该消息不能被取消并禁止脚本继续。

如果是这种情况,那么您可以使用ruby Win32 API来调用像EnumWindowsCloseWindow这样的函数。当然,它们必须同时运行到安装程序(但可能必须在单独的进程中,具体取决于ruby/win32线程的实现细节),并且它必须知道如何在尝试关闭它之前识别正确的消息框。

下面是我可能如何破解它。编写一个名为“CloseMsgBox.exe”的单独程序,该程序采用一个命令行参数,该参数是它将关闭的MessageBox的标题;程序会定期调用EnumWindows,并调用GetWindowText,直到找到目标标题并通过CloseWindow关闭窗口。外部的Ruby脚本首先通过调用system(或popen等)然后exec安装程序在单独的线程中运行此程序。一旦安装程序打开消息框,CloseMsgBox程序将关闭它,因此安装程序将退出,CloseMsgBox将退出,外部Ruby脚本将退出。

+0

CloseWinodw方法可以关闭,但参数是hwnd,你知道,hwnd会随时更改。 你能以其他方式给我吗? 我只是做exec(“gamexiu.exe”),然后想关闭弹出消息 – user414823 2010-08-09 08:57:46

+0

这取决于如何以编程方式识别消息框窗口。 EnumWindows需要一个[回调函数](http://msdn.microsoft.com/en-us/library/ms633498%28v=VS.85%29.aspx),它将每个hWnd作为参数;例如,如果您知道消息框的标题,则可以使用[GetWindowText](http://msdn.microsoft.com/en-us/library/ms633520%28VS.85%29.aspx)选择正确的hWnd,然后调用CloseWindow。 – maerics 2010-08-09 11:15:51

相关问题