启用/禁用

时间:2019-04-22 07:36:29

标签: autohotkey

目标:

运行ahk脚本,以使窗口保持活动状态。当用户单击该窗口时,它将立即再次变为活动状态。

因此,可以在游戏中使用叠加层(被视为其自己的窗口),并且如果偶然单击叠加层,则游戏窗口将再次变为活动窗口。

我也希望能够在游戏过程中将其打开和关闭,以便用户可以在需要时进行alt + tab键。

问题:

我正在测试我的代码实现,到目前为止,我已经对其进行了设置,以使空白记事本文件成为活动窗口并保持活动状态。

问题是切换(ctrl + alt + J)。我可以将代码切换为正常,但是当我在窗口上切换时,代码不会再次变为活动状态。

代码:

stop := 0
; 0 = off, 1 = on

while (stop = 0)
{
    IfWinNotActive, Untitled - Notepad
        {
        WinActivate, Untitled - Notepad
        }
}

return

^!j::
    stop  := !stop

    if (stop = 0){
        MsgBox, stop is off.
    }
    else{
        MsgBox, stop is  on.
    }

return

1 个答案:

答案 0 :(得分:0)

将其关闭后不起作用的原因是While仅运行直到的值为假。即使以后评估的内容再次变为真实,也不会重新启动。
这是使当前代码正常工作的方法:

stop := 0
; 0 = off, 1 = on

labelWinCheck: ; label for GoSub to restart while-loop
while (stop = 0)
{
    IfWinNotActive, Untitled - Notepad
    {
        WinActivate, Untitled - Notepad
    }
    Sleep , 250 ; added sleep (250 ms) so CPU isn't running full blast
}
return

^!j::
    stop  := !stop

    if (stop = 0){
        MsgBox, stop is off.
    } else {
        MsgBox, stop is on.
    }
GoSub , labelWinCheck ; restarts while-loop
return

为了达到您的目标,我会考虑几种不同的方法。

  • 简单:使用SetTimer代替While。
stop := 0
SetTimer , labelWinCheck , 250 ; Repeats every 250 ms

labelWinCheck:
If !WinActive( "Untitled - Notepad" )
    WinActivate , Untitled - Notepad
Return

^!j::
SetTimer , labelWinCheck , % ( stop := !stop ) ? "off" : "on"
MsgBox , % "stop is " . ( stop ? "on" : "off" )
Return
  • 高级:我们OnMessage()监视WinActivate事件。我没有一个可行的示例,因为这需要我做一些研究,但是这里提供了一个用于监视键盘事件的解决方案的链接Log multiple Keys with AutoHotkey。底部的链接可能特别有用。