我正在编写打开许多 PI ProcessBook 显示文件的 ac# 应用程序。PI Processbook 是一个嵌入了 Visual Basic for Applications 支持的程序,包括 VBE 环境。
我遇到的问题是,我要打开的许多显示器中都有宏,这些宏会在打开显示器时自动运行。我已将宏保护设置为最大(这应该完全禁用宏!),但不幸的是,我正在使用的 TypeLibrary 中有一些东西意味着当以编程方式打开文件时,它会绕过宏安全性并且宏仍然会运行。去搞清楚....
因此,我试图找到一种以编程方式杀死这些宏的方法,即使它们已经启动。我尝试使用 SendKeys.Wait("^{BREAK}") 强制进入中断模式。这“有效”,但有点偶然:我发现如果宏在某个时候没有暂停,SetForegroundWindow 不能强制 VB 编辑器到前台接受 sendkeys 输入。因此,我尝试使用 sendmessage。我使用 SPY++ 看到 CTRL+BREAK 似乎向窗口发送了 WM_CANCELMODE 消息。显然,这与字面上的 ALT+Tabbing 或用鼠标单击窗口并按下 CTRL+Break 键的处理方式有所不同,因为消息被排队,但在宏完成执行之前似乎不会处理。
有没有人有任何其他的建议可以尝试?