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