键盘挂钩问题

时间:2011-08-22 15:17:02

标签: visual-studio-2010 winapi hook

我正在学习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);      }

应用程式:

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和hook程序加载没有错误,但是当我按下键盘的键时,该功能什么都不做。为什么?如果我用WH_CBT更改WH_KEYBOARD,它的工作......是什么原因?什么是WH_KEYBOARD和WH_KEYBOARD_LL之间的区别?

感谢您的合作。

1 个答案:

答案 0 :(得分:0)

LowlevelKeyboardProc在调用进程的上下文中执行,因此进程需要在msdn库中写入消息循环。