目标:
运行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
答案 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。底部的链接可能特别有用。