Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пакетные файлы.doc
Скачиваний:
23
Добавлен:
02.12.2018
Размер:
129.02 Кб
Скачать

Работа с оконными приложениями

Допустим, вам нужно из одного и того же командного файла запустить noteped.exe и cmd.exe. Если просто вставить строки notepad.exe cmd.exe то после запуска notepad.exe выполнение командного файла приостановится и пока не будет завершен notepad, cmd.exe не запустится. Самый простой способ обойти эту проблему - использовать стандартную утилиту Windows start.exe. Полную справку по использованию можно получить по: start.exe /? Попробуйте создать командный файл следующего содержания:

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.exe может привести к неожиданным результатам при попытке запуска программы, имя или путь которой содержит пробел(ы). Например при попытке выполнить следующую команду: start "C:\Program Files\FAR\FAR.EXE" Из-за наличия пробела в пути к исполняемому файлу, строка для запуска FAR.EXE должна быть заключена в двойные кавычки, однако формат входных параметров для start.exe предполагает наличие заголовка окна, также заключаемого в двойные кавычки, в результате чего "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 Скрыть окно MyCND 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" - то будет скрыто и его окно.