Поскольку я не верю, что это можно сделать с помощью простого файла .bat, это похоже на работу AutoHotKey.
AutoHotkey (AHK) - это бесплатное программное обеспечение с открытым исходным кодом для создания макросов и автоматизации для Windows, которое позволяет пользователям автоматизировать повторяющиеся задачи. Он управляется языком сценариев, который первоначально был нацелен на предоставление сочетаний клавиш, также известных как горячие клавиши, которые со временем превратились в полноценный язык сценариев.
Согласно этому сообщению на форуме от 2014 года вы должны иметь возможность переключать видимость окна с помощью скрипта, подобного следующему:
#NoTrayIcon
#Persistent
global hBatFile
/* Setup Tray icon and add item that will handle
* double click events
*/
Menu Tray, Icon
Menu Tray, Icon, C:\windows\system32\cmd.exe
Menu Tray, Add, Show / Hide Pingu, TrayClick
Menu Tray, Add, Close Pingu, CloseItem
Menu Tray, Default, Show / Hide Pingu
;// Run program or batch file hidden
DetectHiddenWindows On
Run pingu.bat,, Hide, PID
WinWait ahk_pid %PID%
hBatFile := WinExist()
DetectHiddenWindows Off
return
TrayClick:
OnTrayClick()
return
;// Show / hide program or batch file on double click
OnTrayClick() {
if DllCall("IsWindowVisible", "Ptr", hBatFile) {
WinHide ahk_id %hBatFile%
} else {
WinShow ahk_id %hBatFile%
WinActivate ahk_id %hBatFile%
}
}
CloseItem() {
DetectHiddenWindows On
WinWait ahk_class ConsoleWindowClass
Process, Close, cmd.exe
DetectHiddenWindows Off
ExitApp
}
Этот скрипт был протестирован с AutoHotKey 1.1.24.00 (май 2016 г.).
РЕДАКТИРОВАТЬ: Вот ссылка на модифицированную версию ОП с улучшениями.
В этом случае:
- pingu.bat - (произвольное) имя пакетного файла, который мы хотим запустить
- hBatFile - произвольное имя переменной, содержащее некоторую информацию об окне
- Pingu - произвольное имя, которое отображается в дополнительных пунктах меню AHK в трее.
Просто сохраните скрипт как что-то вроде «tray.ahk» (обратите внимание на расширение скрипта .ahk) и дважды щелкните для запуска (при условии, что вы установили AutoHotKey).
Сценарий запускает свернутый пакетный файл и заменяет значок сценария AHK по умолчанию значком миниатюрного окна консоли в трее.
Видимость окна консоли можно переключать двойным щелчком по значку на панели задач или добавленному пункту меню в панели задач (выделено жирным шрифтом в нижней части меню выбора).
Закрытие как командного файла, так и командного окна может быть сделано с помощью добавленного пункта меню "Закрыть" под «Показать / Скрыть» ("Выход" закроет только сценарий, а не окно консоли).
Также обратите внимание, что
Run pingu.bat,, Hide, PID
Очевидно, вам нужно будет заменить «pingu.bat» на имя вашего собственного командного файла. В этой строке предполагается, что скрипт AHK находится в том же каталоге, что и «pingu.bat», или что «pingu.bat» доступен глобально (т. Е. Он был добавлен в папку в системном пути или пользовательских переменных PATH). В противном случае вы захотите заменить «pingu.bat» на полный путь к исполняемому файлу (следите за пробелами!).
Предостережения
Этот скрипт в основном служит интерфейсом для видимости окна. Это означает, что если вы "выходите" с помощью иконки в трее, вы выходите только из сценария AHK, а не из своего пакетного файла.
Простое решение - использовать добавленный пункт меню "Закрыть" для выхода из скрипта и остановки cmd.exe. В противном случае, вы можете показать окно консоли и Ctrl-C (или просто закрыть окно консоли с красным 'X'), чтобы завершить пакетный процесс, затем выбрать "Выход" на значке в трее, чтобы остановить скрипт AHK - они отдельные процессы, как уже упоминалось.
Примечание: Потерянные консольные программы со скрытыми окнами не могут быть снова доступны напрямую, если сценарий AHK завершается с "Exit" первым - но вы можете использовать диспетчер задач, чтобы достаточно легко закрыть связанный процесс cmd.exe.
Наконец, пункт меню "Закрыть", как написано, работает нормально, если есть только один процесс cmd.exe. Однако, если запущено более одного, это может некорректно закрыть командный файл, который вы запустили с помощью скрипта (он может закрыть что-то еще). Вы можете захотеть взглянуть на закрытие по идентификатору процесса. В противном случае вы можете "Показать", выйти из пакетного сценария, а затем "Выйти" из сценария AHK, как описано выше.
Примечания сценария
Menu Tray, Icon, C:\windows\system32\cmd.exe
относится к расположению скомпилированного исполняемого файла со связанным встроенным файлом значков. Вы должны быть в состоянии заменить это ссылкой на любой исполняемый файл со встроенным значком или прямой ссылкой на файл значка .ico, например
Menu Tray, Icon, C:\Path\To\Icons\icon.ico