Запуск программ


Чеботарев Игорь

В предыдущей статье я рассказал об основах WSH и привел пример скрипта для работы с реестром (добавление и удаление записей). Здесь мне бы хотелось продолжить обсуждение этой интересной темы и предложить вашему вниманию еще несколько скриптов, полнее раскрывающих возможности Windows Script Host.

Для начала, хотелось бы привести небольшой скрипт, который позволяет запускать различные программы (в примере Блокнот), а также показать вывод диалогового окна с запросом о запуске программы.

//Пример запуска программы с диалоговым окном запроса
//на JScript
var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var Message = "Вы действительно хотите запустить программу Notepad?";
var Title   = "Подтвердите действие";
Welcome();
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("notepad",5);
function Welcome() {
    var WSHShell = WScript.CreateObject("WScript.Shell");
    var intDoIt;
    intDoIt =  WSHShell.Popup(Message,
                              0,
                              Title,
                              vbOKCancel + vbInformation );
    if (intDoIt == vbCancel) {
        WScript.Quit();
    }
}

В первых пяти строках описываются переменные, которые нам потребуются при вызове функции Welcome(). Эта функция выдает на экран окно с запросом на запуск программы и в случае положительного ответа продолжается выполнение скрипта. Если ответ отрицательный, выполнение прерывается. Строка WSHShell.Run("notepad",5); запускает Блокнот. Мы еще рассмотрим ее подробнее чуть позже, а пока обратите внимание на то, что объект WSHShell создается дважды: один раз в функции Welcome() и второй раз непосредственно перед запуском Блокнота. Закономерный вопрос: а нельзя ли обойтись одним созданием объекта? Если закомментировать строку перед запуском Блокнота и попробовать опять запустить скрипт, то будет выдана ошибка что определение WSHShell отсутствует. Почему так происходит? Ведь функция Welcome() вызывается до запуска программы и следовательно создание объекта WSHShell происходит до вызова метода запуска программы. Да простят меня программисты за то, что мне приходится подробно описывать такие элементарные вещи, но не все знакомы с программированием и с таким термином как "область видимости". Так как объект WSHShell создается внутри функции, то он будет существовать только до тех пор, пока мы из этой функции не выйдем. Т.е. за пределами Welcome() объекта WSHShell нет, поэтому и появляется ошибка. Давайте немного модифицируем скрипт, чтобы объект WSHShell описать только один раз:

//Пример запуска программы с диалоговым окном запроса
//на JScript
var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var Message = "Вы действительно хотите запустить программу Notepad?";
var Title   = "Подтвердите действие";
var WSHShell = WScript.CreateObject("WScript.Shell");
Welcome();
WSHShell.Run("notepad",5);
function Welcome() {
    var intDoIt;
    intDoIt =  WSHShell.Popup(Message,
                              0,
                              Title,
                              vbOKCancel + vbInformation );
    if (intDoIt == vbCancel) {
        WScript.Quit();
    }
}

Теперь создание WSHShell происходит до вызова функции Welcome() и создавать его повторно внутри функции нет необходимости. Такая переменная называется глобальной. Т.е. она существует на протяжении всего времени выполнения скрипта и видна во всех функциях. Переменная которая создается внутри функции и видна только в этой функции называется локальной.

Давайте вернемся к строке WSHShell.Run("notepad",5); и рассмотрим ее подробнее. При вызове метода Run передаются 2 переменных. Если с первой все понятно - это имя запускаемого файла (т.к. файл notepad находится в каталоге Windows, который присутствует в переменной среды окружения Path, то можно не указывать полный путь к нему. В противном случае для запуска программы надо указывать ее полное имя, например: "C:\\polniy\\put_k\\programme\\file.exe"), то со второй не все так просто. Эта цифра указывает состояние окна запускаемой программы. Она может принимать десять различных значений от 0 до 9, но все я описывать не буду, а расскажу только про самые интересные:

0 - запускать программу в скрытом окне. Т.е. если вы попытаетесь запустить Блокнот с таким значением второй переменной, то окно программы будет невидимым и кнопка на панели задач не будет создана. Чтобы увидеть что Блокнот все-таки запустился, нажмите Ctrl+Alt+Del и вы увидите там строку с текстом Notepad.
6 - запустить программу минимизированной. При этом активным будет следующее окно в Z-последовательности.
2 - запустить программу минимизированной.
3 - запустить программу максимизированной.
5 - запустить программу с текущими размером и позицией окна.

Остальные значения не так интересны и являются вариациями на тему. Если интересно, можете сами поэкспериментировать с этой переменной.

Я не стал приводить эти примеры в исполнении на VBScript - желающие легко смогут осуществить это самостоятельно. Если что не получится, обратитесь к предыдущему материалу, там было описано коротко различие между JS и VBS.

читать еще по теме