AutoHotkey(v1.1.34)绑定类函数

虽然AutoHotkey已经出了2.0版本,更加的面向对象,

可以说强了不少,可惜普及度不高,对1.1的脚本兼容也不行,

实际使用时只好还是用1.1

1.1版本较大的问题是函数的绑定方式和gui组件的引用方式.

函数绑定方式在最后的1.1.34版本有改善,可以把热键和gui组件响应绑定到函数对象,

因此能做到绑定class中的函数.

而gui组件的引用方式依然是绑定一个全局变量,这当然很不舒服,但如果理解成绑定

到了一个自定义的字符串(该字符串可以作为全局变量的名字),也还勉强能接受.

总之使用1.1版本确实是不太好,代码非常的古典偏底层,非常的不够面向对象.

可是大部分旧代码都是基于这个版本的,总不能全改吧?!

研究后发现勉强能用,有解决方法,就是绑定函数时使用函数对象,

制作gui组件时当作自定义字符串做组件的句柄.

在旧版的class中,类内部的函数可以通过类名或实例去调用,

谁调用this就是谁,而函数实际上第一个参数是this.

所以如果不使用bind(this)制作函数对象,是不能直接绑定到热键或gui响应的,

否则this会变成响应函数的第一个参数.

下面是我测试在class中如何用函数对象绑定热键和gui响应的代码:

;** 类定义
class ClassTest1 {
  InstanceVar1 := "" ;实例变量,由构造函数传入

  ;构造函数
  __New(v1) {
    this.InstanceVar1 := v1
  }
  
  ;绑定到热键用的函数
  forKey() {
    MsgBox, % this.InstanceVar1
  }
  
  ;绑定到gui的menu的函数
  forGuiMenu(ItemName, ItemPos, MenuName) {
    MsgBox, %ItemName%
  }
  
  ;绑定到gui的button的函数
  forGuiButton() {
    MsgBox, % this.InstanceVar1
  }

}

;**脚本
ct1 := new ClassTest1("实例对象1")
;绑定热键
keyFunObj := ct1.forKey.bind(ct1)
Hotkey, x, % keyFunObj ;按x键将显示字符串"实例对象1",注意不能用下面的写法,尽管看起来一样
;Hotkey, x, % ct1.forKey.bind(ct1) ;这样写会出错,而且出错提示本身也是错的,提示为:x不是有效的热键
;添加gui并绑定菜单响应为类函数
Gui, New, , 类函数绑定到Gui测试
Gui, Add, text, , 类函数绑定到Gui测试
Gui, Add, button, vButton1, 按钮
;为按钮添加响应的函数对象
buttonFunObj := ct1.forGuiButton.bind(ct1)
GuiControl +g, Button1, % buttonFunObj
;添加菜单并设定响应的函数对象
menuFunObj := ct1.forGuiMenu.bind(ct1)
Menu, MenuItem1, Add, 选项1, % menuFunObj
Menu, MenuItem1, Add, 选项2, % menuFunObj
Menu, MenuBar, Add, 菜单, :MenuItem1
Gui, Menu, MenuBar ;加入菜单

gui, show

GuiClose(){
  ExitApp
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介   AutoHotkey 是一款免费的、Windows平台下开放源代码的热键脚本语言。 编辑本段 功能   通过发送键盘或鼠标的键击动作命令来实现几乎所有操作的自动化。您可以自己编写 宏 或者使用宏录制器来生成;   为键盘,游戏操纵杆和鼠标创建 热键。 事实上任何的按键、按钮或组合键都可以被设置为热键;   当键入您自义的缩写时可以 扩展缩写。例如, 键入“btw”就可以自动扩展为“by the way”;   创建自义的数据输入表格、用户界面、菜单等。详情请看 图形界面 部分;   映射 键盘、游戏操纵杆和鼠标上的按键或按钮;   运行现有的AutoIt v2脚本并用 新功能 来增强它们;   将脚本文件编译 成EXE可执行文件,使得程序在没有安装AutoHotkey的机器上得以运行;   借助 相关工具 以实现更强大的功能。   更多关于热键的说明   AutoHotkey 可令键盘、游戏操纵杆和鼠标的所有潜能都发挥出来。例如,除了典型的Control、Alt和Shift键之外,你还可以义Win键(徽标键)和Capslock键作为调节键。 而实际上你还可以设置任意的键盘按键或鼠标按键作为调节键。详细内容请看 高级热键 部分。   其他功能   调节音量、设置静音,以及其他 关于声卡的设置;   令指窗口变为 透明,顶层窗口,或改变 外形;   用 游戏操纵杆 或 键盘 代替鼠标;   监控 您的系统。例如,当您不希望见到的窗口出现时自动关闭它们;   获取并改变 剪贴板的内容, 包括从资源管理器中复制的文件的名称;   关闭或屏蔽 Windows自有的快捷键,例如Win+E和Win+R;   取替Alt-Tab (通过按键、鼠标滚轮或按钮)从而减轻RSI(肢体重复性劳损 );   使用您喜欢的图标、工具提示(ToolTip)、菜单项目和子菜单来自义 托盘图标菜单 ;   显示 对话框、工具提示(Tooltips)、气球提示 以及 弹出菜单,与用户交互;   执行脚本动作来 响应 系统关闭或注销;   检测系统 空闲时间。例如, 在系统空闲的时候执行高CPU负荷的任务;   通过检测 图像 和 象素色彩来自动执行游戏中的动作;   读取、写入 以及 解释 文本文件比起其他语言更容易;   针对一组与 通配符 匹配的文件进行操作;   可对 注册表 和 INI文件 进行操作。   在 Windows 95/98/Me 下的一些限制:   一些 高级功能 -- 例如鼠标热键和 热字串 -- 在Win9x 平台将失效。   你只要有想像力,它可以完成更多工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值