2010-08-09 60 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