Проводник Windows Зависает, если setwindowshookex используется с клавиатурой или крючком мыши, и если я переключаюсь между вкладками с помощью alt +tab на win10
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { hInst=(HINSTANCE)hModule; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: ::DisableThreadLibraryCalls((HMODULE)hModule); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: UnInstallKBHook(); break; } return TRUE; } extern "C" __declspec(dllexport) void InstallKBHook() { FILE *fp=fopen("D:\\KBHOOK.txt","a+"); if(fp) fclose(fp); hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardHook,hInst,0); } int UnInstallKBHook() { if(hkb)UnhookWindowsHookEx(hkb); return 1; } LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardHook(int nCode,WPARAM wParam, LPARAM lParam) { if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode)) { FILE *fp=fopen("D:\\KBHOOK.txt","a+"); if(fp) { fprintf(fp,"\n KeyPressed %c",(char)wParam); fclose(fp); } } LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam ); return RetVal; }
Что я уже пробовал:
Я не вижу этой проблемы в Windows 7 . Если я удалю оператор SetWindowsHookEx, то не увижу никаких проблем
Нужно ли мне включить какое-либо разрешение на windows 10 для использования SetWindowsHookEx
Richard MacCutchan
Вы должны быть очень осторожны, используя крючки, поскольку вы прерываете часть нормальной обработки. Возможно, что запись в файл в этот момент вызывает проблему, и ее должно быть легко устранить.
Coder969
Я удалил часть записи файла и все еще вижу ту же проблему. Тот же код отлично работает в windows 7