Я хотел бы самостоятельно рисовать и перемещать свои окна (используя хромированный фреймворк). Для этого мне нужен глобальный обратный вызов, когда мышь перемещается за пределы моего окна, поэтому я установил крючок мыши низкого уровня:
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;
}
Но это тоже не решает проблемы. Есть ли обходной путь, решение или другой способ сделать это? Кроме того, я думаю, что ловушка низкого уровня может не понадобиться, так как мне нужно только знать о движении, и не было бы проблем, если бы я был последним в очереди, чтобы система / другие процессы могли обрабатывать сначала обратные вызовы мыши.