我想自己绘制和移动我的窗口(使用 chromium 嵌入式框架)。
为此,当鼠标移动到窗口之外时,我需要一个全局回调 - 所以我安装了一个低级别的鼠标钩子:
hMouseLLHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)mouseHookProc, hInstance, NULL);
钩子简单地捕获鼠标事件并调用“CallNextHookEx”。这里没有问题,一切都按预期进行。
我现在的问题是:如果调试器中断或抛出异常,我将无法再移动鼠标。
我尝试在另一个线程中处理钩子,如下所示:
HANDLE mouseProcHandle = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)mouseProcessor, NULL, NULL, &dwMouseProcThread);
DWORD WINAPI Win32Application::mouseProcessor(LPVOID lpParm) {
hMouseLLHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)mouseHookProc, ((Win32Application*)Application::getInstance())->hInstance, NULL);
MSG message;
while (GetMessage(&message, NULL, 0, 0)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(hMouseLLHook);
return 0;
}
但这也并不能解决问题。是否有解决方法、解决方案或其他方法来做到这一点?
另外,我认为低级挂钩可能不是必要的,因为我只需要了解移动情况,如果我是最后一个,那么系统/其他进程可以处理该移动首先是鼠标回调。