我刚刚完成了一段执行以下操作的代码。当我在Firefox或EndNote中通过鼠标进行选择时,脚本会按Ctrl + c并检查剪贴板以进行正则表达式匹配。如果匹配,则更改剪贴板内容并显示工具提示。它适用于这两个程序。发送Ctrl + c时,Adobe Acrobat有时会显示错误(即使用户按下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
答案 0 :(得分:1)
我在前几行看到了一些非常基本的问题。让我解释一下......
AutoHotkey If
和#If
中有两种类型的if语句。
您通常总是使用正常的If
- 语句,除非您使用热键执行某些操作,并且您希望特定的热键具有上下文相关性。
以下是一些重要规则:
正常If
- 语句必须使用花括号{}来标记表达式为真时应执行的代码区域。如果你不使用花括号,那么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
一个更复杂的例子:
#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
正如您现在可能已经猜到的那样,热键定义始终由类似hotkey::
的模式启动,并由Return
关闭。虽然您可以在一行上定义热键。
示例:
F1::MsgBox, Hello!
F2::a ;This will remap the F2 key to an a-key.
热键本身绝对不会使用花括号!虽然热键中的If
- 语句仍然必须根据前面提到的规则使用它们。