我正在尝试使用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实现吗?
答案 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)
}