如果不先展示代码的话很难解释,因此如下所示:
这是代码:
#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)