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