Общесистемная клавиатура в Vista и более поздних версиях - PullRequest
5 голосов
/ 01 октября 2009

У меня есть созданная мной общесистемная DLL-библиотека, успешно работающая в течение многих лет в Windows XP.

Однако, похоже, что в некоторых более поздних версиях Windows (Vista Home Premium и Windows 7, если назвать пару) ловушка либо вообще не работает, либо она просто работает только локально в приложении, которое ее установило .

Я видел, как в нескольких местах в Интернете предлагалось изменить WH-KEYBOARD на WH-KEYBOARD-LL при вызове SetWindowsHookEx, но, похоже, это не помогло, когда я попробовал. Есть ли что-то еще, что мне нужно изменить в дополнение к изменению типа крючка на WH-KEYBOARD-LL?

(П.С .: Мне пришлось определить WH-KEYBOARD-LL как 13, поскольку он не определен в Delphi. Я предполагаю, что это точно.)

1 Ответ

8 голосов
/ 02 октября 2009

Убедитесь, что процесс, на котором размещается ловушка, имеет тот же уровень привилегий, что и приложение, которое вы собираетесь подключить. Клавиатура и другие хуки представляют высокий риск для безопасности, поэтому Vista и более поздние версии были изменены, чтобы разрешить только общесистемные хуки в процессах в общем определенном контексте безопасности. Другими словами, если вы запустите процесс перехвата хоста с правами пользователя, он будет перехватывать только процессы с тем же уровнем привилегий. Если подумать, это имеет смысл, потому что вы не хотели бы, чтобы процесс уровня пользователя мог внедрить код в процесс уровня администратора. Это плохо на многих уровнях.

...