3

Windows содержит настройки, позволяющие скрыть указатель мыши во время набора текста, но не содержит настроек для перемещения указателя в активную область ввода. Я имею в виду, что я могу переключать области ввода по вкладке, или вводить, или alt+tab, и т.д., Но мой указатель еще далеко. Что я должен использовать (программа, сценарий, сценарий autohotkey), чтобы сделать подобное общесистемное поведение?

2 ответа2

1

AutoHotkey позволит вам назначить горячую клавишу, чтобы переместить мышь в текущее положение курсора, если это то, что вам нужно.

#a::                             ; shortcut key is <Win>+a
    CoordMode, Caret, Screen     ; set Caret to use Screen Coordinates
    CoordMode, Mouse, Screen     ; set Mouse to use Screen Coordinates
    MouseMove, %A_CaretX%, %A_CaretY%   ; move mouse to caret position
return

Вы также можете назначить скрипт для запуска после определенных событий, когда вы знаете, что курсор поменяется

~!Tab Up::
    keywait, Alt ; wait for user to let off alt key after activation
    sleep 200    ; give the selected program time to activate
    gosub #a     ; move the mouse
return
0

Для этого вам нужно использовать DllCall, чтобы получить истинную позицию каретки. Следующее работает для меня везде, где я его тестировал (включая MS Word, который не работает с A_CaretX/Y).

#s:: ;assign hotkey to win + s
; https://msdn.microsoft.com/en-us/library/windows/desktop/ms632604(v=vs.85).aspx
VarSetCapacity(GuiThreadInfo, 48) ;create "struct"
NumPut(48, GuiThreadInfo,,"UInt") ;update cbSize member

; https://msdn.microsoft.com/en-us/library/windows/desktop/ms633506(v=vs.85).aspx
DllCall("GetGUIThreadInfo", int, 0, ptr, &GuiThreadInfo)

hwnd := NumGet(&GuiThreadInfo+7*4) ;get 7th member of struct
left := NumGet(&GuiThreadInfo+8*4) ;8th member
top  := NumGet(&GuiThreadInfo+9*4) ;9th

ControlGetPos, x, y,,,,ahk_id %hwnd% ;get position of active control, relative to window
MouseMove, left+x, top+y
return

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .