雅婷 发表于 2021-9-2 08:38:43

kamikaze 发表于 2021-9-2 00:20
直接鼠标钩子 即可

能详细一点吗,我用在侧键上的,想在侧键实现双击,或者利用键盘上的微标键 实现双击打开我的电脑功能,双击不能和原来的单击有冲突,意思是检测到双击动作就得屏蔽原来的单击事件,只输出双击动作,我今天看到有人推荐用 取启动时间()命令 ,但是好像会冲突 ,单击和双击的功能重叠了

看下如下代码哪里有问题
.版本 2
.支持库 spec

.子程序 输出次数, 整数型, 公开
.参数 键代码, 整数型
.局部变量 上次键代码_局, 整数型, 静态
.局部变量 上次时间_局, 整数型, 静态
.局部变量 累计_局, 整数型, 静态
.局部变量 次数_局, 文本型
.局部变量 返回值, 整数型


.如果 (上次键代码_局 ≠ 键代码)
    上次键代码_局 = 键代码
    上次时间_局 = 取启动时间 ()
    ' 时钟1.时钟周期 = 10
    ' 定时器设定值 = 10
    输入时间ID = 集_按键.建立定时器 (10, &微标键反馈事件)


.否则
    .判断开始 (取启动时间 () - 上次时间_局 < 600)

      累计_局 = 累计_局 + 1
      输出调试文本 (“双击” + 到文本 (累计_局))
      上次键代码_局 = 0
      次数_局 = “双击”

    .默认
      上次时间_局 = 取启动时间 ()
      输入时间ID = 集_按键.建立定时器 (10, &微标键反馈事件)
      ' 时钟1.时钟周期 = 10
      ' 输出调试文本 (“单击”)
      次数_局 = “单击”
    .判断结束

.如果结束
.判断开始 (次数_局 = “双击”)
    返回值 = 2
    ' 模拟按键 (91, #E键, )



.默认
    返回值 = 0
    调试输出 (“按了回车键”)
.判断结束

返回 (返回值)

叮咚茶 发表于 2021-9-2 11:19:35

雅婷 发表于 2021-9-2 08:27
好家伙,你这变成按键连点器了!!真是猝不及防啊,根本不是想要的效果,按照你这个方式写的,按一下微 ...

你真棒,抄都没抄好,直接上代码吧

ZCXXX 发表于 2021-9-2 17:36:11

雅婷 发表于 2021-9-1 16:40
我其实是想一个键 实现单击、双击、三击及长按某键功能,关键就卡在不知道怎么识别这三个状态,而且我写 ...

单击 双击 三级 都会混淆的你要自己判断

单击有单击事件

双击有的有事件 有的组件没有

三级自己从单击+双击里面判断

至于按住不放这种识别你可以使用按下与放开这2个事件

雅婷 发表于 2021-9-2 21:00:36

叮咚茶 发表于 2021-9-2 11:19
你真棒,抄都没抄好,直接上代码吧

刚看了,谢谢 效果确实有,但我不是用在按钮上的:D,而是用在键盘钩子捕获的按键上的,比如我想把左微标键(键代码91 和92)屏蔽掉,改成你这个N击和长按事件,每个输出是事件不能重叠冲突(其实最多3击就够了,多了我怕会出现不同状态下的功能重叠冲突,如果能避免当然更好)

雅婷 发表于 2021-9-2 21:09:52

kamikaze 发表于 2021-9-2 00:20
直接鼠标钩子 即可

能详细一点吗?我想用键盘钩子 把左微标键屏蔽掉然后改成单击双击 和长按事件,功能不能有重叠冲突,如果键盘实现了 就套用在鼠标上(把微标键改成单击切换下一曲 键代码176 双击 切换上一曲 键码 177三击 微标键 暂停播放 长按 微标键打开我的电脑 键码 91 + 69 类似线控耳机那样的效果)

雅婷 发表于 2021-9-2 21:11:09

叮咚茶 发表于 2021-9-2 11:19
你真棒,抄都没抄好,直接上代码吧

我其实想用键盘钩子 把左微标键屏蔽掉然后改成单击双击 和长按事件,功能不能有重叠冲突,如果键盘实现了 就套用在鼠标上(把微标键改成单击切换下一曲 键代码176 双击 切换上一曲 键码 177三击 微标键 暂停播放 长按 微标键打开我的电脑 键码 91 + 69 类似线控耳机那样的效果)

雅婷 发表于 2021-9-2 22:08:09

1185907650 发表于 2021-9-1 16:32
不需要这么麻烦,http://bbs.voldp.com/forum.php?mod=viewthread&tid=6837&highlight=%E6%97%B6%E9%92%9F...

我其实想用键盘钩子 把左微标键屏蔽掉然后改成单击双击 和长按事件,功能不能有重叠冲突,如果键盘实现了 就套用在鼠标上(把微标键改成单击切换下一曲 键代码176 双击 切换上一曲 键码 177三击 微标键 暂停播放 长按 微标键打开我的电脑 键码 91 + 69 类似线控耳机那样的效果)

雅婷 发表于 2021-9-3 01:00:49

本帖最后由 雅婷 于 2021-9-3 01:22 编辑

叮咚茶 发表于 2021-9-2 11:19
你真棒,抄都没抄好,直接上代码吧发个网盘给你吧(截图是9.3号那个压缩包里的)链接:https://pan.baidu.com/s/1GSMWjG6WW8-VMqnZNZe_wA
提取码:0000
在吗?我把你的按钮判断改成按键判断 如下代码没有任何作用了,按了没反应 你看下哪里出了问题呀?

.版本 2
.支持库 spec

.子程序 键盘钩子回调函数, 整数型, , 回调函数是钩子里最重要的东西
.参数 参数一
.参数 按键状态
.参数 键值
.局部变量 按键信息, 按键信息
.局部变量 声音文件_局, 文本型
.局部变量 局部_单击次数, 整数型
.局部变量 窗口句柄, 整数型
.局部变量 时钟id, 整数型
.局部变量 按键时间, 整数型
.局部变量 比较按钮, 整数型

' 目标按键代码 = 取代码 (编辑框1.内容, ) - 32
' 目标按键代码 = 取代码 (“174”, ) - 32
' 目标按键代码 = 8
取键键码_钩子 = 取字节集数据 (指针到字节集 (键值, 1), #整数型, )' 把指针转换成键值,键值取出来了想怎么玩怎么玩
全局_按键状态 = 按键状态
定时器设定值 = 60
' 调试输出 (取键键码_钩子)

集_时间2 = 0
是否超时 = “未超时”

停止长按 = 假
是否双击 = 假
窗口句柄 = 0
.如果真 (取键键码_钩子 = #WIN键)' 退格键 键码91
    调试输出 (“微标键按下,键码:”, #WIN键)
    .判断开始 (微标键切换模式.选中 = 真)
      .判断开始 (按键状态 = #按键按下)' 按下
            调试输出 (“微标键按下,键码:”, #WIN键)
            ' 多次点击.连点器 (取键键值)
            销毁时钟_ (窗口句柄, #按键按下)' //#ID_TIME_MOUSE_CLICKDOWN = 2
            销毁时钟_ (窗口句柄, #按键抬起)' //#ID_TIME_MOUSE_CLICKUP = 3
            时钟id = 设置时钟 (0, 按键状态, 260, 0)
      .判断 (按键状态 = #按键抬起)' 按下
            调试输出 (“微标键抬起,键码:”, #WIN键)
            ' 多次点击.连点器 (取键键值)
            销毁时钟_ (窗口句柄, #按键按下)' //#ID_TIME_MOUSE_CLICKDOWN = 2
            销毁时钟_ (窗口句柄, #按键抬起)' //#ID_TIME_MOUSE_CLICKUP = 3
            时钟id = 设置时钟 (窗口句柄, 按键状态, 260, 0)
            按键时间 = 按键时间 + 1
      .判断 (按键状态 ≠ #按键抬起)' 按下 #系统定时器
            销毁时钟_ (窗口句柄, #按键抬起)' 原wParam
            .判断开始 (#按键抬起 = #按键按下)' 判断 (wParam = #按键按下)
                获取按键点击 (按键时间)
                按键时间 = -1
            .判断 (#按键抬起 = #按键抬起)' 判断 (wParam = #按键按下)
                .如果真 (按键时间 > 0)
                  获取按键点击 (按键时间)
                .如果真结束
                按键时间 = 0
            .默认

            .判断结束
            返回 (呼叫窗口函数地址 (比较按钮, 窗口句柄, 按键状态, #按键抬起, #按键按下))

      .默认

      .判断结束

    .默认

    .判断结束

.如果真结束
<blockquote>

mudou 发表于 2021-9-3 01:38:55

我去,还没弄好呢,大家都给了你思路了,你应该早搞好了的,还有你还在用时钟,你知道它的特性吗,并不适合你现在的功能,其实你用了钩子,完全可以实现你要的功能了,时间判断也并不需要时钟来操作。

mudou 发表于 2021-9-3 03:54:10







看看是不是你想要的,不用时钟。

页: 1 [2] 3 4
查看完整版本: 火山pc怎样让时钟周期SetTimer记录一次循环等待超时就销毁?