Я хочу сделать так, чтобы когда пользователь запускал определенную программу, такую как Firefox, мой пакетный файл запускался в фоновом режиме.

Я использовал приведенный ниже код, но он запускает мой пакетный файл вместо Firefox. Я не хочу этого Я хочу, чтобы командный файл слушал программы на компьютере, и когда запускается определенная программа, командный файл запускается в фоновом режиме.

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

Как я могу сделать это?

1 ответ1

0

Вы можете использовать этот скрипт 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
    }
}

Он использует WMI для наблюдения за созданием новых процессов, и, если процесс принадлежит firefox.exe , он запускает скрытую командную строку (если только она не запущена с предыдущего запуска Firefox).

Если вы хотите, чтобы новый запуск командного файла запускался при каждом запуске Firefox, используйте этот более простой скрипт:

$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
    }
}

Если вы не хотите, чтобы окно подсказки было полностью скрыто, просто измените -WindowStyle Hidden на -WindowStyle Minimized .

Сохраните выбранный сценарий PowerShell как файл .ps1 . Чтобы запустить его при входе в систему, поместите пакетный файл, содержащий это, в папку автозагрузки:

powershell -file 'C:\path\to\powershellScript.ps1' -executionpolicy bypass -windowstyle Hidden

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .