代码泄漏,后面的 #If 语句没有关闭前面的 #If

代码泄漏,后面的 #If 语句没有关闭前面的 #If

问题

按下鼠标左键时,将触发Win+热键(或基本上Z任何热键下方的代码LButton


它是什么?

这是 Rainmeter HUD 的 AutoHotkey 切换按钮。


代码

#If WinActive("ahk_class RainmeterMeterWindow")
~LButton::
{
Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
WinMinimizeAllUndo
rainystate := 0
}
#If


#z::
{
if (rainystate = 0)
{
    WinMinimizeAll
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 1 *
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !Show *
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 0 "WP7\Background"
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 2 "WP7\Panels\Computer"
    rainystate := 1
}
else
{
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
    WinMinimizeAllUndo
    rainystate := 0
}
Sleep 50
Return
}

我尝试过的东西

  • 将整个 #If 块移至不同位置
    • 它运行了代码,然后触发了下面的热键
  • 尝试过 #IfWinActive ahk_class RainmeterMeterWindow 反而
    • 问题仍然存在

什么可能导致问题

#If右花括号下方的语句(}第 8 行)



我认为它应该可以工作,因为 AHK 文档(http://l.autohotkey.net/docs/commands/_If.htm) 规定如下:

要关闭上下文敏感性,请指定 #If 或任何 #IfWin 指令,但省略所有参数。例如:

#If

这正是我们所做的事情。

我只是不知道问题到底是什么,除了#If WinActive("ahk_class RainmeterMeterWindow")泄漏到下面的代码。

答案1

第一个热键后缺少Return。热键的代码会一直运行,直到它按下Return。您的脚本应如下所示。我还为您做了一些格式化。

#If WinActive("ahk_class RainmeterMeterWindow")
    ~LButton::
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
        WinMinimizeAllUndo
        rainystate := 0
    Return   ; This was missing
#If


#z::
    if (rainystate = 0)
    {
        WinMinimizeAll
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 1 *
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !Show *
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 0 "WP7\Background"
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 2 "WP7\Panels\Computer"
        rainystate := 1
    }
    else
    {
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
        WinMinimizeAllUndo
        rainystate := 0
    }
    Sleep 50
Return

相关内容