Допустим, вам нужно из одного и того же командного файла запустить notepad.exe и cmd.exe. Если просто вставить строки
notepad.exe
cmd.exe
то после запуска notepad.exe выполнение командного файла приостановится и пока не будет завершен notepad, cmd.exe не запустится. Самый простой способ обойти эту проблему - использовать стандартную команду Windows start. Полную справку по использованию можно получить по:
start /?
Попробуйте создать командный файл следующего содержания:
start /MAX notepad.exe
start "This is CMD.EXE" /MIN cmd.exe
net send %COMPUTERNAME% NOTEPAD and CMD running.
После выполнения этого командного файла вы увидите стартовавшие, в развернутом окне (ключ /MAX) блокнот, в свернутом окне (ключ /MIN) командный процессор CMD.EXE и окно с сообщением net.exe. Стандартный заголовок окна cmd.exe заменен на текст "This is CMD.EXE". Обратите внимание на то что заголовок окна можно опускать, но особенность обработки входных параметров командой start может привести к неожиданным результатам при попытке запуска программы, имя или путь которой содержит пробел(ы). Например при попытке выполнить следующую команду:
start "C:\Program Files\FAR\FAR.EXE"
Из-за наличия пробела в пути к исполняемому файлу, строка для запуска FAR.EXE должна быть заключена в двойные кавычки, однако формат входных параметров для start предполагает наличие заголовка окна, также заключаемого в двойные кавычки, в результате чего "C:\Program Files\FAR\FAR.EXE" интерпретируется не как исполняемая программа, а как заголовок окна. Для того, чтобы подобного не случилось нужно использовать любой, пусть даже пустой, заголовок:
start "" "C:\Program Files\FAR\FAR.EXE"
Если вам все же потребуется расширенное управление окнами приложений, придется воспользоваться сторонним программным обеспечением, например, CMDOW Скачать ~15кб
Сайт разработчика
Из-за специфического поведения эта утилита большинством антивирусов определяется как вирус, поэтому для нормальной работы нужно занести ее в исключения антивируса.
Cmdow.exe - крошечная утилита, работающая в Windows NT4/2000/XP/2003 без установки. Позволяет получить список окон, перемещать, изменять размеры, переименовывать, сворачивать/разворачивать, активировать/деактивировать, закрывать, скрывать окна приложений и многое другое. Справку можно получить по команде:
cmdow /?
Используется около 30 ключей. Описание на русском языке найдете здесь. Некоторые примеры:
· Получение информации об окнах:
cmdow.exe или cmdow.exe > wins.txt - выдать информацию обо всех окнах на экран или в файл wins.txt
cmdow /T - выдать информацию об окнах, отображаемых на панели задач рабочего стола.
Информация содержит колонки:
Handle - дескриптор окна - шестнадцатеричное число, связанное с данным окном.
Lev - уровень окна. Приложение может быть многооконным с несколькими уровнями окон.
Pid - идентификатор процесса, породившего окно.
-Window status- - состояние окна (видимое - Vis, скрытое - Hid, активное - Act, свернутое - Min и т.п.
Image - программа вызвавшая окно.
Caption - название окна
Манипулировать окнами можно используя название окна, или его дескриптор. Если название окна содержит пробелы, то оно заключается в двойные кавычки. Если имеются русские буквы, то должна использоваться DOS-кодировка. Символ @ используется для указания текущего окна. Иногда проще использовать дескриптор окна, а не его название. Полезным может быть и использование команды поиска по строке find.exe, выполняемой в цепочке с cmdow:
cmdow.exe | find.exe /I "hid" > wins.txt - в файл wins.txt попадут только строки содержащие шаблон "hid" и мы получим список скрытых окон.
cmdow.exe | find.exe /I "MyIE" > wins.txt - список окон приложения MyIE
· Манипулирование окнами.
Если вы хотите, чтобы ваш командный файл выполнялся скрытно, добавьте в него строку:
cmdow @ /HID - скрыть текущее окно
Ниже командный файл с комментариями, демонстрирующий возможности работы cmdow:
@ECHO OFF
REM Свернуть все окна - /MA
cmdow /MA
REM запустить cmd.exe с заголовком окна MyCMD
start "MyCMD" cmd.exe
REM ждать 5 секунд
call:wait5s
REM
:M1
REM Скрыть окно MyCMD
cmdow MyCMD /hid
call:wait5s
REM Сделать видимым
cmdow MyCMD /vis
call:wait5s
REM Переместить в верхний левый угол экрана и развернуть окно
cmdow MyCMD /MOV 0 0
cmdow Mycmd /max
call:wait5s
REM Изменить размер на 320 х 240 и переместить вправо на 320 точек
cmdow MyCMD /MOV 320 0 /SIZ 320 240
call:wait5s
REM Переместить окно в точку с координатами 320 x 240 и изменить размер на 350x50
cmdow MYCMD /MOV 320 240 /SIZ 350 50
call:wait5s
REM Восстановить окно
cmdow MYCMD /RES
call:wait5s
REM Восстановить и сделать активным окно этого командного файла
cmdow @ /RES /ACT
ECHO Для завершения нажмите CTRL-C (CTRL-Break)
call:wait5s
call:wait5s
REM Зацикливание - переход к метке:M1
GOTO M1
REM Подпрограмма задержки на 5секунд
:wait5s
@ping -n 5 localhost > nul
Пример командного файла, закрывающего окна Проводника Интернет (IEXPLORE.EXE):
@echo off
:M1
for /f "tokens=1-2,8" %%a in ('cmdow') do (
if /i "%%c"=="IEXPLORE" if "%%b"=="1" cmdow %%a /END > nul
)
goto M1
Работает это следующим образом. Из выходных данных CMDOW берется первое, второе и 8-е поля. Первое - дескриптор окна (Handle), второе - уровень (Lev), третье - имя программы (Image). В цикле выполняется cmdow и если в ее выводе имеется строка, где имя программы IEXPLORE и уровень окна 1 выполняется cmdow <дескриптор> /END. Пока этот командный файл выполняется, запустить "Обозреватель интернета" не получится. А если в начало командного файла добавить "cmdow @ /hid" - то будет скрыто и его окно.