Excel 防止键盘消息到达应用程序
我正在开发一个通过com自动化Excel的应用程序。 我遇到的问题是,有时当用户按下一些键盘按钮时 Excel窃取焦点并进入单元格编辑状态,从而导致我的应用程序崩溃。 防止键盘消息到达Excel的最佳方法是什么。Excel 防止键盘消息到达应用程序,excel,winapi,ms-office,hook,Excel,Winapi,Ms Office,Hook,我正在开发一个通过com自动化Excel的应用程序。 我遇到的问题是,有时当用户按下一些键盘按钮时 Excel窃取焦点并进入单元格编辑状态,从而导致我的应用程序崩溃。 防止键盘消息到达Excel的最佳方法是什么。 我尝试了CBT钩子和GetMessage钩子,但没有成功。还有别的办法吗 最简单的方法可能是使用,它可以阻止鼠标和键盘在整个桌面上的输入:如果您想在短时间内阻止用户,这很有用 或者,如果您只是想阻止输入到达特定的exe,请使用-per MSDN,您可以从hookproc返回-1以使输入
我尝试了CBT钩子和GetMessage钩子,但没有成功。还有别的办法吗 最简单的方法可能是使用,它可以阻止鼠标和键盘在整个桌面上的输入:如果您想在短时间内阻止用户,这很有用 或者,如果您只是想阻止输入到达特定的exe,请使用-per MSDN,您可以从hookproc返回-1以使输入被忽略: 如果nCode大于或等于零,[…]如果钩子过程处理了消息,它可能会返回一个非零值,以防止系统将消息传递给钩子链的其余部分或目标窗口过程。
WH_KEYBOARD_LL hooks的一个很好的特性是,它们不需要单独的DLL,您可以在自己的EXE中完成所有操作。但只能对excel应用程序的threadID使用它;如果您拥有该应用程序的HWND,请使用GetWindowThreadID()获取它。Excel 2010的应用程序对象具有一个
交互式属性。将其设置为false,Excel将阻止除显示的任何对话框之外的所有键盘和鼠标输入
Application.Interactive = False
我不确定是什么时候添加的Interactive
,但我认为它不存在于Excel 2000中。WH\u KEYBOARD\u LL不适用于本地钩子。只有全球。因此,当我安装它时,它会减慢计算机上的所有速度。这是一个好主意。带DLL的键盘钩子解决了我的问题这是个好主意!从没想过用谷歌搜索它。它被添加到Excel中2007@SparcU,您可能还希望使用Application.Cursor=xlWait
将鼠标指针更改为沙漏。完成后不要忘记将其设置回默认值。