2012-02-09 83 views
0

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

回答

0

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

Application.Interactive = False 

我不知道当加入Interactive但我不认为它在Excel 2000中

+0

这是个好主意!从未考虑过使用Google进行搜索。它被添加到Excel 2007 – SparcU 2012-02-11 13:45:22

+0

@SparcU中,您可能还想使用Application.Cursor = xlWait来将鼠标指针更改为沙漏。完成后请不要忘记将其重新设置为“xlDefault”。 – mischab1 2012-02-12 16:58:08

0

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

或者,如果你只是想到达一个特定的EXE阻止输入,使用SetWindowsHookEx(WH_KEYBOARD_LL, ...) - 每MSDN,你可以返回-1从HOOKPROC造成被忽略的输入:

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

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

+0

WH_KEYBOARD_LL存在不与当地挂钩工作。只有全球。所以,当我安装它会减慢计算机上的一切 – SparcU 2012-02-10 14:57:09

+0

这是一个好主意。带DLL的WH_KEYBOARD hook解决了我的问题 – SparcU 2012-02-10 15:59:47