Это довольно сложно объяснить без предварительного показа кода, так что вот так:

Это код:

#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 ответ1

0

После Windows XP SoundGet - не лучший способ отключить звук. Я рекомендую проверить аудио библиотеку Vista, которая, на мой взгляд, в настоящее время является лучшим методом.

Просто сохраните файл в каталоге вашего скрипта и включите его, используя #Include например:

#Include VA.ahk

А вот эквивалент ваших первых 3 строк кода:

if ! VA_GetMasterMute() 
    VA_SetMasterMute(true)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .