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