Autohotkey não consegue abrir um programa que o Windows 10 lista como um processo em segundo plano

3

Eu remapeei minha chave NumLock usando o AutoHotKey para que ela pudesse abrir a calculadora, usando o seguinte script:

NUMLOCK::
IfWinExist Calculator
{
    WinActivate Calculator
}
else
{
    Run, % "calc"
    WinWait Calculator
    WinActivate
}

Isso funcionou muito bem no Windows 7 (embora com uma linha de "execução" diferente devido a alterações no nome do aplicativo). A linha IfWinExist verifica se a Calculadora já está em execução. Se for, ativa-o; se não, lança-o. Isso funciona para evitar que você obtenha várias cópias da Calculadora em execução, caso não a feche entre os usos.

Com o Windows 10, percebi que ele funciona apenas de forma intermitente. A primeira vez que eu inicio após uma reinicialização, tudo funciona normalmente. No entanto, às vezes, ao fechar o aplicativo Calculadora, ele é salvo nos processos em segundo plano, em vez de ser realmente encerrado.

Quando eu ativo o script, o IfWinExist o encontrará como em execução e (aparentemente) o ativa, mas sem efeito visível, já que é um processo em segundo plano. Se eu abro o Gerenciador de Tarefas e mato o processo, a função normal retorna (por um tempo).

Existe alguma maneira de evitar que o Windows deixe a Calculadora como um Processo em Segundo Plano ou faça com que a AutoHotKey faça distinção entre os Aplicativos e os Processos em Segundo Plano?

    
por techturtle 24.08.2016 / 18:17

4 respostas

1

Eu não uso o Windows 10 a maior parte do tempo. Parece que você precisa de uma maneira de detectar que é um processo em segundo plano e, em seguida, ativá-lo (não é mais um processo em segundo plano) ou apenas matá-lo e iniciar uma nova cópia.

Além de descobrir como ativar o modo "correto", uma coisa que você poderia fazer seria fazer um WinActivate seguido por um WinWaitActive com um tempo limite. Se ErrorLevel for definido, ele não será ativado corretamente (ou seja, processo em segundo plano) e você poderá matar / reiniciar.

Você também pode ver sua configuração atual de A_DetectHiddenWindows e ver se está ativada. Suponho que não esteja ativada e desativada por padrão. Você pode ver se forçar DetectHiddenWindows, On causa qualquer alteração no comportamento (não adivinhando).

Você também pode tentar um WinShow depois que o IfWinExist retornar verdadeiro, ou seja, antes de ativar com WinActivate . Não tenho certeza do que o Windows 10 está fazendo nos bastidores, mas pode ser apenas uma janela oculta que está presente no plano de fundo; nesse caso, é possível mostrá-lo. Você também pode encontrar um utilitário chamado Spy++ ou Spyxx que mostrará todas as janelas por thread, processo ou janela com uma visualização em árvore, que mostrará se há uma janela oculta presente quando ela é executada como um processo em segundo plano.

    
por 26.08.2016 / 06:47
1

Isso é o que eu uso. Não é o código mais bonito, mas é 100% confiável para a Calculadora no Windows 10, seja um processo em segundo plano ou não. Eu gosto de marcá-lo AlwaysOnTop com base no meu fluxo de trabalho; apenas remova isso se você não quiser.

CalcOnTop = 0
;[Win+C] Calculator
*#c::
IfWinExist Calculator
{
    WinActivate Calculator
    WinWaitActive, Calculator, , 1
    if ErrorLevel
    {
        Process,WaitClose,calculator.exe,1
        CalcOnTop = 0
        Run calc.exe
        WinWait, Calculator, , 3
        if ErrorLevel
        {
            MsgBox, Error:  WinWait timed out. (3 seconds)
            return 
        }
        else
        {
            WinActivate Calculator
            Sleep 25
            WinSet, AlwaysOnTop, On, Calculator
            CalcOnTop = 1
            return
        }
        }
    if (CalcOnTop = 1)
        return
    else
    {
        WinSet, AlwaysOnTop, On, Calculator
        CalcOnTop = 1
        return
    }
}
else
{
    CalcOnTop = 0
    Run calc.exe
    WinWait, Calculator, , 3
    if ErrorLevel
    {
        MsgBox, Error:  WinWait timed out. (3 seconds)
        return 
    }
    else
    {
        WinActivate Calculator
        Sleep 25
        WinSet, AlwaysOnTop, On, Calculator
        CalcOnTop = 1
        return
    }
}
    
por 09.08.2017 / 16:57
0

Acho que esta pergunta ajudará você a resolver seu problema. Parece que o motivo pelo qual ele é executado como um processo em segundo plano é para atualizações. Você pode desabilitar isso indo para Start -> Settings -> Privacy -> Background apps como a outra pergunta sugere.

    
por 24.08.2016 / 19:18
0

Isso está funcionando para mim. A única coisa é que você precisa se lembrar de fechar a Calculadora com um atalho de teclado em vez de clicar com o mouse (eu uso Ctrl + Shift + W, já que estou acostumado a usá-la para navegadores). Mas o WinClose parece impedir que a calculadora seja usada como um processo em segundo plano.

#IfWinNotExist Calculator
    NumLock::Run, Calc.exe
#IfWinNotExist

#IfWinExist, Calculator
    NumLock::WinActivate
#IfWinExist

#IfWinActive, Calculator
    ^+w::WinClose
#IfWinActive

Se você realmente quisesse manter a opção de fechar a janela com um clique do mouse, eu imagino que você poderia configurar algo para executar o WinClose se um clique for detectado dentro de uma determinada região da janela ativa (quando a janela ativa é Calc).

    
por 14.12.2017 / 12:17