Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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++_Winapi - Fatal编程技术网

C++ 鼠标指针,用于检测鼠标何时移动

C++ 鼠标指针,用于检测鼠标何时移动,c++,winapi,C++,Winapi,我试图创建一个简单的鼠标钩子来检测鼠标是否在移动,但由于某种原因,当我运行程序时,鼠标在我停止进程之前根本不起作用 这是我的密码: #包括 胡克·格穆斯; LRESULT回调鼠标指针(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM) { printf(“鼠标事件!\n”); 返回CallNextHookEx(NULL、nCode、wParam、lParam); } int main() { g_hMouse=SetWindowsHookEx(WH_MOUSE_LL,M

我试图创建一个简单的鼠标钩子来检测鼠标是否在移动,但由于某种原因,当我运行程序时,鼠标在我停止进程之前根本不起作用

这是我的密码:

#包括
胡克·格穆斯;
LRESULT回调鼠标指针(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
printf(“鼠标事件!\n”);
返回CallNextHookEx(NULL、nCode、wParam、lParam);
}
int main()
{
g_hMouse=SetWindowsHookEx(WH_MOUSE_LL,MouseHook,NULL,NULL);
而(1){
睡眠(2);
}
返回0;
}
任何帮助都将不胜感激


谢谢。

WM\u MOUSE\u LL
钩子要求安装它的线程不断发送消息;因此,这里需要一个GetMessage/DispatchMessage循环。有关详细信息,请参见MSDN文档:

这个钩子是在安装它的线程的上下文中调用的。调用是通过向安装钩子的线程发送消息来完成的。因此,安装钩子的线程必须有一个消息循环


如果您只是想在实验/调试时快速尝试一些东西,请将Sleep()替换为调用
MessageBox(…)
,这将阻止您的代码以便您可以进行测试,但它运行自己的消息循环,因此钩子将运行。

Ohh,这很有意义。谢谢一个更安全的选择是停止使用
SetWindowsHookEx()
,而是使用
registerarWinputDevices()
。然后,你的应用程序将收到
WM_INPUT
窗口消息,而不会影响其他线程/进程。在BrendanMcK的帮助下,它可以正常工作。