2

我正在编写打开许多 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 键的处理方式有所不同,因为消息被排队,但在宏完成执行之前似乎不会处理。

有没有人有任何其他的建议可以尝试?

4

1 回答 1

-1

因此,我试图找到一种以编程方式杀死这些宏的方法,即使它们已经启动。

打开电子表格时按住 Shift 键,宏不会运行。

否则,您可以尝试在代码运行时停止代码:Ctrl++AltPauseBreak

编辑:

我已将宏保护设置为最大(应该完全禁用宏!)

尝试禁用它们:

在此处输入图像描述

于 2013-06-26T01:34:31.303 回答