Autohotkey 使用自动热键防止物理按键与发送的按键冲突
我想使用自动热键定义一个快捷方式,自动导航到Word功能区菜单中的“单元格宽度”文本框(即在Word中发送Alt、j、l、w键) 我最初尝试使用脚本时遇到了一个问题,即在脚本发送键之前,物理按键的Autohotkey 使用自动热键防止物理按键与发送的按键冲突,autohotkey,Autohotkey,我想使用自动热键定义一个快捷方式,自动导航到Word功能区菜单中的“单元格宽度”文本框(即在Word中发送Alt、j、l、w键) 我最初尝试使用脚本时遇到了一个问题,即在脚本发送键之前,物理按键的Up操作尚未完成,导致脚本失败 虽然我有一个解决方案(使用sleep 250,如下所示),但我想了解是否有更优雅的解决方案-例如,此值是通过反复试验选择的,并且此解决方案可能在不同的机器上失败,或者如果我的笔记本电脑一天不好 本质上,我想找到一个解决方案,避免硬编码等待时间 有什么建议吗 问题 在我的
Up
操作尚未完成,导致脚本失败
虽然我有一个解决方案(使用sleep 250
,如下所示),但我想了解是否有更优雅的解决方案-例如,此值是通过反复试验选择的,并且此解决方案可能在不同的机器上失败,或者如果我的笔记本电脑一天不好
本质上,我想找到一个解决方案,避免硬编码等待时间
有什么建议吗
问题 在我的初始脚本中,我试图在Word中定义热键Alt+Shift+p,以按顺序发送Alt、j、l、w。此操作失败,将文本“jlw”输入活动表格单元格 这是因为对于实际按下的键(在下面的注释中标记为
#
),当脚本已经开始发送键时,Up
操作尚未运行(用$
表示)。这会中断发送序列Alt、j、l、w,因此失败
另请注意,标有?
的事件可能是失败操作的副产品
剧本
关键历史
变通办法 通过添加
sleep 250
语句,热键和sent键按预期顺序运行。注:未触发其他按键(未显示任何?
)
剧本
关键历史
如果目标窗口无法可靠地接收击键,则可以尝试通过的第二个参数(例如)增加send命令中的按下持续时间
不知道你为什么要用正确的alt,甚至都不认为这是可行的。只需使用“Alt”。我认为你的热键在这方面不是很好。单词与输入混淆。
但我想也许这样做可以奏效
!+p up:: ;up means it'll run once u release p, might help a bit
SetKeyDelay, 500, 10 ;good amount of delay, can probably do with less
Send, {Shift Up}{Alt Up}{Alt}jlw ;send shift and alt up first
Return
现在有一个更好的选择,使用自动化。使用for这是正常的和预期的方式,但您也可以使用AHK(或任何其他语言)。下面是更改第一个表格的第一个单元格宽度的快速AHK示例:
Word := ComObjActive("Word.Application")
Word.ActiveDocument.Tables(1).Cell(1, 1).Width := 500
当然,这不是一个很好的方法,我相信你可以引用活动表和活动单元格,我只是快速阅读文档并编写了它。实际上,我自己从来没有在实践中使用过这些东西。我发现了一个更优雅的解决方案。与我之前的处理脚本相比,我认为这更为优雅,因为它不需要硬编码等待时间。这只是等待按下的键出现,然后脚本继续,以防止任何冲突: 剧本 关键历史
有趣的是,上面的脚本修改为使用
Send!jlw
可以工作(即导航到单元格宽度框),但发送的键顺序不一致,如下所示。我不会使用它,只是为了避免这种无序发生的意外后果
VK SC Type Up/Dn Elapsed Key Comment
-------------------------------------------------------------------------------------------------------------
A4 038 d 1.17 LAlt
A0 02A d 0.11 LShift
50 019 h d 0.14 p
50 019 s u 0.09 p
A0 02A u 0.16 LShift
A4 038 u 0.00 LAlt
A4 038 i d 0.02 LAlt <--
4A 024 i d 0.00 j
4A 024 i u 0.00 j
A4 038 i u 0.00 LAlt <--
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
VK SC Type Up/Dn键注释
-------------------------------------------------------------------------------------------------------------
A4 038 d 1.17 LAlt
A0 02A d 0.11升档
50 019小时直径0.14便士
50 019南美0.09便士
A0 02A u 0.16升档
A4 038 u 0.00 LAlt
A4 038 i d 0.02 LAlt我使用RAlt只是为了在故障排除时将其与密钥历史记录中的LAlt区分开来。在我的机器上,它在这方面同样有效。在此期间,虽然我找到了一个解决方案,我将很快发布,我发现它更优雅,因为它避免了硬编码等待时间。了解这一点很有趣,以供将来参考-但是我想延迟发送键,而不是延长其按下时间。
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!
!+p::
SetKeyDelay, 10, 10
Send, {RAlt down}{RAlt up}jlw
Return
!+p up:: ;up means it'll run once u release p, might help a bit
SetKeyDelay, 500, 10 ;good amount of delay, can probably do with less
Send, {Shift Up}{Alt Up}{Alt}jlw ;send shift and alt up first
Return
Word := ComObjActive("Word.Application")
Word.ActiveDocument.Tables(1).Cell(1, 1).Width := 500
#IfWinActive, ahk_exe WINWORD.EXE
!+p::
KeyWait Alt
KeyWait Shift
KeyWait p
Send, {Alt Down}{Alt Up}jlw
Return
VK SC Type Up/Dn Elapsed Key Comment using previous notation
-------------------------------------------------------------------------------------------------------------
A4 038 d 0.63 LAlt #
A0 02A d 0.11 LShift #
50 019 h d 0.11 p #
50 019 s u 0.06 p #
A0 02A u 0.19 LShift #
A4 038 u 0.00 LAlt #
12 038 i d 0.01 Alt $
12 038 i u 0.00 Alt $
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 $
VK SC Type Up/Dn Elapsed Key Comment
-------------------------------------------------------------------------------------------------------------
A4 038 d 1.17 LAlt
A0 02A d 0.11 LShift
50 019 h d 0.14 p
50 019 s u 0.09 p
A0 02A u 0.16 LShift
A4 038 u 0.00 LAlt
A4 038 i d 0.02 LAlt <--
4A 024 i d 0.00 j
4A 024 i u 0.00 j
A4 038 i u 0.00 LAlt <--
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