Autohotkey“发送”命令中的花括号与热键括号冲突

Autohotkey“发送”命令中的花括号与热键括号冲突

如果不先展示代码的话很难解释,因此如下所示:

这是代码:

#l::
{
SoundGet, mutestate, , MUTE
if mutestate = Off
    Send {Volume_Mute}
Sleep 200
DllCall("LockWorkStation")
Sleep 200
SendMessage,0x112,0xF170,2,,Program Manager
Return
}

这是日志输出:

002: {
003: SoundGet,mutestate,,MUTE
004: if mutestate = Off
005: Sleep,200 (0.20)
006: DllCall("LockWorkStation")  
007: Sleep,200 (0.20)
008: SendMessage,0x112,0xF170,2,,Program Manager
009: Return (16.63)

现在来谈谈实际的“问题”。

实际代码中有一部分未显示在日志中(但仍在执行),即Send {Volume_Mute}。我已测试它仍通过将音量设置为最大然后触发热键来运行。它会锁定计算机,然后将其静音,这正是它应该做的。

我只是想知道为什么它根本没有出现在日志中。我唯一的猜测是花括号可能是导致“问题”的原因。

#l::
{                                              << This brace
SoundGet, mutestate, , MUTE
if mutestate = Off
    Send {Volume_Mute}                         << The 2 braces here
Sleep 200
DllCall("LockWorkStation")
Sleep 200
SendMessage,0x112,0xF170,2,,Program Manager
Return
}                                              << And this brace

我不太确定这是否是导致问题的原因,但我真的很想知道确切的原因是什么。

答案1

在 Windows XP 之后,SoundGet获取静音状态不是最佳方式。我建议查看Vista 音频库我认为这目前是最好的方法。

只需将文件保存到脚本目录并通过#Include如下方式包含它:

#Include VA.ahk

以下是前三行代码的等效内容:

if ! VA_GetMasterMute() 
    VA_SetMasterMute(true)

相关内容