递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 15387|回复: 31
打印 上一主题 下一主题

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

[复制链接]

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
跳转到指定楼层
楼主
发表于 2021-9-1 15:38:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

易语言火山怎样让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


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

回复

使用道具 举报

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
沙发
 楼主| 发表于 2021-9-1 15:47:12 | 只看该作者
回复

使用道具 举报

359

主题

6675

帖子

1万

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
17012
板凳
发表于 2021-9-1 16:32:48 | 只看该作者

回帖奖励 +1 金钱

不需要这么麻烦,http://bbs.voldp.com/forum.php?m ... =%E6%97%B6%E9%92%9F
直接时钟执行后,在事件中做个记录;达到要求就停止就好了。
易语言的问题一般回复的人都少,而且你贴的是易语言的代码哦亲
火山安卓+PC多部课程尽在:www.lkuaiy.com
回复

使用道具 举报

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
地板
 楼主| 发表于 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次了
回复

使用道具 举报

0

主题

3

帖子

10

积分

新手上路

Rank: 1

积分
10
5#
发表于 2021-9-1 22:09:37 | 只看该作者



N击
回复

使用道具 举报

113

主题

693

帖子

4376

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4376
6#
发表于 2021-9-2 00:20:30 | 只看该作者
直接鼠标钩子 即可
QQ 89075309
回复

使用道具 举报

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
7#
 楼主| 发表于 2021-9-2 01:55:21 | 只看该作者

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

使用道具 举报

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
8#
 楼主| 发表于 2021-9-2 01:59:04 | 只看该作者

谢谢,明天我试试
回复

使用道具 举报

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
9#
 楼主| 发表于 2021-9-2 02:25:47 | 只看该作者

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

使用道具 举报

76

主题

362

帖子

1244

积分

金牌会员

Rank: 6Rank: 6

积分
1244
10#
 楼主| 发表于 2021-9-2 08:27:20 | 只看该作者
  1. .版本 2

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

  7. .版本 2
  8. .支持库 spec

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

  14. ' 限时器 = 20
  15. ' 集_计时器 = 0

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








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

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


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

  36. 停止长按 = 假
  37. 是否双击 = 假


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

  49.     .默认

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

复制代码


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

我要的是点两下 微标键 才打开资源管理器,同时屏蔽原始输出的开始按钮,点一下还是原来的开始菜单功能不变,这两次都和第一次的不能冲突。其实要的就是鼠标一样的双击效果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-22 23:22 , Processed in 0.105792 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表