我试图制作一个脚本,其中Gui控件一旦被选中,它将切换与之关联的特定键。
我成功地添加了IF Ab = 1,然后发送{a down},然后添加了else,以检查密钥的状态,使其在100ms后上升,从而可以循环。但是,不幸的是,我想做一个循环,然后再前进(这些键是W代表前进,S代表后退)。
不添加所有代码...这是重要的部分。
TTshowing = 0
Gui, -Caption +LastFound +AlwaysOnTop
Gui, Add, Checkbox, gRefocus cWhite, Y
Gui, Add, Checkbox, gRefocus cWhite, S
Gui, Add, Checkbox, gRefocus cWhite, U
Gui, Add, Checkbox, gRefocus cWhite, I
Gui, Add, Checkbox, gRefocus cWhite, O
Gui, Add, Checkbox, gRefocus cWhite, M
Loop
{
GuiControlGet, Yb, , Button1
GuiControlGet, Sb, , Button2
GuiControlGet, Ub, , Button3
GuiControlGet, Ib, , Button4
GuiControlGet, Ob, , Button5
GuiControlGet, Mb, , Button6
if Yb = 1
Send y
if Sb = 1
Send {s down}
if Ub = 1
Send u
if Ib = 1
Send I
if Ob = 1
Send O
if Mb = 1
GetKeyState, keyWstate, W
if %keyWstate% = up
Send {w down}
Sleep 600
GetKeyState, keyWstate, W
if %keyWstate% = down
Send {w up}
Sleep 100
GetKeyState, keySstate, S
if %keySstate% = up
Send {s down}
Sleep 650
GetKeyState, keySstate, S
if %keySstate% = down
Send {s up}
Sleep 100}
}
Return
这将允许上/下,我还试图使Send {w down}睡眠600 {发送等。仅接收最后一个发送不起作用,对于延迟操作也是如此。
当前代码中允许向上或向下但不允许同时出现的这是我修改的代码:
Loop
{
GuiControlGet, Yb, , Button1
GuiControlGet, Sb, , Button2
GuiControlGet, Ub, , Button3
GuiControlGet, Ib, , Button4
GuiControlGet, Ob, , Button5
GuiControlGet, Mb, , Button6
if Yb = 1
Send y
if Ub = 1
Send u
if Ib = 1
Send I
if Ob = 1
Send O
if Sb = 1
Send {S down}
if Mb = 1
Send {W down}
else
GetKeyState, keySstate, S
if %keySstate% = down
Send {s up}
Sleep 100
GetKeyState, keyWstate, W
if %keyWstate% = down
Send {w up}
Sleep 100
}
Return
原始代码是其他人编写的,我成功地对其进行了修改,但是为了完成此循环,我还尝试创建一个辅助循环,也未成功。
我想做的是在If Mb = 1下
要使系统在S上按下1000毫秒,然后向上按下,然后在W按住1000毫秒,然后按下并循环,以便可以简单地无限期地来回移动。
编辑:::找到答案:::谢谢您的帮助。
Loop
{
GuiControlGet, Yb, , Button1
GuiControlGet, Ub, , Button2
GuiControlGet, Ib, , Button3
GuiControlGet, Ob, , Button4
GuiControlGet, Sb, , Button5
GuiControlGet, Wb, , Button6
GuiControlGet, Tb, , Button7
if Yb = 1
Send y
if Ub = 1
Send u
if Ib = 1
Send I
if Ob = 1
Send O
if Tb = 1
Send {TAB}
if Sb = 1
Send {S down}
Sleep 500
GetKeyState, state, S
if state = D
Send {S up}
Sleep 50
if Wb = 1
Send {W down}
Sleep 500
GetKeyState, state, W
if state = "D"
Send {W up}
Sleep 50
}
Return
将代码从状态名更改为简单状态会方便通信,而且Up和Down都是变量,并且不知道它们只能在getstate中使用U或D。因此,通过在初始按键之后立即添加它们并删除其他键来解决这些问题,从而对其进行了修改,因此现在可以来回移动了。谢谢!
答案 0 :(得分:0)
您的代码似乎有几个问题。 GetKeyState在输出变量中存储“ D”,“ U”或不存储任何内容,而不存储整个单词“ up”或“ down”。另一个问题与IF语句的语法有关。在您的情况下,您将需要使用以下内容:If keySstate = "D"
。
此外,您提到要保持1000毫秒;但是,您的代码设置为100ms。
这不是错误,但是您可能需要考虑使用GetKeyState()函数。这样,您就可以将其与IF语句结合起来;像If GetKeyState( "s" )
。
https://www.autohotkey.com/docs/commands/GetKeyState.htm
请使用上述更正更新您的代码,如果仍有问题,我们可以从那里去。