![代码泄漏,后面的 #If 语句没有关闭前面的 #If](https://linux22.com/image/1391204/%E4%BB%A3%E7%A0%81%E6%B3%84%E6%BC%8F%EF%BC%8C%E5%90%8E%E9%9D%A2%E7%9A%84%20%23If%20%E8%AF%AD%E5%8F%A5%E6%B2%A1%E6%9C%89%E5%85%B3%E9%97%AD%E5%89%8D%E9%9D%A2%E7%9A%84%20%23If.png)
问题
按下鼠标左键时,将触发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