autohotkey-热键只对特定程序生效,并设置不同等级的搜索功能
autohotkey — 热键只对特定程序生效,并设置不同等级的搜索功能
autohotkey — 热键只对特定程序生效,并设置不同等级的搜索功能
基本环境
- autohotkey
- 编辑器, 非必须,打算长用ahk的可以考虑.
为什么要做这个事情.
这个没什么好说的,为了让同个快捷键在不同程序中存在相似但不完全相同的功能.例如ctrl+f 搜索这个键 在平时调用的是全局的搜索软件,在 pycharm 里面则是普通的搜索功能.
个人认为的快捷键设计原则:
键少功能多. 少量的人机接口方式,实现更多的功能.
连击最多2次单击,且由双手食指触发. 因为食指灵敏, 且我们习惯了鼠标的双击动作.
如果为双键结合,那么修饰键最好按整体功能进行分离,例如 shift 用来修饰编辑文本的. alt用来处理窗口操作的.
尽可能保留已经习惯的触发键,例如s为保存,f为查找. c为复制
不同软件的同概念性的快捷键应该保持一致. 例如 ctrl f 为一般的搜索功能,那么可以把百度激活搜索框的快捷键设置为ctrl f. 这样就不需要每次都用鼠标去单击搜索框,也不需要安装vim等插件. 因为是搜索引擎.没有必要保留原本的ctrl+F的功能.
可将同概念性的功能按软件的先后层次进行顺序切换,例如,在百度里面, 如果没有在输入框中,则按一次ctrl+f先激活输入框,再按一次搜索打开的标签或者直接跳转到系统的全局搜索 ,例如everything这类工具,再按一次则切换回浏览器的输入框,完全没有必要设置那么多个快捷键。
设计的时候先考虑新添加的功能是否与旧功能具有概念相似性。切记一上来就是一个新的快捷键。这是很多人一开始常犯的毛病。
举个具体的例子,在pycharm中,单独使用了一个ctrl +d 作为重复一行或者选中内容的快捷键. 其实完全没必要这么做. 只要在原始的复制ctrl+c加一个是否选取内容的判断就可以,当没有选择内容的时候,默认就是重复复制一行. 在选中多行,或者一行中局部内容的时候,直接重复填充反而会很乱. 还要额外去记一个快捷键.
代码
level = 0 ;搜索水平等级
Hotkey, IfWinActive, ahk_class SunAwtFrame ; 这边是指定在pycharm软件里面使用,那么在全局的+f并不会影响到这边,
Hotkey,+f,findsomething ; 设置热键,和标签,ahk的标签你可以理解为就是一段代码的代号,他和函数不一样,是没有返回的,就是方便指代一个代码段
findsomething: ;标签,搜索的具体代码功能
{
if level = 0 ;在pycharm 中,按第一次是ide中的搜索,再按一次是全局搜索,这时候就会跳出ide环境了.
{
;除了大容量的文本发送,建议一律使用sendinput,
;他比send的发送速度快得多,不容易被其他的热键中间插一脚
;比如方向控制中,连续向上5次,用send能明显看到光标的移动,但是用sendinput就是飞跃的感觉
SendInput,^f
level = 1
SetTimer,iniState,1000,On ;设置一个定时器,1000 ms 后 运行 iniState部分的代码,定时器状态为开
}
else if level = 1
{
SendInput,+!^0 ; 调用全局搜索软件listary
level = 0
}
return
}
iniState:
;控制在pycharm 搜索打开1秒后 自动回到初始状态,就是1秒之后,再次搜索还是在pycharm里面,这样就不影响pycharm的使用体验
SetTimer,iniState,Off ;关闭定时器
level = 0 ; 回到最低的搜索水平
return
效果
获得窗口属性
- 这个很简单,右键正在运行的脚本,电极window spy
2. 就会弹出一个窗口.
- 把鼠标放在哪个程序上,这边就会显示该程序的信息.
- 在我推荐的那个ide中也有类似的功能,有一个增强模式,可以获得更精细的窗口信息
指定多个应用
这个还没有试出来,按理说不复杂才对. 之后再添加进来.