鼠标中键按下移动触发的动作,怎么才能松开中键停止啊?

动作需求 · 1691 次浏览
~ZYS~ 创建于 2022-06-26 21:06

如题,我通过鼠标中键按下移动触发了这个动作,可以不断判断鼠标位置变化来上下左右滚动滚轮,但是我想通过判断鼠标中键是否松开,来终止这个动作,但是很奇怪,中键松开了,动作还是在运行,只有再来一次按下中键并移动才能停止动作,不知道是哪里写错了,求大佬指点。

 


回复内容
CL 2022-06-26 21:44
#1

这个目前似乎是无法实现的。


对于高级鼠标触发,是会拦截鼠标消息的,以避免鼠标原始功能的触发(比如显示了右键菜单)。 所以无法获取实际鼠标的按下状态。


它的实现原理大概是这样:

- 按下的时候,先拦截掉MouseDown消息

- 如果鼠标移动了,就触发按下并移动的规则; 然后拦截抬起消息;

- 如果按下时间超过一定时间没有抬起,就触发长按规则;然后拦截抬起消息;

- 如果立即抬起了,就拦截掉抬起消息,并重新模拟一个鼠标点击消息(按下+抬起)

总之,都会拦截掉鼠标的按下和抬起消息,只是根据情况可能会模拟一个。



~ZYS~ 回复 CL 2022-06-26 22:22 :

但是我另一个长按右键调出的动作,实现了判断右键松开的功能。借鉴了这个子程序检测鼠标键状态是否

CL 回复 ~ZYS~ 2022-06-26 22:26 :

说实话我不是很明白这个子程序的原理😂 

~ZYS~ 回复 CL 2022-06-26 22:37 :

好吧,它的原理就是触发动作后,先加了一个按下按键的步骤,然后真的鼠标按键松开了,它就识别出松开了。如果说抬起消息也拦截了的话,那确实不清楚为啥会判断成功,哈哈。不过弱弱的问一下,能不能只拦截触发啊,不拦截抬起的消息。

CL 回复 ~ZYS~ 2022-06-26 22:40 :

不能的,鼠标消息需要配对,而且菜单都是抬起事件触发的,主要就是需要拦截抬起。

~ZYS~ 回复 CL 2022-06-26 22:56 :

突然想到,拦截还是接着拦截,但是能不能加一个功能获知按键是否松开了呢,既然能拦截掉,那应该是可以获知到按键松开了对不

CL 回复 ~ZYS~ 2022-06-27 11:23 :

我想了一个方法,等下个版本试一下

~ZYS~ 回复 CL 2022-06-27 12:20 :

好嘞,太好了

CL 2022-06-27 16:15
#2
~ZYS~ 回复 CL 2022-06-27 19:08 :

真棒啊,问题解决了

回复主贴