雅婷
发表于 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
看看是不是你想要的,不用时钟。