大家在开发软件时经常需要配置众多快捷键,内置固定快捷键有时会和其他软件冲突,扩展组件库里的热键框不能用,第三方热键框支持库也有bug,论坛早期开源的一些热键框使用上也有一些局限和不便,所以花了一些时间重写了一个。
首先易语言的窗口、组件的按下某键事件是不支持完整的小键盘按键信息的,功能上就有缺陷不完整,其次如果组件原生事件来设计,开发者就要设置按下某键、放开某键、失去焦点等事件代码,会造成很多不便。还有就是自动注册管理全局热键和窗口热键上也会增加不少代码量和负担。
为了解决这些问题,就需要使用 SetWindowLong() 函数来接管组件的消息过程,就可以全面接管按键信息,实现全键盘快捷键支持。
目前改造的热键框实现了以下功能:
热键框支持:
1.支持组合键:Ctrl + Shift + Alt + 热键(支持小键盘按键识别)。2.支持准确的快捷键设置完成回调事件通知。
3.支持自动管理全局热键的注册和撤销,当用户设置完快捷键后内部自动进行注册,以及保存配置重启软件后也会对上次设置的热键进行自动注册,开发者不需要额外编写多余注册热键管理代码,(不需要内置的可自主使用回调事件来自行注册管理)。
4.还提供了相关的函数方法,共开发者自主注册管理热键使用
使用例子:
1.最简短的代码量,一行代码搞定。内部自动注册管理热键,热键触发会通过标签反馈事件通知
子程序名 | 返回值类型 | 公开 | 备 注 | ||
---|---|---|---|---|---|
_窗口1_创建完毕 |
热键框_初始化 (窗口1, “热键框”, 0, 标签1.取窗口句柄 ())
子程序名 | 返回值类型 | 公开 | 备 注 | ||||
---|---|---|---|---|---|---|---|
_标签1_反馈事件 | 整数型 | ||||||
参数名 | 类 型 | 参考 | 可空 | 数组 | 备 注 | ||
参数一 | 整数型 | ||||||
参数二 | 整数型 |
判断 (参数一 = 热键框_取热键标识 (热键框1.取窗口句柄 ()))
调试输出 (“热键框1”)
判断 (参数一 = 热键框_取热键标识 (热键框2.取窗口句柄 ()))
调试输出 (“热键框2”)
判断 (参数一 = 热键框_取热键标识 (热键框3.取窗口句柄 ()))
调试输出 (“热键框3”)
i支持库列表 | 支持库注释 |
---|---|
spec | 特殊功能支持库 |
2.如果开发者有全局热键和局部窗口热键的需求,可采用回调事件来自主管理热键,热键注册也可使用精易模块相关命令。
子程序名 | 返回值类型 | 公开 | 备 注 | ||||
---|---|---|---|---|---|---|---|
热键设置完成回调 | 整数型 | ||||||
参数名 | 类 型 | 参考 | 可空 | 数组 | 备 注 | ||
编辑框句柄 | 整数型 | ||||||
键代码 | 整数型 | ||||||
功能键状态 | 整数型 | ||||||
快捷键文本指针 | 整数型 | 指针到文本()获取 |
变量名 | 类 型 | 静态 | 数组 | 备 注 | ||
---|---|---|---|---|---|---|
热键标识 | 整数型 | |||||
快捷键文本 | 文本型 |
快捷键文本 = 指针到文本 (快捷键文本指针)
热键标识 = 热键框_取热键标识 (编辑框句柄)
如果真 (热键标识 ≠ 0)
撤销热键 (取窗口句柄 (), 热键标识)
判断 (键代码 = #退格键 或 键代码 = 91)
快捷键文本 = “无”
热键标识 = 注册热键 (取窗口句柄 (), 标签1.取窗口句柄 (), 功能键状态, 键代码)
快捷键文本 = 选择 (热键标识 ≠ 0, 快捷键文本, “无”)
热键框_记录快捷键信息 (编辑框句柄, 键代码, 功能键状态, 快捷键文本, 热键标识)
SetWindowTextA (编辑框句柄, 快捷键文本)
返回 (1)
i支持库列表 | 支持库注释 |
---|---|
shellEx | 扩展功能支持库一 |
3.当软件启动时,想要自动注册应用用户上次设置的快捷键设置代码例子:
' 启动时先读取快捷键文本到热键框,然后初始化后就会自动注册,如果是自主注册管理热键的,初始化里提供回调指针,会呼叫该回调
批量_编辑框_读取配置 (窗口1, “config.ini”)
热键框_初始化 (窗口1, “热键框”, 0, 标签1.取窗口句柄 ())
' 启动时先读取快捷键文本到热键框,然后初始化后就会自动注册,如果是自主注册管理热键的,初始化里提供回调指针,会呼叫该回调
热键框1.内容 = “Ctrl + Alt Num 1”
热键框2.内容 = “Ctrl + Alt Num 2”
热键框_初始化 (窗口1, “热键框”, 0, 标签1.取窗口句柄 ())