键盘挂钩问题

发布于 2024-11-30 19:58:23 字数 966 浏览 2 评论 0原文

我正在学习 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 有什么区别?

感谢您的合作。

I'm learning windows hooking, and i wrote this code:

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;
}

The dll and the hook procedure are loaded without error, but the function do nothing when i press the key of my keyboard. Why? If i change WH_KEYBOARD with WH_CBT, it's work... what's the reason? And what's the difference between WH_KEYBOARD and WH_KEYBOARD_LL?

Thanks for the collaboration.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海夜未眠 2024-12-07 19:58:23

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

LowlevelKeyboardProc is performed in the context of the calling process, so the process need a message loop as write in msdn library.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文