【发布时间】:2020-01-14 06:27:15
【问题描述】:
我想使用 autohotkey 定义一个快捷方式,自动导航到 Word 功能区菜单中的单元格宽度文本框(即发送键 Alt、j、 l,w 在 Word 中)。
我对脚本的初始尝试引入了一个问题,即物理按键的Up 操作在脚本发送按键之前尚未完成,导致它失败。
虽然我有一个解决方法(使用sleep 250,如下所示),但我想了解是否有更优雅的解决方案 - 例如此值是通过反复试验选择的,此解决方法可能会在另一台机器上失败,或者如果我的笔记本电脑遇到了糟糕的一天。
基本上,我想找到一种避免硬编码等待时间的解决方案。
有什么建议吗?
问题
在我的初始脚本中,我尝试在 Word 中定义热键 Alt+Shift+p 以发送 Alt kbd>,j,l,w。这会失败,而是将文本“jlw”输入到活动表格单元格中。
这是因为对于物理按下的键(在下面的 cmets 中用# 标记),当脚本已经开始发送键(用$ 表示)时,Up 操作尚未运行。这会破坏发送序列 Alt,j,l,w,因此它会失败。
另请注意标有? 的事件可能是失败操作的副产品。
脚本
; Jump to table cell width entry when Alt+Shift+p pressed in Word only
#IfWinActive, ahk_exe WINWORD.EXE
!+p::
Send, {RAlt down}{RAlt up}jlw
Return
关键历史记录
VK SC Type Up/Dn Elapsed Key Comment
-------------------------------------------------------------------------------------------------------------
A4 038 d 1.03 LAlt #
A0 02A d 0.14 LShift #
50 019 h d 0.13 p #, h=Hook Hotkey
A5 138 i d 0.02 RAlt $
A5 138 i u 0.00 RAlt $
11 01D i d 0.00 Control ?
11 01D i u 0.00 Control ?
A4 038 i u 0.00 LAlt #
A0 02A i u 0.00 LShift #
4A 024 i d 0.00 j $
4A 024 i u 0.00 j $
4C 026 i d 0.00 l $
4C 026 i u 0.00 l $
57 011 i d 0.00 w $
57 011 i u 0.00 w $
11 01D i d 0.00 Control ?
A4 038 i d 0.00 LAlt ?
11 01D i u 0.00 Control ?
A0 02A i d 0.00 LShift ?
50 019 s u 0.08 p #
A0 02A u 0.25 LShift ?
A4 038 u 0.00 LAlt ?
解决方法
通过添加sleep 250 语句,热键和发送键按预期顺序运行。请注意,不会触发其他键(? 未表示任何内容)。
脚本
; Jump to table cell width entry when Alt+Shift+p pressed in Word only
#IfWinActive, ahk_exe WINWORD.EXE
!+p::
Sleep 250
Send, {RAlt down}{RAlt up}jlw
Return
关键历史记录
VK SC Type Up/Dn Elapsed Key Comment
-------------------------------------------------------------------------------------------------------------
A4 038 d 0.39 LAlt #
A0 02A d 0.20 LShift #
50 019 h d 0.20 p #, h=Hook Hotkey
50 019 s u 0.11 p #
A0 02A u 0.11 LShift #
A4 038 u 0.00 LAlt #
A5 138 i d 0.03 RAlt $
A5 138 i u 0.00 RAlt $
4A 024 i d 0.00 j $
4A 024 i u 0.00 j $
4C 026 i d 0.00 l $
4C 026 i u 0.00 l $
57 011 i d 0.00 w $
57 011 i u 0.00 w $, SUCCESS!
【问题讨论】:
标签: autohotkey