防止键盘消息到达应用程序

时间:2012-02-09 01:33:54

标签: excel winapi ms-office hook

我正在开发通过com自动化Excel的应用程序。 我遇到的问题是,有时当用户按下某些键盘按钮时 Excel窃取焦点并进入单元格编辑状态,导致我的应用程序崩溃。 什么是阻止键盘消息到达Excel的最佳方法。 我试过CBT钩子和GetMessage钩子失败了。还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法可能是使用BlockInput(),它会阻止整个桌面上的鼠标和键盘输入:如果你想在短时间内阻止用户,这很有用。

或者,如果您只想阻止输入到达特定的exe,请使用SetWindowsHookEx(WH_KEYBOARD_LL, ...) - 每个MSDN,您可以从hookproc返回-1以使输入被忽略:

如果nCode大于或等于零,[...]如果挂钩过程处理了消息,它可能返回非零值以防止系统将消息传递给挂钩链的其余部分或目标窗口过程。

WH_KEYBOARD_LL挂钩的一个很好的功能是它们不需要单独的DLL,您可以在自己的EXE中执行所有操作。但只能用它来对抗excel应用程序的threadID;如果你有应用程序的HWND,请使用GetWindowThreadID()来获取它。

答案 1 :(得分:0)

Excel 2010的Application对象具有Interactive属性。将其设置为false,Excel将阻止除您显示的任何对话框之外的所有键盘和鼠标输入。

Application.Interactive = False

我不确定添加Interactive的时间,但我认为它不存在于Excel 2000中。