Parentesi graffe nel comando "Invia" del tasto di scelta rapida in conflitto con le parentesi graffe dei tasti di scelta rapida


0

È piuttosto difficile da spiegare senza prima mostrare il codice, quindi ecco qui:

Questo è il codice:

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

E questo è l'output del registro:

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)

Ora al vero "problema".

C'è una parte del codice effettivo che non viene visualizzato nel registro (ma viene comunque eseguito), che è il file Send {Volume_Mute}. Ho provato che funziona ancora impostando il volume al massimo, quindi attivando il tasto di scelta rapida. Blocca il computer, quindi lo disattiva, che è esattamente quello che dovrebbe fare.

Mi chiedo solo perché non compare affatto nel registro. La mia unica ipotesi sarebbe che le parentesi graffe stiano probabilmente causando il "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

Non sono davvero sicuro se questo è ciò che sta causando il problema, ma mi piacerebbe davvero sapere qual è esattamente la causa.

Risposte:


0

Dopo Windows XP, SoundGetnon è il modo migliore per ottenere lo stato muto. Consiglio di dare un'occhiata alla Libreria audio di Vista, che credo sia attualmente il metodo migliore.

Basta salvare il file nella directory del tuo script e includerlo usando in #Includequesto modo:

#Include VA.ahk

Ed ecco l'equivalente delle tue prime 3 righe di codice:

if ! VA_GetMasterMute() 
    VA_SetMasterMute(true)

Il nuovo codice viene ora visualizzato nel registro ed esegue il silenziamento. Mi chiedo solo perché il codice precedente non viene visualizzato nel registro. Alcune incompatibilità minori?
SerinEleven,

A giudicare dalla documentazione SoundGetrecupera solo lo stato muto dello script, non di Windows (mastermute in questo caso). Mutestatenon era il valore previsto, che ho verificato utilizzando a msgbox.
Elliot DeNolf il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.