Skip to content

想知道SetMKeyState这个函数到底有什么作用 #198

Answered by kiccer
CocaNoIce asked this question in Help
Discussion options

You must be logged in to vote

说具体的我也不知道m键被设计出来是干嘛用的,因为我没买过带m键的键盘,没玩过。但是他有一个很好的机制,而且没有键盘也可以使用,这点很好,他解决了按住左键触发左键连点,松开左键结束左键连点的功能。

按住左键时,如果通过 for 循环 PressAndReleaseMouseButton(1) ,会导致左键被松开(并不是你真实鼠标松开了左键,而是驱动认为你松开了),于是直接终止循环。(没法实现通过左键控制左键连点,这会自相矛盾。)

而且用 for 循环还会有一个弊端,那就是在循环中,其他 G 键会无法及时响应,其他 G 键的事件响应会延后至 for 循环结束。

这时候 SetMKeyState 有一个优秀的特性就可以完美解决这个问题。当调用 SetMKeyState 时,onEvent 就会被触发,利用这个特性可以实现 “事件循环”,简单理解就是“套娃”。然后 onEvent 事件本身成为了循环体,所有的循环判断和逻辑都可以写在这个里面 。然后把其他G键判断写在他上面,可以实现“截胡”。然后写一个变量,用变量代替记录左键按住状态,通过这个变量来判断左键是否连点。

以上就是 SetMKeyState 的优势,76的早期版本也是没有 SetMKeyState 直接用 for 的,所以早期的 76 要么不支持连点,要么开火键要改成键盘按键。

如果 76 非要兼容 ghub 不可的话,只要放弃连点功能就行了。

Replies: 1 comment 1 reply

Comment options

You must be logged in to vote
1 reply
@CocaNoIce
Comment options

Answer selected by CocaNoIce
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Help
Labels
None yet
2 participants