Roger1990 Ответов: 1

Вопрос относительно глобальных крючков


Я нашел этот отрывок в разделе "Примечания" документации для функции SetWindowsHookEx ("https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=против 85).aspx"):

"Чтобы подключить все приложения на рабочем столе 64-разрядной установки Windows, установите 32-разрядный глобальный крюк и 64-разрядный глобальный крюк, каждый из соответствующих процессов, и обязательно продолжайте накачивать сообщения в приложении hooking, чтобы избежать блокировки нормального функционирования. Если у вас уже есть 32-разрядное приложение глобального подключения и его не нужно запускать в контексте каждого приложения, вам может не понадобиться создавать 64-разрядную версию. "

Я не могу понять ту часть, которую выделил жирным шрифтом. Я новичок в WinApi, и поэтому мне может не хватать некоторого уровня понимания. Любая идея относительно того, какие сообщения мы должны перекачивать.

Что я уже пробовал:

Под перекачкой сообщений они подразумевают следующий цикл:
while (GetMessage(&msg, NULL, 0, 0) > 0) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

1 Ответов

Рейтинг:
4

Dave Kreskowiak

Все это означает, что любые сообщения, которые ваш код hookProc получает в него, должны быть переданы следующему крюку в цепочке с помощью CallNextHookEx. Вы можете найти пример этого здесь[^] в globalKeyboardHook.cs.

Обычно вы не изменяете значения, передаваемые в ваш hookProc, но нет ничего, что говорит о том, что вы не можете изменить сообщения до их передачи или отфильтровать некоторые из них, не передавая их вообще. Имейте в виду, что это будет означать, что ваше приложение на самом деле не "хорошо играет" с другими приложениями или даже с самой системой.