Проблемы с зацеплением клавиатуры - PullRequest
1 голос
/ 22 августа 2011

Я изучаю перехват Windows, и я написал этот код:

Dll:

extern "C" __declspec(dllexport) LRESULT CALLBACK CBTFrenk(int nCode, WPARAM wParam, LPARAM lParam){
    FILE *fp = fopen ("F:\\log.txt", "a");
    fprintf(fp, "CALLED!");
    fclose(fp);
        return CallNextHookEx(NULL, nCode, wParam, lParam);      }

app:

int _tmain(int argc, _TCHAR* argv[])
{   
    char fine;
    HINSTANCE hdll = LoadLibrary((LPCTSTR) L"F:\\Progetti\\CBT_Hook\\Debug\\DllForHook.dll");
    wprintf(L"%d\n", GetLastError());
    HOOKPROC pfunc = (HOOKPROC)GetProcAddress(hdll, "_CBTFrenk@12");
    wprintf(L"%d\n", GetLastError());
    HHOOK handleToAHook = SetWindowsHookEx(WH_KEYBOARD, pfunc, hdll, 0);
    wprintf(L"%d\n", GetLastError());
    scanf("%d", &fine);

    return 0;
}

Процедура DLL и перехватзагружаются без ошибок, но функция ничего не делает, когда я нажимаю клавишу на клавиатуре.Зачем?Если я изменю WH_KEYBOARD на WH_CBT, это сработает ... в чем причина?И в чем разница между WH_KEYBOARD и WH_KEYBOARD_LL?

Спасибо за сотрудничество.

1 Ответ

0 голосов
/ 23 августа 2011

LowlevelKeyboardProc выполняется в контексте вызывающего процесса, поэтому процессу требуется цикл обработки сообщений при записи в библиотеку msdn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...