【发布时间】:2017-12-14 23:02:30
【问题描述】:
我有一个旧版 Office 2007 加载项,其中基于 user32.dll SetWindowsHookEx 的自定义函数用于拦截线程上的 CTRL+S 按键事件并执行自定义文件保存。该功能在 Windows7 中运行良好,但在 Office 2016 和 Windows10 环境中无法正常运行。我不知道如何修复这个错误。
所以,我尝试了另一种方法来拦截 CTRL+S。我将ThisAddIn.Application.OnKey("^{s}", "MySaveMethod") 函数与以编程方式导入活动工作簿的宏一起使用。这种方法有效。但是,公司的组策略要求对添加到工作簿的所有宏进行签名,而以编程方式对宏进行签名似乎是不可能的。
我想知道其他开发人员如何在 Excel 2010/2013/2016 加载项中捕捉按键事件或开发键盘快捷键?任何想法都非常感谢。
谢谢
【问题讨论】:
-
你考虑过
Workbook_BeforeSave事件吗?您可以使用应用程序事件处理程序(see CPearson.com for details)在插件中对此进行编码 -
谢谢你,克里斯,你的建议。我尝试使用 BeforeSave 事件,它很好地捕获了 CTRL+S。我的问题是在自定义保存代码中调用了 Workbook.Save 方法。此方法触发 BeforeSave 事件,我有一种无限逻辑循环,因为程序控件返回到调用自定义保存代码的 CTRL+S 拦截器。我试图弄清楚如何检测 BeforeSave 事件是否由 Workbook.Save 方法触发,以便在 CTRL+S 拦截器中忽略它。
标签: macros vsto excel-addins