Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 防止键盘消息到达应用程序_Excel_Winapi_Ms Office_Hook - Fatal编程技术网

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

Excel 防止键盘消息到达应用程序,excel,winapi,ms-office,hook,Excel,Winapi,Ms Office,Hook,我正在开发一个通过com自动化Excel的应用程序。 我遇到的问题是,有时当用户按下一些键盘按钮时 Excel窃取焦点并进入单元格编辑状态,从而导致我的应用程序崩溃。 防止键盘消息到达Excel的最佳方法是什么。 我尝试了CBT钩子和GetMessage钩子,但没有成功。还有别的办法吗 最简单的方法可能是使用,它可以阻止鼠标和键盘在整个桌面上的输入:如果您想在短时间内阻止用户,这很有用 或者,如果您只是想阻止输入到达特定的exe,请使用-per MSDN,您可以从hookproc返回-1以使输入

我正在开发一个通过com自动化Excel的应用程序。 我遇到的问题是,有时当用户按下一些键盘按钮时 Excel窃取焦点并进入单元格编辑状态,从而导致我的应用程序崩溃。 防止键盘消息到达Excel的最佳方法是什么。
我尝试了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
将鼠标指针更改为沙漏。完成后不要忘记将其设置回默认值。