Coder969 Ответов: 1

Проводник 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

1 Ответов

Рейтинг:
2

Gerry Schmitz

Я думаю, что ваш код немного "тонкий".

Использование крючков - приложения Windows | Microsoft Docs[^]


Coder969

Спасибо за ответ.Я уже прошел по ссылке ранее, но я не нашел, что вызывает эту проблему. Не могли бы вы объяснить, что может быть причиной этой проблемы