拖动时获得真正的鼠标位移

时间:2014-02-18 22:09:39

标签: mouse autohotkey

我正在尝试使用AutoHotKey获取最终拖动点(右键):

~RButton::
CoordMode, Mouse, Screen

MouseGetPos, x0, y0


while GetKeyState("RButton")
{
    MouseGetPos, x1, y1
    Sleep, 10
}


MsgBox X: %x1% Y: %y1%
return

它的作用是等待鼠标的RightButton被按下,收集x0和y0(正面坐标),当按钮仍被按下时,它再次获得鼠标的位置(每10毫秒)。

之后它只显示最终坐标。

它在正常环境中运行良好,但在这种特殊情况下,此脚本需要在按下右键时控制鼠标的应用程序中执行。该特定程序的作用是将鼠标指针指向屏幕的中心,当按钮被实现时,它将其保持在初始位置。 (x1,y1始终是我屏幕的中心,以像素为单位)。

我相信在内部这个程序会收集鼠标的位移(在拖动时)并将其用于用户交互。

我的问题是:有没有办法获得真正的鼠标输入而不是查看屏幕并搜索鼠标指针(~MouseGetPos)?这可以通过AutoHotKey实现吗?

1 个答案:

答案 0 :(得分:1)

您可以使用鼠标钩来获取每次鼠标移动的通知。 MSDN Hooks

要使用AHK的钩子,你必须使用DllCall。

#Persistent

MouseHook := DllCall("SetWindowsHookEx", "int", 14  ; WH_MOUSE_LL = 14
    , "uint", RegisterCallback("MouseProc"), "uint", 0, "uint", 0)
return

MouseProc(nCode, wParam, lParam)
{
    global MouseHook
    Critical
    if wParam = 0x200 ; WM_MOUSEMOVE
    {
        ToolTip % NumGet(lParam+0,0,"int") ", " NumGet(lParam+4,0,"int")
    }

    return DllCall("CallNextHookEx", "uint", MouseHook
                    , "int", nCode, "uint", wParam, "uint", lParam)
}

Example Source