雅婷 发表于 2021-9-1 15:38:53

火山pc怎样让时钟周期SetTimer记录一次循环等待超时就销毁?


易语言火山怎样让SetTimer时钟周期记录一次循环超时等待无输入就自动销毁,从而实现识别到2秒内敲击了两次相同按键的效果?(在2秒内如果识别到第二次敲击就立即销毁等待下一次激活输入,如果不自动销毁 时钟会一直在后台运行可能会占用系统资源)


以下是我的错误思路示范,不知道哪里错了:

.版本 2
.支持库 spec

.子程序 微标键周期反馈事件

限时器 = 20


.判断开始 (定时器设定值 ≠ 0)' 在一开始判断给定的时钟周期是否等于0
    ' 调试输出 (“时钟循环”, 集_计时器, “次”)
    .判断开始 (集_计时器 < 限时器)' 解释:集_计时器 用来记录这个时钟循环了多少次,循环小于30次,且次数不能大于给定的目标 5次
      ' 调试输出 (“这是一个api时钟反馈周期,用于反馈微标键的操作事件----------------------------”)
      集_计时器 = 集_计时器 + 1' 没有达到目标就每循环一次都加1次,累计次数
      调试输出 (“时钟循环”, 集_计时器, “次”)
      .如果真 (集_计时器 ≥ 30)
            ' 是否销毁时钟 = 销毁时钟_ (0, 0)
      .如果真结束



    .判断 (集_计时器 ≥ 30)' 如果 大于 限时器 设置的目标,但是小于 集_计时器的30次数,则来到这里
      ' 调试输出 (“===========限时器 ----4毫秒内算双击=========”, 限时器)
      ' 调试输出 (“目标是” + 到文本 (限时器) + “已经超时”, , “但循环还没超时”)
      调试输出 (“集_计时器 > 限时器,值为:”, 集_计时器)
      ' 集_计时器 = 0
      ' 是否销毁时钟 = 销毁时钟_ (0, 0)
      .' 如果真 (是否销毁时钟 = 假)

            ' 销毁时钟_ (0, 0)
            ' 定时器设定值 = 0
            ' 集_计时器 = 0

      .如果真结束


      .判断开始断 (单击次数.次数 < 3)
            ' 单击次数.次数 = 1
            ' 单击次数.次数 = 单击次数.次数 + 1
            ' 调试输出 (“按下了中键”, )

      .默认

      .判断结束



    .' 判断 (集_计时器 > 限时器)' 如果 时钟循环的次数 大于目标 限时器 的值
      ' 单击次数.次数 = 0
      ' ' 调试输出 (“===========限时器 ----4毫秒内算双击=========”, 限时器)
      ' 调试输出 (“集_计时器 > 限时器,值为:”, 集_计时器)

      ' 是否销毁时钟 = 销毁时钟_ (0, 0)
      .' 如果真 (是否销毁时钟 = 假)
            ' 销毁时钟_ (0, 0)
            ' 定时器设定值 = 0
      .如果真结束

    .默认

    .判断结束
    ' 调试输出 (“全局_要模拟的按键”, 全局_要模拟的按键, “单击次数.次数”, 单击次数.次数, “集_计时器 ”, 集_计时器, “限时器”, 限时器, “销毁时钟”, 是否销毁时钟)


.默认
    ' 是否销毁时钟 = 销毁时钟_ (0, 0)
    .' 如果真 (是否销毁时钟 = 假)
      ' 销毁时钟_ (0, 0)
      ' 定时器设定值 = 0


(为啥我的问题都没人回答呢? 是这个论坛没人太冷清还是大佬都懒得回答小白的问题呀?我发了五六篇类似的问题好多天都没人回答,都石沉大海了,不是说这里都是大佬聚集地吗?这样逛论坛根本没办法自学学习到有用的知识哦,好烦)

雅婷 发表于 2021-9-1 15:47:12

http://bbs.voldp.com/forum.php?mod=viewthread&tid=10829&extra=
http://bbs.voldp.com/forum.php?mod=viewthread&tid=10824&extra=
http://bbs.voldp.com/forum.php?mod=viewthread&tid=10792&extra=
http://bbs.voldp.com/forum.php?mod=viewthread&tid=10789&extra=
http://bbs.voldp.com/forum.php?mod=viewthread&tid=10679&extra=
奇了怪了,我发了这么多帖子都没一个人回答我,太打击我的积极性了

1185907650 发表于 2021-9-1 16:32:48

不需要这么麻烦,http://bbs.voldp.com/forum.php?mod=viewthread&tid=6837&highlight=%E6%97%B6%E9%92%9F
直接时钟执行后,在事件中做个记录;达到要求就停止就好了。
易语言的问题一般回复的人都少,而且你贴的是易语言的代码哦亲

雅婷 发表于 2021-9-1 16:40:27

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

我其实是想一个键 实现单击、双击、三击及长按某键功能,关键就卡在不知道怎么识别这三个状态,而且我写的的代码好像功能会冲突,互相干扰,比如我明明快速双击了两次他就给我识别成1次了

叮咚茶 发表于 2021-9-1 22:09:37




N击

kamikaze 发表于 2021-9-2 00:20:30

直接鼠标钩子 即可

雅婷 发表于 2021-9-2 01:55:21

叮咚茶 发表于 2021-9-1 22:09
N击

你这个有代码模式吗?图片不好复制呀:D

雅婷 发表于 2021-9-2 01:59:04

叮咚茶 发表于 2021-9-1 22:09
N击

谢谢,明天我试试

雅婷 发表于 2021-9-2 02:25:47

叮咚茶 发表于 2021-9-1 22:09
N击

有两个问题,第一是这个不是用在按钮上的,而是打算用在键盘或鼠标侧键上的,第二是你这个n击虽然适用性广,我暂时不知道你这个是2秒内累计的次数,还是任何时候都会累计,还有如果检测到是双击行为就应该输出双击的结果,同时重置计时器和屏蔽其他次数的结果,不能和其他动作重叠或冲突哦,类似于鼠标的左键快速双击是打开文件,慢速单击是重命名那样,功能功独立不会重叠,现在是半夜,等明天我试试你提供的代码,看有没有问题

雅婷 发表于 2021-9-2 08:27:20

叮咚茶 发表于 2021-9-1 22:09
N击

.版本 2

.子程序 键盘钩子回调函数, 整数型, , 回调函数是钩子里最重要的东西
.参数 参数一
.参数 按键状态
.参数 键值
.局部变量 按键信息, 按键信息

.版本 2
.支持库 spec

.子程序 微标键反馈事件
.参数 窗口句柄, 整数型
.参数 wmsg, 整数型
.参数 时钟ID, 整数型
.参数 dw, 整数型

' 限时器 = 20
' 集_计时器 = 0

销毁时钟_ (窗口句柄, 时钟ID)
.判断开始 (时钟ID = 单键.驱动组合键 (#微标键, #E键, , 0))
    调试输出 (“api模式 识别 长按”)
    集_按键次数累加 = -1
.判断 (时钟ID = 单键.驱动组合键 (#微标键, #E键, 2, 2))
    .如果真 (集_按键次数累加 > 0)
      调试输出 (集_按键次数累加, “击”)
    .如果真结束
    集_按键次数累加 = 0
.默认








.局部变量 声音文件_局, 文本型
.局部变量 局部_单击次数, 整数型

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


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

停止长按 = 假
是否双击 = 假


.判断开始 (取键键值 = #WIN键)' 退格键
    .判断开始 (按键状态 = #按键按下)' 按下
      销毁时钟_ (0, 单键.驱动组合键 (#微标键, #E键, , 0))
      销毁时钟_ (0, 单键.驱动组合键 (#微标键, #E键, 2, 2))
      设置时钟_ (0, 单键.驱动组合键 (#微标键, #E键, , 0), 200, &微标键反馈事件)
    .判断 (按键状态 = #按键抬起)
      销毁时钟_ (0, 单键.驱动组合键 (#微标键, #E键, , 0))
      销毁时钟_ (0, 单键.驱动组合键 (#微标键, #E键, 2, 2))
      设置时钟_ (0, 单键.驱动组合键 (#微标键, #E键, , 0), 200, &微标键反馈事件)
      集_按键次数累加 = 集_按键次数累加 + 1
      ' 调试输出 (“单击次数”, 集_按键次数累加)

    .默认

    .判断结束
    ' 返回 (呼叫窗口函数 (前一窗口句柄, 取窗口句柄 (), wmsg, wparm, lparam)),这个不知道填写什么,就没填写
.默认



好家伙,你这变成按键连点器了!!真是猝不及防啊,根本不是想要的效果,按照你这个方式写的,按一下微标键**出五个资源管理器窗口,关都关不赢啊,

我要的是点两下 微标键 才打开资源管理器,同时屏蔽原始输出的开始按钮,点一下还是原来的开始菜单功能不变,这两次都和第一次的不能冲突。其实要的就是鼠标一样的双击效果
页: [1] 2 3 4
查看完整版本: 火山pc怎样让时钟周期SetTimer记录一次循环等待超时就销毁?