提问者:小点点

带有WinAPI MouseProc的Qt


我需要跟踪屏幕上的光标位置,为此我使用了WinAPI中的一个函数

// code from Qt(!) project
#include <windows.h>
#pragma comment(lib, "user32.lib")

static HHOOK hHook;
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
    switch(wParam)
    {
    case WM_MOUSEMOVE:
        // code
        break;
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}
//in the class constructor
hHook = (HHOOK) ::SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)MouseProc, GetModuleHandle(0),0) ;

这是可行的,但有时程序在退出时崩溃。 如果注释掉最后一行,程序不会崩溃,但鼠标不会被跟踪。 我不知道WinApi,所以错误可能很明显

附注。 我知道如何获得坐标,但问题是程序退出后崩溃,如果使用WinAPI


共1个答案

匿名用户

您可以为此使用getCursorPos()函数:

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
    switch(wParam)
    {
    case WM_MOUSEMOVE:
        POINT p;
        GetCursorPos(&p);
        sprintf(msgbuf, "My coordinates is (%d,%d)\n", p.x,p.y);
        OutputDebugString(msgbuf);
        break;
    }
}

你可以在这里读到更多关于它的信息。 编辑1:

如果是自己的win32窗口,这是一个可行的解决方案。 但是如果是另一个窗口你就不能用这个了!