用热键在自动热键中切换键

问题描述:

所以我试图在一个游戏中自动运行,地图很大,而且我必须跑英里。我想在切换热键(按Ctrl ++一个别的东西),请按运行(在比赛,我可以运行W¯¯)。 我试过代码,如:用热键在自动热键中切换键

Pause On 
Loop 
Send w 
+^a::Pause 

(也可以按W,但它不能释放)和这样的:

+^a:: 
toggle := !toggle 

while toggle 
    Send {w down} 

(同样的问题)。 这只是我的问题,或者这些代码是错误的?

+0

是的代码是错误的,你可能想从这里学习:http://www.autohotkey.com/docs/Tutorial.htm。当在编程环境中使用时,复数代码是“代码”,而不是“代码”。 – this

这是我的股票功能。我通常将它映射到^ W或Q.按w或s将取消它。十分简单。

HoldW(){ 
    SendInput {w up}{w down} 
    Loop 
    { 
     Sleep 100 
     GetKeyState state, w 
     if state = u 
      return 
     If GetKeyState("s") 
     { 
      SendInput {w up} 
      return 
     } 
    } 
} 
+0

这并不坏,但它有一个可以避免的循环!它也有点过于复杂。 :) – Isti115

+0

嗨Isti115,我同意它似乎过于复杂。我发现没有什么能够让我知道我以后的精确细微行为(主要是它如何关闭)。幸运的是,我没有遇到性能问题,它适用于我尝试的每一款游戏,因此我只需要映射功能的热键。也就是说,我一直在GetKeystate上苦苦挣扎,所以我相信在保持行为的同时还有改进的空间。 –

+0

我也早些时候使用了GetKeyState,但不知何故,我意外地发现,如果按住autohotkey的按键再次被按下并释放,autohotkey将不再尝试按住它。这是一个非常幸运的发现,因为我不再需要编写发布部分! :d – Isti115

+^vk41:: ; shift+ctrl+a 
    SetTimer, % "SomeLable", % (bToggle:=!bToggle) ? 25:"Off" 
    KeyWait, % "vk41" 
    Return 

SomeLable: 
    SendInput, % "{vk57}" ; w 
    Return 
+0

它不起作用。问题是一样的:它开始持有“W”,但它不释放它。 –

我有一个(至少我认为)更简单的解决:)

#NoTrayIcon 

ScrollLock:: 

    Input, Key, ,{Enter} 

    Send, {%Key% Down} 

return 

按ScrollLock键(我怀疑你使用为别的,否则将其设置到一个免费的关键),然后输入要按下的按钮的名称。

您用Enter键结束输入,之后程序将按住输入的键。

如果您想“抬起”钥匙,只需按一次,它就不会再被按住。 :)

ps.:I有#NoTrayIcon,因为我在后台运行永久的,但如果你希望能够退出,然后简单地添加这样的事情:

F12:: 
    ExitApp 
return 

一个傻noob示例,其中F10是切换热键,并且向上/向下状态是变量。变量需要预先声明以给出初始值。

老实说,我期待一个错误消息,但它似乎运行良好。

keystate=down 

F10:: 
Send {w %keystate%} 
if keystate = down 
SetEnv, keystate, up 
else if keystate = up 
SetEnv, keystate, down 
return 

Toggle  := 1 
Q::Send, % Toggle = 1 ? ("0", Toggle := 0) : ("9", Toggle := 1) 

变化q到您的首选热键,并改变“0”和“9”到要通过切换键。确保将你的能力或武器设置为你在“0”和“9”中替换的键。

所以,可以说我有一个主要和次要武器。我将它们绑定到9和0.

我按Q在它们之间循环以进行快速武器切换。或者w/e其他你想要的。