Código vazando, último #Se a declaração não fechar o antigo #If

1

O problema

Ao pressionar o botão esquerdo do mouse, a tecla de atalho para Win + Z é acionada com ele (ou basicamente qualquer código abaixo da tecla de atalho LButton )

O que é isso?

É uma alternância de AutoHotkey para um HUD de Rainmeter.

O código

#If WinActive("ahk_class RainmeterMeterWindow")
~LButton::
{
Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
WinMinimizeAllUndo
rainystate := 0
}
#If


#z::
{
if (rainystate = 0)
{
    WinMinimizeAll
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 1 *
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !Show *
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 0 "WP7\Background"
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 2 "WP7\Panels\Computer"
    rainystate := 1
}
else
{
    Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
    WinMinimizeAllUndo
    rainystate := 0
}
Sleep 50
Return
}

Coisas que eu tentei

  • Movido todo o bloco #If em uma posição diferente
    • Ele executou o código e acionou a tecla de atalho abaixo dele
  • Tentou #IfWinActive ahk_class RainmeterMeterWindow em vez
    • O problema persiste

O que pode estar causando o problema

A declaração #If logo abaixo da chave de fechamento } (a da linha 8)

Acho que deve funcionar porque os documentos do AHK ( link ) afirmam o seguinte:

To turn off context sensitivity, specify #If or any #IfWin directive but omit all the parameters. For example:

#If

que foi exatamente o que foi feito.

Eu simplesmente não tenho idéia do que exatamente é o problema, além do #If WinActive("ahk_class RainmeterMeterWindow") vazando para o código abaixo dele.

    
por SerinEleven 27.12.2013 / 04:24

1 resposta

1

Você está perdendo Return após sua primeira tecla de atalho. O código de uma tecla de atalho é executado até atingir Return . Seu script deve ficar assim. Eu também fiz algumas formatações para você.

#If WinActive("ahk_class RainmeterMeterWindow")
    ~LButton::
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
        WinMinimizeAllUndo
        rainystate := 0
    Return   ; This was missing
#If


#z::
    if (rainystate = 0)
    {
        WinMinimizeAll
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 1 *
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !Show *
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 0 "WP7\Background"
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !RainmeterZPos 2 "WP7\Panels\Computer"
        rainystate := 1
    }
    else
    {
        Run, C:\Program Files\Rainmeter\Rainmeter.exe !Hide *
        WinMinimizeAllUndo
        rainystate := 0
    }
    Sleep 50
Return
    
por 27.12.2013 / 14:50

Tags