如题,我通过鼠标中键按下移动触发了这个动作,可以不断判断鼠标位置变化来上下左右滚动滚轮,但是我想通过判断鼠标中键是否松开,来终止这个动作,但是很奇怪,中键松开了,动作还是在运行,只有再来一次按下中键并移动才能停止动作,不知道是哪里写错了,求大佬指点。
这个目前似乎是无法实现的。
对于高级鼠标触发,是会拦截鼠标消息的,以避免鼠标原始功能的触发(比如显示了右键菜单)。 所以无法获取实际鼠标的按下状态。
它的实现原理大概是这样:
- 按下的时候,先拦截掉MouseDown消息
- 如果鼠标移动了,就触发按下并移动的规则; 然后拦截抬起消息;
- 如果按下时间超过一定时间没有抬起,就触发长按规则;然后拦截抬起消息;
- 如果立即抬起了,就拦截掉抬起消息,并重新模拟一个鼠标点击消息(按下+抬起)
总之,都会拦截掉鼠标的按下和抬起消息,只是根据情况可能会模拟一个。
但是我另一个长按右键调出的动作,实现了判断右键松开的功能。借鉴了这个子程序检测鼠标键状态是否松开。
说实话我不是很明白这个子程序的原理😂
好吧,它的原理就是触发动作后,先加了一个按下按键的步骤,然后真的鼠标按键松开了,它就识别出松开了。如果说抬起消息也拦截了的话,那确实不清楚为啥会判断成功,哈哈。不过弱弱的问一下,能不能只拦截触发啊,不拦截抬起的消息。
不能的,鼠标消息需要配对,而且菜单都是抬起事件触发的,主要就是需要拦截抬起。
突然想到,拦截还是接着拦截,但是能不能加一个功能获知按键是否松开了呢,既然能拦截掉,那应该是可以获知到按键松开了对不
我想了一个方法,等下个版本试一下
好嘞,太好了
https://getquicker.net/Help/Versions
试一下看看
真棒啊,问题解决了