AB002-[基础] AHK函数对象系列-绑定函数对象
一开始的时候主要是围绕着实现HotKey调用函数时传参来说的,群里的小伙伴觉得这个不过瘾,想让我举出更多的例子。今天编程的时候正好用上了,那我就在后面写一个案例分析。
HotKey估计是最常用的几个AHK命令了,主要功能是在运行过程中操作热键(关闭/开启等),比起静态的注册热键要灵活很多。但是,通过HotKey给"带有参数的函数"注册热键好像并不是那么显而易见,直接使用函数名会导致无法传递参数,其实这个需求可以用"绑定对象函数(BindFunctionObject)"来实现。
绑定函数对象介绍
"绑定函数对象(BindFunctionObject)"是"函数对象"(FunctionObject)的一种。
作为函数对象,它有以下特性,①可以使用%FunctionObject%(ParaMeters)的方法调用,②可以在很多原本只支持Label的地方使用(比如Menu/hotkey/GUI事件)
除了函数对象带来的便利,它的主要作用就是可以给参数固定具体的数值。
这两点结合就可以实现为在"在HotKey命令中给带有参数的函数注册热键"。
绑定函数对象的生成
对于可以获得引用的函数来说,直接用Func对象中的bind()方法即可。
实例1:用HotKey给带有参数的函数注册热键
^l:: ;#按下Ctrl+L触发程序;#把一个Bind对象放入变量中;## 首先我们使用"Func()函数"返回一个"Func函数对象",之后我们调用此对象内的"Bind()方法"返回一个"Bind函数对象"P0:=Func("TestFunc").Bind("传参成功");#通过hotkey注册,实现传参Hotkey,^p ,%P0%;# 用于测试的函数TestFunc(Param:="没有传参"){MsgBox,% Paramreturn}return
实例2:函数的动态调用实现传参
程序设计目的: 按下某快捷键,调用" ExActivateAndOpen "函数,搜索标题中带有"- 笔记.itmz"窗口,如果存在则激活,如果不存在则调用"JumpAndSearch"函数,跳转到Everthing,并且填入内容(input提示输入,自动加入符合Everthing语法的前缀),以搜索带有"- 笔记.itmz"的文件。 BindFunctionObject在这个案例中的作用: 如果没有"绑定函数对象",那么只是用普通的"动态函数调用",不能传递参数,所以需要重新额外搞一个特殊"函数",而不能直接用"JumpAndSearch",降低了程序模块化程度/可读性/开发效率。
由于知乎的代码块无法自动换行,造成阅读的不便,贴上代码图片。(Lib太长了,放在后面的文字中)
但是最好的阅读方式是复制完整代码,放到您常用的编辑器中阅读。
实例2:代码图片
AHK中的三种复用
AHK中最简陋的复用是"标签",由于不能传递参数,所以对不同的数据进行处理时,非常蹩脚;其次是"函数",在原来"标签"的基础上实现了"传参"和"返回值";然后是"对象",对象把"数据域/方法"封装在了一起。关于各种对象的应用是从11.20.00之后才开始完善的,到现在好像还在继续。
通过三者的递进关系,可以看出AHK变得越来越"面向对象",通过不断的改进,相信AHK在编写相对大型的项目时,会更加得心应手。
更多文章
我是Java/AHK持续学习者,欢迎您来和我探讨Java/AHK问题 ^_^
更多文章:
问题解答:
版权声明:
该文章版权系“心如止水”所有,欢迎分享、转发,但如需转载,请联系QQ:2531574300,得到许可并标明出处和原链接后方可转载。未经授权,禁止转载。
文章版本:
v2_11月20日 新增 实战案例-AB002-1
AHK版本:1.1.30.00