卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1829本站已运行4109

易语言 监视热键和取任务栏高度模块源码

感觉那些注册热键太过麻烦
我个人觉得还这种监视热键比较好用

可能是我有强迫症吧 总是喜欢程序打开后在我指定的位置
所以更喜欢这个取任务栏高度
.版本 2

.程序集 集_监视热键

.子程序 撤消监视热键, 逻辑型, 公开, 撤消由监视热键注册的一个或全部热键(成功返回真,失败返回假)
.参数 集_Hook, 整数型, , 监视热键
.参数 集_监视事件, 子程序指针, , 监视热键
.参数 热键标识, 整数型, 可空, 欲撤消的热键标识,如果留空则撤消全部热键
.局部变量 i, 整数型

.计次循环首 (取数组成员数 (监视热键_信息), i)
    .如果 (热键标识 = 0)
        监视热键_信息 [i].标识 = 0
    .否则
        .如果真 (热键标识 = 监视热键_信息 [i].标识)
            监视热键_信息 [i].标识 = 0
            返回 (真)
        .如果真结束

    .如果结束

.计次循环尾 ()
返回 (热键标识 = 0)


.子程序 监视热键, 整数型, 公开, 监视一个热键,当热键被触发时激活响应事件.(成功返回热键标识,失败返回0).注:必须真实的按键才会触发热键
.参数 响应事件, 子程序指针, , 响应事件(热键标识,其它...),事件参数数目不限!如果再次监视热键将响应事件!
.参数 键代码, 整数型, , 触发事件的基本键,事件在基本键按下时触发,负数为放开时触发,1鼠标左键,2鼠标右键,更多查询相关帮助
.参数 功能键状态, 整数型, 可空, 1 Alt  2 Ctrl  4 Shift  8 Win 若要两个或以上的状态键,则把它们的值相加.
.参数 其它键, 整数型, 可空, 如果你需要注册由两个普通键组合的热键,可设置一个其它键代码.
.参数 周期, 整数型, 可空, 默认为10,监视热键的周期时间(建议5-200之间)
.参数 直接触发, 逻辑型, 可空, 默认为假:创建新的线程事件 真:直接调用事件等待返回
.局部变量 临时热键信息, 热键信息2
.局部变量 i, 整数型

.如果真 (到字节 (取绝对值 (键代码)) ≤ 0)
    返回 (0)
.如果真结束
.计次循环首 (取数组成员数 (监视热键_信息), i)
    .如果真 (监视热键_信息 [i].普通键 = 键代码 且 监视热键_信息 [i].功能键 = 功能键状态 且 监视热键_信息 [i].其它键 = 其它键)
        监视热键_信息 [i].事件子程序 = 响应事件
        监视热键_信息 [i].直接触发 = 直接触发
        .如果真 (监视热键_信息 [i].标识 ≠ 0)
            返回 (监视热键_信息 [i].标识)  ' 已经注册过的热键,返回热键标识
        .如果真结束
        监视热键_信息 [i].标识 = i + 1000000
        返回 (监视热键_信息 [i].标识)
    .如果真结束

.计次循环尾 ()
临时热键信息.事件子程序 = 响应事件
临时热键信息.普通键 = 键代码
临时热键信息.功能键 = 功能键状态
临时热键信息.其它键 = 其它键
临时热键信息.直接触发 = 直接触发
临时热键信息.标识 = 取数组成员数 (监视热键_信息) + 1000001
加入成员 (监视热键_信息, 临时热键信息)
.如果真 (临时热键信息.标识 = 1000001)
    _创建定时器 (0, 16661, 选择 (周期 ≤ 0, 10, 周期), &监视热键线程)
.如果真结束
返回 (临时热键信息.标识)


.子程序 监视热键线程
.局部变量 asdf, 整数型, , , ?
.局部变量 i, 整数型
.局部变量 临时事件, 子程序指针
.局部变量 临时标识, 整数型
.局部变量 a
.局部变量 缓存键状态, 短整数型, , "256"

.计次循环首 (255, i)
    缓存键状态 [i] = 251  ' 防检测处理
    缓存键状态 [i] = _判断按键状态 (i)
.计次循环尾 ()
.计次循环首 (取数组成员数 (监视热键_信息), i)
    .如果真 (监视热键_信息 [i].标识 ≠ 0)
        a = 到字节 (取绝对值 (监视热键_信息 [i].普通键))
        a = 缓存键状态 [a]
        .判断开始 (a = 0)  ' 0,无状态
            .如果 (监视热键_信息 [i].键状态 = 1)
                监视热键_信息 [i].键状态 = 2
            .否则
                监视热键_信息 [i].键状态 = 0
                到循环尾 ()
            .如果结束

        .判断 (a < 0)  ' -32767,按下状态
            .如果真 (监视热键_信息 [i].键状态 = 0)
                监视热键_信息 [i].键状态 = 1
            .如果真结束
            .如果真 (监视热键_信息 [i].普通键 < 0)
                到循环尾 ()
            .如果真结束

        .默认
            ' 1,放开后状态,在不停判断按键状态中得不到放开状态了
            .' 如果真 (监视热键_信息 [i].普通键 > 0)
                ' ' 监视热键_信息 [i].键状态 = 0
                ' 到循环尾 ()
            .如果真结束

        .判断结束
        ' 下面判断激活热键
        .如果真 (监视热键_信息 [i].键状态 > 0 且 监视热键_信息 [i].键状态 ≠ 88)
            监视热键_信息 [i].键状态 = 88
            .如果真 (监视热键_信息 [i].功能键 = 选择 (缓存键状态 [18] < 0, 1, 0) + 选择 (缓存键状态 [17] < 0, 2, 0) + 选择 (缓存键状态 [16] < 0, 4, 0) + 选择 (缓存键状态 [91] < 0, 8, 0))
                .如果真 (监视热键_信息 [i].其它键 ≠ 0)
                    a = 到字节 (取绝对值 (监视热键_信息 [i].其它键))
                    .如果真 (缓存键状态 [a] ≥ 0)
                        到循环尾 ()
                    .如果真结束

                .如果真结束
                临时事件 = 监视热键_信息 [i].事件子程序
                临时标识 = 监视热键_信息 [i].标识
                .如果 (监视热键_信息 [i].直接触发)
                    _回调钩子 (临时事件, 临时标识, 0, 0, 0)
                .否则
                    _关闭对象 (_创建线程 (0, 0, 临时事件, 临时标识, 0, 0))
                .如果结束

            .如果真结束

        .如果真结束

    .如果真结束

.计次循环尾 ()

.子程序 取桌面任务栏高度, 整数型, 公开
.局部变量 矩形坐标, 精易_矩形

.如果 (_窗口取外边框 (_寻找顶级窗口2 (“Shell_TrayWnd”, 0), 矩形坐标))
    返回 (矩形坐标.底边 - 矩形坐标.顶边)  ' 这里成功的获取了任务栏高度
.否则
    返回 (30)  ' 防止某些垃圾机器没有任务栏,那真的见鬼了.
.如果结束

监视热键.rar
61f3cdea13dede6cee735b9b5d439699.rar (4.62 KB)
卓越飞翔博客
上一篇: Python读取Excel表格,生成海报发送企业微信机器人
下一篇: php 怎么将array数组展示html输出
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏