Подцепить клавиатуру из внедренной DLL с помощью KeyboardProc / SetWindowsHookEx - PullRequest
2 голосов
/ 04 марта 2011

Примечание: я работаю на простом C. Не на C ++, не на C #.

Я работаю над модом.Я уже написал работающий DLL-инжектор, а также DLL для инъекции.Все идет хорошо, кроме ввода пользователя.

Я хочу иметь возможность использовать горячие клавиши, поэтому я попытался настроить клавиатуру с помощью SetWindowsHookEx.Вот моя функция обратного вызова:

LRESULT CALLBACK keyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    printf("key touched\n");
    if (wParam == VK_F5)
    {
        keyEvent = VK_F5;
    }
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

И вот как я ее настроил:

HHOOK kbHookHandle = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)keyboardHook, NULL, GetCurrentThreadId());

if (kbHookHandle != NULL)
{
    printf("keyboard hook successful!\n");
}
else
{
    printf("keyboard hook failed!\n");
}

Насколько я могу судить, ловушка хорошо настроена (я привык квозникла проблема с недопустимым параметром, но она была исправлена ​​с помощью GetCurrentThreadID).Он возвращает дескриптор, который не равен NULL.

Но всякий раз, когда я нажимаю клавишу, вывод не производится.

Для дальнейшего уточнения: приведенный выше код взят из введенной DLL.Таким образом, он фактически «принадлежит» процессу игры.Я выделил консоль, используя AllocConsole, для печати отладочных сообщений.

Что я делаю не так?

РЕДАКТИРОВАТЬ: Чтобы уточнить (даже больше): приведенный код взят из впрыскивается DLL.Это не тот подход, которым я пользуюсь для внедрения DLL - я написал отдельную (работающую!) Программу именно для этого.

Удивляет некоторых то, что я использую printf (), так как это не будет отображаться,учитывая, что я называю это изнутри хост-процесса. Да , я вызываю его изнутри хост-процесса, но это не проблема, потому что я уже выделил рабочую консоль.Я использовал подход, очень похожий на упомянутый здесь

EDIT2: Я не спрашиваю, почему printf () не работает (потому что он есть), я спрашиваю, почему этот клавишный крюк нене работает.

1 Ответ

0 голосов
/ 08 июня 2011

Вот как я обнаруживаю нажатие клавиши и запускаю ее в своем NoQuake ID Tech минимизаторе игр.Надеюсь, это поможет.

...