Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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
C++ 如何捕捉键盘和鼠标事件?_C++_Windows_Winapi - Fatal编程技术网

C++ 如何捕捉键盘和鼠标事件?

C++ 如何捕捉键盘和鼠标事件?,c++,windows,winapi,C++,Windows,Winapi,我想创建一个应用程序。当用户按下键盘上的特殊键或/或使用滚轮时,此应用程序必须执行某些操作。此应用程序是一项服务。它没有窗户。我想捕捉与其他应用程序一起设计的任何键盘或鼠标事件 例如,您正在通过第三方应用程序观看电视。如果按Ctrl+Shift并使用滚轮,我的应用程序将更改音量 我使用Windows 7 x64和Visual Studio 2008。当发生各种事件时,您可以呼叫以获得通知。您可能希望使用键盘挂钩和鼠标挂钩来监视鼠标事件。如果您的应用程序是真正的Win32服务,那么在Vista及更

我想创建一个应用程序。当用户按下键盘上的特殊键或/或使用滚轮时,此应用程序必须执行某些操作。此应用程序是一项服务。它没有窗户。我想捕捉与其他应用程序一起设计的任何键盘或鼠标事件

例如,您正在通过第三方应用程序观看电视。如果按Ctrl+Shift并使用滚轮,我的应用程序将更改音量


我使用Windows 7 x64和Visual Studio 2008。

当发生各种事件时,您可以呼叫以获得通知。您可能希望使用键盘挂钩和鼠标挂钩来监视鼠标事件。

如果您的应用程序是真正的Win32服务,那么在Vista及更高版本上,应用程序将不会接收键盘或鼠标事件-以关闭安全漏洞(搜索“粉碎攻击”),Microsoft隔离了所有服务,以防止它们与用户交互


您需要在与交互登录用户的会话中运行应用程序。

您可以使用原始输入法,它比GetAsyncKeyState等更可靠

我写的代码项目可能对你们有用


C#和MASM源代码版本都有。

不清楚。我调用
hhk=::SetWindowsHookEx(WH_-KEYBOARD\u-LL,lovelkeyboardproc1,0,0)。但这是行不通的。你能告诉我更多的信息吗?使用普通的键盘挂钩和鼠标挂钩可能会更好。低级键盘钩子可能调用得太早了——我不确定它是否能提供您所需的信息。似乎有一个链接自MSDN页面的示例-可能会有所帮助?请注意,即使没有任何可见窗口,所有挂钩都要求您有一个GetMessage()/DispatchMessage()循环;如果你只是睡觉()或等待…(),那么它就不起作用了。由于您使用的是x64,请注意,钩子对32位和64位应用程序都有效,但普通钩子仅加载到具有相同位的进程中,因此32位进程将仅从其他32位进程获取事件,64位进程也类似。