问题
按下鼠标左键时,将触发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