Вопрос или проблема
У меня есть простой .bat файл, который открывает страницу в Firefox, и я создал задачу в планировщике заданий, чтобы выполнять это каждый день в определенное время.
@Echo off
"C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com
EXIT
Проблема в том, что когда открыты другие программы или папки, Firefox открывается под ними. Есть ли способ запустить Firefox поверх?
Используйте ваш bat скрипт, чтобы вызвать Firefox, если он не запущен:
@echo off
title <nul && title ...\"%~nx0"
%__AppDir__%mode.com con: cols=50 lines=10
%__AppDir__%tasklist.exe | find /i "firefox.exe" >nul || (
start "" /b "C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com)
И добавьте/используйте также код VBS, чтобы вывести Firefox на передний план:
WScript.CreateObject("WScript.Shell").AppActivate("firefox")
Используйте адаптированный код в гибридном режиме ваш bat + vbs:
<!-- :
@echo off
title <nul && title ...\"%~nx0"
%__AppDir__%mode.com con: cols=50 lines=10
%__AppDir__%tasklist.exe | find /i "firefox.exe" >nul || (
start "" /b "C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com)
%__AppDir__%timeout.exe /t 2 /nobreak | echo=// ждем 2 секунды, чтобы убедиться, что Firefox загрузился
%__AppDir__%wScript.exe "%~dpnx0?.wsf" & %__AppDir__%move.com nul 2>&0 & goto :eOf || exit /b
-->
<job><script language = "vbscript">WScript.CreateObject("WScript.Shell").AppActivate("firefox")</script></job>
Простое объяснение гибридной структуры будет таковым:
<!-- :
bat код и также vbs комментарий
-->
<job>
vbs скрипт код
</job>
Примечание: Сохраните этот скрипт как some_file_name.cmd
или some_file_name.bat
// Некоторые ссылки, чтобы познакомиться с гибридными кодами, включающими bat и vbs:
– Синтаксис
– Примеры
// Вопросы:
– Как вызвать или встроить VBS в Batch скрипт
– Возможно ли встроить и выполнить VBScript внутри bat файла без использования временного файла?
Вы можете добиться успеха с:
@Echo off
"C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com
ping 127.0.0.1 -n 1 > nul
EXIT
Я не знаю, почему это работает для меня, у меня просто была такая же проблема, как и у вас, когда окно приложения остаётся на заднем плане на системе Windows 10. Я уже отчаялся и хотел вывести подсказку в бат-файле о том, что окно приложения может быть скрыто.
Чтобы сделать подсказку видимой в течение короткого времени, прежде чем окно бат-файла закроется (и в отсутствие команды задержки для бат-файлов), я хотел использовать общую ping 127.0.0.1 -n 6 > nul
(пять секунд задержки с шести пингов на локальный хост с интервалом в одну секунду и вывод перенаправлен в nul, так как это не имеет значения, здесь) после запуска приложения и вывода подсказки.
Так как теперь приложение было открыто на переднем плане, я убрал подсказку и уменьшил задержку до нуля секунд (один пинг).
Предположительно, другие команды, кроме ping, также подходят для обеспечения открытия окна на переднем плане, но внутренние команды exit и echo не подходят.
Ответ или решение
Как запустить программу на переднем плане с помощью Batch-файла
Если у вас есть задача по запуску Firefox через Batch-файл, и эта программа открывается позади других окон, существует несколько методов, позволяющих исправить данную ситуацию. В этом руководстве мы рассмотрим, как обеспечить открытие браузера на переднем плане с помощью Batch-файла и дополнительного кода на VBScript.
Пример Batch-файла для запуска Firefox
Для начала создайте или отредактируйте ваш Batch-файл. Рассмотрим приведенный ниже код:
@Echo off
title <nul && title ...\"%~nx0"
%__AppDir__%mode.com con: cols=50 lines=10
%__AppDir__%tasklist.exe | find /i "firefox.exe" >nul || (
start "" /b "C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com
)
%__AppDir__%timeout.exe /t 2 /nobreak > nul
%__AppDir__%wScript.exe "%~dpnx0?.wsf" & %__AppDir__%move.com nul 2>&0 & goto :eOf || exit /b
Объяснение кода
-
Проверка на наличие Firefox:
Код начинает с проверки, запущен ли уже Firefox. Если нет, то он выполняет команду для его запуска. Это делается с помощьюtasklist
иfind
. -
Запуск Firefox:
Если Firefox не работает, он открывается с заданным URL-адресом. -
Задержка:
Добавлена небольшая задержка (2 секунды), чтобы дать время браузеру загрузиться. Это поможет избежать ситуации, когда VBScript запустится до того, как Firefox будет готов к активации. -
Активация окна Firefox:
После задержки вызывается VBScript для активации окна браузера, гарантируя, что он будет на переднем плане.
Встраивание кода VBScript в Batch-файл
Для обеспечения активации окна Firefox, потребуется добавить следующий VBScript код:
WScript.CreateObject("WScript.Shell").AppActivate("firefox")
Чтобы встроить этот код в ваш Batch-файл, необходимо использовать синтаксис hybrid. Вот как это будет выглядеть:
@echo off
title <nul && title ...\"%~nx0"
%__AppDir__%mode.com con: cols=50 lines=10
%__AppDir__%tasklist.exe | find /i "firefox.exe" >nul || (
start "" /b "C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com
)
%__AppDir__%timeout.exe /t 2 /nobreak > nul
<job>
<script language="vbscript">WScript.CreateObject("WScript.Shell").AppActivate("firefox")</script>
</job>
Сохранение файла
Не забудьте сохранить файл с расширением .bat
или .cmd
, чтобы его можно было запускать.
Альтернативный метод с использованием ping
Некоторые пользователи сообщают, что использование команды ping
для создания задержки также помогает Firefox открываться на переднем плане. Вот пример:
@Echo off
"C:\Program Files\Mozilla Firefox\firefox.exe" https://google.com
ping 127.0.0.1 -n 1 > nul
EXIT
В данном случае команда ping
создает временную задержку, которая может помочь окну Firefox появиться поверх других.
Заключение
Использование комбинации Batch и VBScript является эффективным способом решения проблемы открытия Firefox на переднем плане. Вы можете выбрать наиболее подходящий метод в зависимости от ваших нужд и предпочтений. Если что-то не работает, попробуйте использовать различные настройки и задержки, чтобы найти оптимальное решение для вашего окружения.