1
我在大量的Excel工作簿上運行C#腳本,這涉及到在每個工作簿中調用宏;由於錯誤處理程序,宏有時會生成一個MsgBox,並暫停該腳本的執行,直到在MsgBox中單擊「確定」。如何獲得VBA MsgBox的窗口句柄?
MsgBox的標題文本是「processSub中的錯誤」,主文本是「錯誤(類型不匹配)」。
我想也許我可以有一個併發線程來查找所有當前打開的窗口,如果它發現MsgBox,單擊「確定」。我試圖找到這樣的窗口使用這樣的事情:
using System.Diagnostics;
public Process getErrorWindow()
{
Process[] processList = Process.GetProcesses();
foreach (Process process in processList)
{
if (process.MainWindowTitle=="Error in processSub")
{
return process;
}
}
}
但是,這沒有找到任何東西。當我查看processList[]
時,它似乎只能找到主Excel窗口,而不是其VBA代碼生成的任何子窗口。有沒有辦法找到MsgBox並點擊OK按鈕?
這個成功的作品,但是當我遠程桌面,'的SendKeys上運行.SendInput()'拋出'System.ComponentModel.Win32Exception:訪問被拒絕。有關如何解決此問題的任何想法,因爲我將在遠程桌面上運行該腳本,以便即使關閉筆記本電腦,該過程也可以繼續進行。 – sigil
難道你不能添加一個try/catch來捕獲該錯誤並且在沒有窗口彈出任何消息框的情況下處理它嗎? – user3598756
如果您正在執行整個FindWindow舞蹈,只需找到默認按鈕並按下即可。避免注入鍵盤事件的困難。 (如果你堅持這樣做,你應該完全使用SendInput,而不是keybd_event。) –