本帖最后由 iLouis 于 2024-2-21 16:03 编辑
很多游戏要疯狂点击鼠标,我就想着搞一个和DNF的连发一样,按下就等于不停点,松开就等于不点了的脚本,解约鼠标寿命,也方便操作。
[Plain Text] 纯文本查看 复制代码 LButtonLabel() {
Send({LButton})
return
}
XButton1::{
SetTimer(LButtonLabel, 50)
}
XButton1 up::{
SetTimer(LButtonLabel, 0)
}
后来发现会出现BUG。
一、点击的速度不正常。
二、松开侧键还是在点(有时)。
就变成了
[Plain Text] 纯文本查看 复制代码 lButtonFlag := false
lButtonLabel() {
if (WinActive('ahk_class xxx')) {
return
}
Send({LButton})
return
}
XButton1::{
if (lButtonFlag){
return
}
lButtonFlag := true
SetTimer(LButtonLabel, 50)
}
XButton1 up::{
lButtonFlag := false
SetTimer(LButtonLabel, 0)
}
这样之后发现,点击的速度是正常了。但是依旧时不时会出现松开还在点的问题。
然后我又试了if (!getKeyState('XButton1', 'P')) return。
检测侧键的物理状态是否按下。
但是依旧会出现有时候松开了还在点。
于是我在点击和松开的函数内,添加了播放音效。并且在计时器函数内添加了tooltip显示状态。
结果发现,在松开按键还在点的情况时。
一、Xbutton1 up,并没有成功触发。
二、getKeyState('XButton1', 'P')的返回值为1。即函数认为侧键在物理状态下是按下的。
然后我想着是不是因为绑定的是鼠标。
所以我尝试了使用键盘按键,也就是我的思路来源,DNF连发。但是我早已不玩,所以用记事本测试。
[Plain Text] 纯文本查看 复制代码 #HotIf WinActive('ahk_class Notepad')
xClick() {
if (!GetKeyState('x', 'P')) {
return
}
Send('{x}')
return
}
x:: {
SetTimer(xClick, 10)
}
x up:: {
SetTimer(xClick, 0)
}
#HotIf
依旧会出现有时候松开了x但是记事本依旧在疯狂打x的情况。
且添加音效和tooltip之后,也是,出问题的时候,x up不触发。GetKeyState('x', 'P')的返回值是1。
所以请问下,有没有解决方案。多谢。
2024/02/21 16:00
大概解决了,send换sendEvent其他的不变。
用setTimer和loop或者while实现都行。 |