如何在Autohotkey中重复发送密钥

时间:2019-04-30 09:23:24

标签: autohotkey

我想编写一个AutoHotkey脚本,该脚本循环X次密钥。

例如,这是一个脚本,它用文件资源管理器中的ENTER键的功能覆盖了F2键的功能。

#IfWinActive ahk_class CabinetWClass
Enter::
Send, {F2}

#IfWinActive ahk_class CabinetWClass
Enter::
Send, {ENTER}

#IfWinActive

目标是按ENTER重命名选择的文件,然后按ENTER确认重命名。在刚刚重命名的同一文件上按ENTER,应再次发送F2键(以防出现输入错误)。

当前第二个块不起作用,因为我要发送相同的密钥,该如何解决?

3 个答案:

答案 0 :(得分:1)

基本上,您似乎正在尝试将不同的任务分配给同一热键,并且由于这是分别完成的,因此ahk选择了其中一个任务并仅与该任务一起运行。如果可以在热键中使用循环,那么我建议使用此循环在两个预期结果之间循环。请参见下面的示例:

temp:= 1

enter::
    if(temp==1)
    {
        Send, {ENTER}
        temp:=2
    }
    else if(temp==2)
    {
        Send, {F2}
        temp:=1
    }
return

1::
    Temp:=1
return

2::
    temp:=2
return

^x::ExitApp

我还添加了1/2的热键,以便您手动确定结果,而不是在遇到任何问题时专门为其指定结果。 哦,然后按ctrl + x关闭宏。

答案 1 :(得分:1)

在这种情况下,KeyWait命令是您的朋友。

如何处理第二个 Enter

仍有空间
#IfWinActive ahk_class CabinetWClass
   $Enter::
     sleep,100 ; giving time to detect the first Enter
     Send, {F2}
     Keywait, Enter, T5 D ; wait 5 seconds for the Enter to be pressed down
     If (ErrorLevel == 0)
     {
       Send, {Enter}
       sleep 200
       Send, {F2}
     }
     else
     {
       traytip, , timeout   ; Enter was not pressed down in 5 seconds
     }

   return

答案 2 :(得分:0)

您正在尝试重新绑定两次Enter键。 重新绑定键就像说“当我按下此键时,执行此操作:”-在这种情况下,它位于#IfWinActive下,因此更像是“当此窗口打开并且我按下此键...时”

分解后,您会看到“按Enter时按F2”以及“按Enter时按Enter”
您想要实现的是使重绑定成为有条件的-即它仅在特定条件下发送F2。

如果没有更多背景信息,很难知道如何提供帮助。有什么理由不能使用其他按键组合?像Ctrl + Shift + Enter?

类似的东西:

+^Enter::send, {F2}