我正在編寫一個打開許多PI ProcessBook顯示文件的c#應用程序。 PI Processbook是一個嵌入了Visual Basic for Applications支持的程序,包括VBE環境。如何在VBE編輯器中強制中斷
我遇到的問題是,我想要打開的顯示器的數量在顯示器打開時會自動運行的宏。我已經將宏保護設置爲最大值(應完全禁用宏!),但不幸的是TypeLibrary中有一些我正在使用的東西,這意味着當以編程方式打開文件時,它會繞過宏安全性和宏運行。去圖....
因此,我試圖找到一種方法來編程地殺死這些宏,即使他們已經開始。我曾嘗試使用SendKeys.Wait(「^ {BREAK}」)強制進入休息模式。這個「有效」,但是有點碰巧:我發現如果宏在某個時候沒有暫停,SetForegroundWindow不能強制VB編輯器前臺接受sendkeys輸入。因此我嘗試使用sendmessage。我使用SPY ++查看CTRL + BREAK似乎發送WM_CANCELMODE消息到窗口。顯然,這種處理方式與字面上的ALT + Tabbing不同,或者用鼠標點擊窗口並按下CTRL + Break鍵,處理方式不同,消息排隊,但在宏完成執行前似乎沒有處理。
有沒有人有任何其他建議要嘗試?
PI ProcessBlock是否有'OnDocumentOpen'(或類似的)事件? 幸運的是,該應用程序事件在顯示OnOpen事件之前觸發。 如果是這樣,您可以編輯文檔並刪除宏,如果您在文檔中找到某個「VBAProject」(或類似的)屬性。 –
哦!它確實!它有一個DisplayOpen()事件。不知道如何映射一個事件處理程序,但我可以放棄它。 – ainwood
您也可以嘗試以編程方式在打開任何文檔之前禁用宏。 –