c - 全局使用WH_MOUSE,无需DLL

标签 c winapi hook mouseevent mousemove

我有一个代码可以在鼠标移动时显示屏幕的一部分。但 WH_MOUSE 不起作用。我需要将 GetModuleHandle(0), 0 更改为 hInst, GetCurrentThreadId()

但是只有当鼠标悬停在应用程序本身上时,应用程序才会工作。

我希望它是全局的,我尝试了 WH_MOUSE_LL,它比 WH_MOUSE 慢。

是否可以在没有 DLL 的情况下全局使用 WH_MOUSE?

void SetHook()
{
    gMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle(0), 0);
}   

//================================================================================
// Mouse Hook

static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0) {
    return CallNextHookEx(gMouseHook, nCode, wParam, lParam);
    }

    if (wParam == WM_MOUSEMOVE) {

    MOUSEHOOKSTRUCT *mouseInfo = (MOUSEHOOKSTRUCT*)lParam;

    int x = mouseInfo->pt.x;
    int y = mouseInfo->pt.y;

    PrintScreen(x, y);
    }

    return CallNextHookEx(gMouseHook, nCode, wParam, lParam);
}

最佳答案

Is that possible to use WH_MOUSE globally without DLL?

不可以,钩子(Hook)过程需要位于 DLL 中,以便可以将其注入(inject)到其他进程中。

I tried WH_MOUSE_LL, it is slower then WH_MOUSE.

这可能意味着你的钩子(Hook)过程很慢。

关于c - 全局使用WH_MOUSE,无需DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253585/

相关文章:

c - 测试链表

mouse - 全局鼠标钩+模拟鼠标输入

bash - Git prepare-commit-msg 钩子(Hook)没有得到任何参数

c - 使用 WinApi 在内存中运行可移植的可执行文件 - C 编程

c++ - 调整大小后win32重绘

delphi - Wininet InternetSetStatusCallback 不起作用

WordPress:使用过滤器删除 "The Loop"中的帖子

C 循环优化

c - 在 Rust 中使用类似 C 的结构数组

c - 如何在 glade 中设置按钮的 Action ?