如何在Autohotkey中重复发送密钥

问题描述 投票:0回答:3

我想编写一个AutoHotkey脚本,它循环键X次。

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

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

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

#IfWinActive

目标是按ENTER重命名选择文件,然后按ENTER确认重命名。在刚重命名的同一文件上按ENTER应再次发送F2密钥(如果有拼写错误)。

目前第二个块不起作用,因为我发送相同的密钥,如何解决这个问题?

autohotkey
3个回答
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

1
投票

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

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关闭宏。


0
投票

您正尝试重新绑定输入密钥两次。重新绑定一个键就像是说“当我按下这个键时,执行此操作:” - 在这种情况下它位于#IfWinActive下,所以更像是“当这个窗口打开时我按下这个键......”

当你打破它时,你有“当我按下输入 - 按F2”以及“当我按下回车时,按回车” 你想要实现的是重新绑定条件 - 即它只在某些条件下发送F2。

没有更多的背景,很难知道如何提供帮助。你有什么理由不能使用不同的组合键吗?像Ctrl + Shift + Enter一样?

就像是:

+^Enter::send, {F2}
© www.soinside.com 2019 - 2024. All rights reserved.