Autohotkey AHK:仅为一个特定的活动窗口分配热键,而不为其他窗口分配热键

Autohotkey AHK:仅为一个特定的活动窗口分配热键,而不为其他窗口分配热键,autohotkey,Autohotkey,我刚刚完成了一段代码,它执行以下操作。当我在Firefox或EndNote中通过鼠标进行选择时,脚本会发送一个Ctrl+c并检查剪贴板是否匹配正则表达式。如果存在匹配项,则会更改剪贴板内容并显示工具提示。对于这两个程序,它工作得很好。Adobe Acrobat在发送Ctrl+c时有时会显示错误(即使用户按下Ctrl-c,Acrobat有时也会显示“复制到剪贴板时出错。发生内部错误”).所以它决定分配一个F9热键,但它适用于所有程序,而不仅仅适用于Acrobat。我如何只为一个窗口分配热键?Acr

我刚刚完成了一段代码,它执行以下操作。当我在Firefox或EndNote中通过鼠标进行选择时,脚本会发送一个Ctrl+c并检查剪贴板是否匹配正则表达式。如果存在匹配项,则会更改剪贴板内容并显示工具提示。对于这两个程序,它工作得很好。Adobe Acrobat在发送Ctrl+c时有时会显示错误(即使用户按下Ctrl-c,Acrobat有时也会显示“复制到剪贴板时出错。发生内部错误”).所以它决定分配一个F9热键,但它适用于所有程序,而不仅仅适用于Acrobat。我如何只为一个窗口分配热键?Acrobat?这是我的代码。我知道这很蹩脚——我是编程新手,尤其是AHK

#If WinActive("ahk_exe firefox.exe") || WinActive("ahk_exe EndNote.exe") || WinActive("ahk_exe Acrobat.exe")
        if WinActive("ahk_exe Acrobat.exe")
        F9::
        {
        Clipboard:=""
        send,^c
        ClipWait, 1
        ToolTip % Clipboard := RegExReplace(Clipboard, "\r\n", " ")
        SetTimer, ToolTipOff, -1000
        }
        return

    ~LButton::
        now := A_TickCount
        while GetKeyState("LButton", "P")
            continue
        if (A_TickCount-now > 500 )
        {   
            Send ^c
            if WinActive("ahk_exe firefox.exe")
            {
                If RegExMatch(Clipboard, "[0-9]\.\s[A-Za-z,]*\s[A-Za-z]*")
                {
                regex := "[0-9]\.\s*|\s?\([^)]*\)|\."
                replace := ""
                }
                else If RegExMatch(Clipboard,"[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}")
                {
                Clipboard := RegExReplace(Clipboard, "^0", "")
                regex := "\/"
                replace := "."
                }
                else return
            }
            else if WinActive("ahk_exe EndNote.exe")
            {
                If RegExMatch(Clipboard, "[a-z]+\,\s[A-Z0-9‘“]")
                {
                regex := "\??!?\:|\?|!"
                replace := "."
                }
                else return
                }
            ToolTip % Clipboard := RegExReplace(Clipboard, regex, replace)
            SetTimer, ToolTipOff, -1000
        }
    return
#If

ToolTipOff:
    ToolTip
return

我在前几行看到了一些非常基本的问题。让我解释一下……
自动热键
if
#if
中有两种类型的if语句。 您通常总是使用正常的
If
-语句,除非您使用热键执行某些操作,并且希望特定热键与上下文相关。
以下是一些重要规则:
正常的
If
-语句必须使用大括号{}来标记表达式为true时应执行的代码区域。如果不使用大括号,则
If
-语句的工作方式将如同在
If
-语句正下方的第一个命令周围放置大括号一样。
例如:

If WinActive("Firefox") {
    Send, Test
    MsgBox, The script just typed "Test.
}
另一个例子:

If WinActive("Firefox")
    MsgBox, Firefox is the active window.
正常
If
-语句不能在热键定义周围使用,只能在热键定义内使用

这是允许的:

F1::
    If (A_OSVersion = "WIN_7") {
        MsgBox, Your operating system is Windows 7 and you just pressed F1.
    }
Return
这不是:

If (A_OSVersion = "WIN_7") {
    F1::
        MsgBox, Your operating system is Windows 7 and you just pressed F1.
    Return
}
但是有一种方法可以解决这个问题,那就是
#If
-语句。
#If
-语句永远不要使用大括号。
它们只能用于热键定义。
并且它们只能由另一个
#If
-语句关闭。
(通常只需使用空的
#If
即可将其关闭。)

示例:

#If (A_OSVersion = "WIN_7")
    F1::
        MsgBox, Your operating system is Windows 7 and you just pressed F1.
    Return
#If
F1::MsgBox, Hello!
F2::a ;This will remap the F2 key to an a-key. 
一个更复杂的例子:

#If (A_ScreenWidth >= 1920)
    F1::
        MsgBox, Your your screen is at least 1920 pixels wide.
    Return
    F2::
        MsgBox, Your operating system is %A_OSVersion%.
    Return
#If (A_ScreenWidth < 1920)
    F1::
        MsgBox, Your your screen width is smaller than 1920 pixels.
    Return
#If

热键本身从不使用花括号!尽管热键中的
If
-语句仍然必须根据前面提到的规则使用它们。

谢谢。我现在无法访问AHK,但我认为您的回答将对我帮助很大。如果我对代码有问题,我会回来。