Encaixes encaracolados no comando "Enviar" do Autohotkey em conflito com chaves de teclas de atalho

0

É bem difícil explicar sem mostrar o código primeiro, então aqui vai:

Este é o código:

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

E esta é a saída do log:

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)

Agora para o "problema" real.

Existe uma parte do código real que não aparece no log (mas ainda é executado), que é o Send {Volume_Mute} . Eu testei que ainda é executado, definindo o volume para o máximo e, em seguida, acionando a tecla de atalho. Ele bloqueia o computador e depois o silencia, exatamente o que deve fazer.

Só estou me perguntando por que não aparece no log. Meu único palpite é que as chaves provavelmente estão causando o "problema".

#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

Não tenho certeza se isso é o que está causando o problema, mas gostaria de saber exatamente qual é a causa.

    
por SerinEleven 26.12.2013 / 10:53

1 resposta

0

Após o Windows XP, SoundGet não é a melhor maneira de obter o estado de silêncio. Eu recomendo dar uma olhada na Biblioteca de áudio do Vista que, acredito, é atualmente a melhor método.

Basta salvar o arquivo no diretório do seu script e incluí-lo usando #Include da seguinte forma:

#Include VA.ahk

E aqui está o equivalente das três primeiras linhas de código:

if ! VA_GetMasterMute() 
    VA_SetMasterMute(true)
    
por 26.12.2013 / 20:48