У меня есть код, который работает без каких-либо сообщений о проблемах в течение нескольких лет. Он устанавливает крючок клавиатуры низкого уровня, который пользователь использует для активации приложения.Почему SetWindowsHookEx() возвращает NULL, а LastError - ERROR_HOOK_NOT_INSTALLED
m_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeybHookFn, GetModuleHandle(NULL), 0);
Для одного пользователя внезапно (он работал на него раньше в течение многих лет), клавиатурный крючок не работает. После расследования я вижу, что SetWindowsHookEx() возвращает NULL, а GetLastError() возвращает 0x00000597, что составляет . ERROR_HOOK_NOT_INSTALLED.
Я не могу найти документацию о том, что это значит.
Каковы возможности, почему это может случиться? Настройки безопасности системы? Учетные записи пользователя? Пользователь использует Windows 7.
мне нужен конкретный ответ на то, как сделать эту ошибку происходят так, что я могу решить проблему пользователя
Правильная проверка ошибок никогда не тестируется. Мой хрустальный шар говорит, что вы вызываете UnhookWindowHookEx(), когда этот код терпит неудачу. –
Как только вы переместите эту строку кода в DLL, 'GetModuleHandle (NULL)' больше не возвращает дескриптор модуля в модуль, содержащий процедуру hook. Использование переменной псевдонима-линкера ['__ImageBase' (http://blogs.msdn.com/b/oldnewthing/archive/2004/10/25/247180.aspx) поможет устранить эту проблему. – IInspectable
@HansPassant Я не уверен, что вы предлагаете. Вызовите UnhookWindowHookEx(), на каком дескрипторе? SetWindowsHookEx() возвращает NULL – Nicholas