2014-02-18 7 views
1

Я пытаюсь получить конечную точку перетягивания (правая кнопка) с 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

Я не понимаю вопроса. 'MouseGetPos' должен дать вам текущую позицию мыши. Чтобы увидеть, сколько движется мышь, просто получите абсолютное значение x0-x1 и y0-y1 – Person93

+1

Вы явно пропустили 90% сообщения. – Sturm

+0

Интересная проблема. Я не думаю, что это можно сделать как таковое, поскольку в AHK позиция мыши всегда одинакова; нет ничего, чтобы отличить и ничего не измерить. С какой программой вы работаете? Первое, что приходило в голову, было эго-шутером, во-вторых, это было какое-то программное обеспечение для моделирования/САПР. Можете ли вы рассказать о том, чего вы пытаетесь достичь? – MCL

ответ

0

Вы можете использовать крючок для мыши, чтобы получать уведомления о каждом движении мыши. 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

Смежные вопросы