Windows 包含用于在键入时隐藏鼠标指针的设置,但不包含用于将指针移动到活动键入区域的设置。我的意思是我可以通过 tab、enter 或 alt+tab 等切换键入区域,但我的指针仍然很远。我应该使用什么(程序、脚本、自动热键脚本)来实现类似的系统范围行为?
答案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
答案2
为此,您需要使用 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