开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5237|回复: 49
收起左侧

[闲聊] 易语言火山怎样让SetTimer时钟周期记录一次循环超时等待无...

[复制链接]
结帖率:20% (2/10)
发表于 2021-9-1 15:26:13 | 显示全部楼层 |阅读模式   江西省赣州市
易语言火山怎样让SetTimer时钟周期记录一次循环超时等待无输入就自动销毁,从而实现识别到2秒内敲击了两次相同按键的效果?(在2秒内如果识别到第二次敲击就立即销毁等待下一次激活输入,如果不自动销毁 时钟会一直在后台运行可能会占用系统资源)


以下是我的错误思路示范:

  
子程序名返回值类型公开备 注
微标键周期反馈事件  
限时器 = 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



i支持库列表   支持库注释   
spec特殊功能支持库

结帖率:20% (2/10)

签到天数: 5 天

 楼主| 发表于 2021-9-4 15:19:59 | 显示全部楼层   江西省赣州市
蓝雅婷 发表于 2021-9-4 13:41
[e=1].版本 2

.判断 (状态 = #系统定时器)

已经修复了 ,原来是在累加 n击次数 前建立了时钟,我把顺序改过来后 让它先累加再建立时钟就好了 第一次启动就能识别单击了,但 长按后还是会出现一个0次单击的问题,但问题不大 也能将就用


回复 支持 反对

使用道具 举报

结帖率:20% (2/10)

签到天数: 5 天

 楼主| 发表于 2021-9-4 13:41:25 | 显示全部楼层   江西省赣州市
本帖最后由 蓝雅婷 于 2021-9-4 14:20 编辑
LLJ 发表于 2021-9-3 15:33
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
[/quote]
[e=1].版本 2
判断 (状态 = #系统定时器 )
销毁时钟 (窗口句柄, wParam)
判断 (wParam = #ID时间_鼠标_点击向下 )
鼠标点击 (鼠标时间)
鼠标时间 = -1
判断 (wParam = #ID时间_鼠标_点击向上 )
如果真 (鼠标时间 > 0)
鼠标点击 (鼠标时间)
鼠标时间 = 0



今天我试了你这个新提供的代码,前几天没看到,长按还是有概率会触发单击动作呀,其他的动作识别率倒是挺高的,之所以会触发有可能是因为你用的时钟来输出次数结果,而我提供那个原来用按钮n击的源码好像不是用时钟输出结果次数的, 而且比较简短,关键我知道他这句是用来判断次数的,但是就是不明白它为啥可以不用子程序指针,而且不会误出发 很可能是这个“鼠标时间 = -1 ” 我在你仿照的代码里在长按哪里N击-1后 长按防单击误触效果确实有,但如果是第一次启动 单击又失效了,它会识别成0次N击,需要第二次以后才能正常,这个怎么解决,(相当于又和你之前用“取启动时间”命令一样第一次单击总是无效,需要双击或长按过后才有效那样)

回复 支持 反对

使用道具 举报

结帖率:20% (2/10)

签到天数: 5 天

 楼主| 发表于 2021-9-4 04:11:25 | 显示全部楼层   江西省赣州市
LLJ 发表于 2021-9-3 21:08
这个改一下就行,如果不行,则需要学好基础再来。我不可能每个问题都帮你解决。

...

谢谢,正在努力学习中,我已经又加了一个功能了 就是自动锁定屏蔽 左侧微标键 游戏防误触功能,屏蔽的同时为了不浪费按键把它利用起来 变成一个支持双击打开计算机单击切歌的多功能按键了,非常好用,如需要暂时解锁则通过单击键盘右边ctrl键解锁 12秒后又会自动上锁屏蔽,如需要永久解锁则只需要双击右ctrl键,会变成手动模式,如需再次变自动上锁,只需要再次双击,这样一来就多了个防误触都智能按键啦,非常香!爱不释手
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
发表于 2021-9-3 21:08:27 | 显示全部楼层   广东省汕头市
蓝雅婷 发表于 2021-9-3 17:26
谢谢,关于长按的判断,应该是一个周期的,但我如果想在长按里面放一个打开“我的电脑”只要按住不放,他 ...

这个改一下就行,如果不行,则需要学好基础再来。我不可能每个问题都帮你解决。

回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
发表于 2021-9-3 21:06:34 | 显示全部楼层   广东省汕头市
蓝雅婷 发表于 2021-9-3 17:17
注意到了,谢谢,我已经把他改成静态了,但还有个问题,它这个长按是1秒一个周期吗?假如我在长按里放音 ...

如果已经触发一次长按后就把周期改一下,放开后再改回来
回复 支持 反对

使用道具 举报

结帖率:20% (2/10)

签到天数: 5 天

 楼主| 发表于 2021-9-3 17:26:54 | 显示全部楼层   江西省赣州市
LLJ 发表于 2021-9-3 14:43
把局部变量 双击时间、长按时间 设置为静态
或者改成全局变量

谢谢,关于长按的判断,应该是一个周期的,但我如果想在长按里面放一个打开“我的电脑”只要按住不放,他会每个一秒钟就打开一个“文件管理器”这个算正常还是不正常呢?如果在长按动作里面 放一个音量增加的按键映射的话,我又希望它快速响应,而不是隔一秒增加一档音量,如果在长按动作里放时钟,然后在时钟里放 音量增加的按键映射,虽然可以快速响应,但是下次单击按键时无论单击多少次它还是长按的状态,需要执行一次双击动作它才会重置恢复状态
回复 支持 反对

使用道具 举报

结帖率:20% (2/10)

签到天数: 5 天

 楼主| 发表于 2021-9-3 17:17:14 | 显示全部楼层   江西省赣州市
LLJ 发表于 2021-9-3 14:46
注意有静态变量,精易论坛没显示出来

注意到了,谢谢,我已经把他改成静态了,但还有个问题,它这个长按是1秒一个周期吗?假如我在长按里放音量的按键映射,好像是每隔1秒钟加一档音量,问题是他有100档音量,这样就要加100秒,感觉好慢哦(相当于要加一分半钟才能加到最大音量)如果在长按输出 这里放一个时钟,然后在时钟里增加音量的话,下次点击也会变成长按事件了,需要 做一次双击动作后才能停止输出长按的动作,还有我这个第一次运行软件时如果没有执行过一次双击动作,单击动作就无法输出 ,点多少次都无输出,需要双击过一次后 单击动作才会正常输出使用
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
发表于 2021-9-3 15:33:33 | 显示全部楼层   广东省汕头市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
钩子句柄   
按下逻辑型  
长按时间整数型  
N击逻辑型  
N击次数整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
钩子句柄 = SetWindowsHookExA ( #WH_KEYBOARD_LL, &LowLevelKeyboardProc, 0, 0)
子程序名返回值类型公开备 注
LowLevelKeyboardProc整数型 
参数名类 型参考可空数组备 注
code整数型
wParam整数型
lParam整数型
变量名类 型静态数组备 注
键代码  
判断 (wParam = #WM_KEYDOWN )  ' 按下
键代码 = 指针到整数 (lParam)
如果真 (键代码 = #回车键 )
如果 (按下 = )
按下 = 真
长按时间 = 取启动时间 ()
N击 = 真
时钟1.时钟周期 = 0  ' 停止
N击次数 = N击次数 + 1

如果真 (取启动时间 () - 长按时间 > 1000)
长按时间 = 取启动时间 ()
N击 =   ' 防止放开后触发单击事件
输出调试文本 (到文本 (N击次数)“击 长按”)
N击次数 = 0



判断 (wParam = #WM_KEYUP )  ' 放开
键代码 = 指针到整数 (lParam)
如果真 (键代码 = #回车键 )
按下 = 假
如果真 (N击)
时钟1.时钟周期 = 300  ' 准备N击超时结算
输出调试文本 (“正在N击”)




返回 (CallNextHookEx (钩子句柄, code, wParam, lParam))
子程序名返回值类型公开备 注
__启动窗口_将被销毁  
UnhookWindowsHookEx (钩子句柄)
子程序名返回值类型公开备 注
_时钟1_周期事件  
时钟1.时钟周期 = 0  ' 停止
N击 = 假
输出调试文本 (到文本 (N击次数)“击”)
N击次数 = 0
DLL命令名返回值类型公开备 注
CallNextHookEx整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
CallNextHookEx
参数名类 型传址数组备 注
hhk整数型
nCode整数型
wParam整数型
lParam整数型
DLL命令名返回值类型公开备 注
SetWindowsHookExA整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
SetWindowsHookExA
参数名类 型传址数组备 注
idHook整数型
lpfn子程序指针
hmod整数型
dwThreadId整数型
DLL命令名返回值类型公开备 注
UnhookWindowsHookEx逻辑型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
UnhookWindowsHookEx
参数名类 型传址数组备 注
hhk整数型
常量名称常量值公 开备 注
WH_KEYBOARD2 
WH_KEYBOARD_LL13 
WM_KEYDOWN256 
WM_KEYUP257 


回复 支持 反对

使用道具 举报

结帖率:20% (2/10)

签到天数: 5 天

 楼主| 发表于 2021-9-3 14:59:50 | 显示全部楼层   江西省赣州市
LLJ 发表于 2021-9-2 18:07
单击识别慢没有办法,因为你不希望单击和双击可以同时触发,就必须等待双击超时了才触发单击,你可以降低 ...

经过不断的排查已经解决了,原因是给的那个“双击时间 ”局部变量不会累加上次的数值导致的,每次都是从0开始,把表格里的静态打上勾就正常了,谢谢哈
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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