Como executar um arquivo em lotes em segundo plano quando um programa específico é iniciado

0

Eu quero fazer com que, quando um usuário executa um programa específico, como o Firefox, meu arquivo de lote seja iniciado em segundo plano.

Eu usei o código abaixo, mas ele faz meu arquivo de lote iniciar em vez de Firefox. Eu não quero isso. Eu quero o arquivo em lotes para ouvir programas no computador e quando um determinado programa for iniciado, o arquivo em lotes será iniciado em segundo plano.

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\firefox.exe" /v Debugger /d "D:\Desktop\m.bat" /f

Como posso conseguir isso?

    
por Muhammad Khaled 22.04.2017 / 12:29

1 resposta

0

Você pode usar este script do PowerShell:

$query = New-Object System.Management.WqlEventQuery ("__InstanceCreationEvent", (New-Object TimeSpan (0, 0, 1)), 'TargetInstance isa "Win32_Process"')
$watcher = New-Object System.Management.ManagementEventWatcher
$watcher.Query = $query
$watcher.Options.Timeout = [System.Management.ManagementOptions]::InfiniteTimeout
$curProc = $null
While ($true) {
    $e = $watcher.WaitForNextEvent().TargetInstance
    If ($e.Name -eq 'firefox.exe' -and ($curProc -eq $null -or $curProc.ExitTime -ne $null)) {
        $curProc = Start-Process 'cmd' -Argument '/c C:\path\to\script.bat' -PassThru -WindowStyle Hidden
    }
}

Ele usa o WMI para observar a criação de novos processos e, se o processo pertencer a firefox.exe , ele iniciará um prompt de comando oculto (a menos que já esteja sendo executado em um início anterior do Firefox).

Se você deseja que uma nova execução do arquivo em lote seja iniciada sempre que o Firefox for iniciado, use este script mais simples:

$query = New-Object System.Management.WqlEventQuery ("__InstanceCreationEvent", (New-Object TimeSpan (0, 0, 1)), 'TargetInstance isa "Win32_Process"')
$watcher = New-Object System.Management.ManagementEventWatcher
$watcher.Query = $query
$watcher.Options.Timeout = [System.Management.ManagementOptions]::InfiniteTimeout
While ($true) {
    $e = $watcher.WaitForNextEvent().TargetInstance
    If ($e.Name -eq 'firefox.exe' ) {
        Start-Process 'cmd' -Argument '/c C:\path\to\script.bat' -WindowStyle Hidden
    }
}

Se você não quiser que a janela de prompt fique completamente oculta, basta alterar -WindowStyle Hidden para -WindowStyle Minimized .

Salve seu script do PowerShell selecionado como um arquivo .ps1 . Para iniciá-lo no seu logon, coloque um arquivo de lote contendo isso na sua pasta de inicialização:

powershell -file 'C:\path\to\powershellScript.ps1' -executionpolicy bypass -windowstyle Hidden
    
por 22.04.2017 / 23:50