介绍了AHK的入门操作。实际应用时,通常会在同一个脚本中,对不同软件建立不同的快捷键体系,本文将介绍一个非常实用的函数来实现上述功能。

让热键仅在指定软件中有效

之前的示例脚本中,将F1定义为了onenote一级标题样式快捷键,但F1键如此方便好用,我也想在Excel中用它进行重映射,怎么办呢?

虽然你可以选择为每个软件单独写一个脚本,但这样做,管理和运行起来均不方便。实际应用中,一个.ahk脚本可能包含了成百上千行代码,这些代码集成了你打开电脑会经常使用的几乎所有热键功能。例如onenote、Excel等软件中的常用热键,通常是写在一个脚本中,如何让各软件中的快捷键彼此互不影响,并且只在各自的软件窗口才生效呢?

必须先推荐一下这个函数:#IfWinActive,定义在该函数内的热键,会根据软件窗口是否为当前活动窗口,而执行不同的动作。

例如,将之前的那段代码用#IfWinActive包起来,那么此处的F1键对应的动作,只有在当前窗口为onenote时才有效,在其他软件中不会生效。

#IfWinActive,ahk_classFramework::CFrame;Framework::CFrame即onenote的类名

F1::

Send,^!1

return

#IfWinActive

同样地,你可以在同一脚本中,用F1来定义Excel中的显示/隐藏当前单元格的批注。两个F1互不影响,只在各自的软件窗口中有效。

#IfWinActive,ahk_classXLMAIN;XLMAIN即Excel的类名

F1::;显示/隐藏当前单元格的批注

Send,!rh

return

#IfWinActive

所以,通过#IfWinActive,你可以将多个软件的热键定义在一个脚本中,彼此互不影响。

如何查看软件的类名

分析一下上面的代码,#IfWinActive是成对出现的,类似于VBA等很多编程语言中的if…endif,可以明确划分出作用域。

第一个#IfWinActive后面跟着参数,代表开始;第一个#IfWinActive后面不带参数,代表结束。就这样成对使用即可。

观察上面的onenote和Excel中的例子,第一个#IfWinActive后面跟着参数Framework::CFrame、XLMAIN分别代表onenote类名、Excel类名,通过这个类名才得以找到指定软件窗口。那么,这个类名从哪儿查看呢?

其实,安装AHK后,程序已经提供了一个非常方便的参考工具“WindowSpy”。运行脚本后,可以从托盘AHK图标处右键打开“WindowSpy”窗口。

Microsoft OneNote-AHK协同教程 同一脚本中的不同软件,建立不同的快捷键体系

打开窗口后,鼠标点击对应的软件窗口,就会获得该窗口的各种属性信息,例如onenote,第一个窗格内显示的就是onenote的类名、程序名等信息。当鼠标在onenote上移动时,鼠标坐标也会实时变化。

通过“WindowSpy”窗口,就可以轻松得到各软件的相关属性信息了,从而可以有针对性的对不同软件设置不同动作。

Microsoft OneNote-AHK协同教程 同一脚本中的不同软件,建立不同的快捷键体系

了解以上知识点后,基本可以参考帮助文档自行编写一些实用脚本了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注