Русская документация для фриланесеров
Главная arrow Java arrow Автоматизация с WSH  
08.01.2009 г.
Главное меню
Главная
Поиск
PHP
.NET
Java
Ruby
C++
Delphi
Другие языки
Базы данных
Безопасность
Сети
ОС
Мобильные
Теория дизайна
WEB
Разное
Админцентр



Автоматизация с WSH Печать E-mail
Автор Westry   
21.03.2008 г.
За свое существование корпорация Майкрософт успела натворить много полезного и бесполезного. В данной статье я расскажу о технологии WSH, а точнее как с помощью этой технологии можно автоматизировать работу программ* (например, установочных).

WSH это специальная технология, которая позволяет запускать скрипты VBScript и JScript, прямо из под операционной системы. Здесь я расскажу про работу с JScript.

В ХР WSH установлена изначально, в 98 она тоже есть, но старая версия, так что потребуется скачать новую с мелкосовтовского сайта.

Эта технология имеет довольно обширные возможности, но для решения нашей задачи нужны только четыре функции, которые выглядят следующим образом:

  • Sleep(Х) – остановить выполнение на Х миллисекунд
  • SendKeys("Х") – имитируется нажатие клавиши Х на клавиатуре (или нескольких клавиш поочереди, если это строка)
  • AppActivate("Х") – активизирует приложение по заголовку Х окна или по идентификатору процесса Х
  • Run("Х") – запуск приложения по командной строке Х

Эти функции являются методами объектов Shell и WScript. При этом объект WScript объявлен изначально, а Shell придется объявить самим. Делается это следующим образом:

	var wsh=WScript.CreateObject("WScript.Shell");

Функция Sleep() принадлежит объекту WScript, а остальные функции – Shell. Теперь ничто не мешает использованию вышеперечисленных функций. Следующий пример показывает как запустить калькулятор и посчитать произведение 2 на 3:

	var wsh=WScript.CreateObject("WScript.Shell");
wsh.Run("calc");
WScript.Sleep("500");
wsh.AppActivate("Калькулятор");
wsh.SendKeys("2");
WScript.Sleep("500");
wsh.SendKeys("*");
WScript.Sleep("500");
wsh.SendKeys("3");
WScript.Sleep("500");
wsh.SendKeys("~");

Кодирование кнопок

Все символьные кнопки записываются как символы, например, требуется нажать кнопку «а» пишем wsh.SendKeys("а"), элементарно. Если нужны специальные клавиши (enter, alt…) тогда пользуемся записью показанной в таблице:

КнопкаАргумент
BACKSPACE{BACKSPACE}, {BS}, или {BKSP}
BREAK{BREAK}
CAPS LOCK{CAPSLOCK}
DEL or DELETE{DELETE} ил {DEL}
DOWN ARROW{DOWN}
END{END}
ENTER{ENTER} или ~
ESC{ESC}
HELP{HELP}
HOME{HOME}
INS or INSERT{INSERT} или {INS}
LEFT ARROW{LEFT}
NUM LOCK{NUMLOCK}
PAGE DOWN{PGDN}
PAGE UP{PGUP}
PRINT SCREEN{PRTSC}
RIGHT ARROW{RIGHT}
SCROLL LOCK{SCROLLLOCK}
TAB{TAB}
UP ARROW{UP}
F1{F1}
F2{F2}
……………….
F12{F12}
SHIFT+
CTRL^
ALT%

Иногда требуется нажать одновременно две кнопки для выполнения действия, например, переход в следующее приложение ALT+TAB в SendKeys() это реализуется записью SendKeys("%+{TAB}"), тоесть запись имеет формат <первая нажимаемая клавиша>+<вторая нажимаемая клавиша>.

А здесь еще один пример-прикол созданный с помощью JScript, который через 5 минут после запуска скрипта открывает каждые 2 минуты блокнот и печатает в нем строку «Эй чувак ты меня уже достал может все же передохнем пару часиков??» (должна быть включена русская раскладка):

	var wsh=WScript.CreateObject("WScript.Shell");
WScript.Sleep("300000");
wsh.Run("notepad");
str = "Эй чувак ты меня уже достал может все же передохнем пару часиков??";
while(1==1)
{
WScript.Sleep("300");
for(i=0; i<str.length; i++)
{
wsh.AppActivate("Безымянный - Блокнот");
wsh.SendKeys(str.charAt(i));
WScript.Sleep("300");
}
WScript.Sleep("120000");
}

Полезность

Да если кто заинтересовался этой фихой могу подогнать программу TScript , для более удобного использования этой технологии. Для ее использования просто составляете файл в формате:

Клавиша ожидание
Клавиша ожидание
………………………

После берете и запускаете программу с этим файлом в качестве параметра и получаете в итоге файл:

	var wsh=WScript.CreateObject("WScript.Shell");
WScript.Sleep(ожидание);
wsh.SendKeys("Клавиша");
WScript.Sleep(ожидание);
wsh.SendKeys("Клавиша");

Например, если преобразовать файл «1.txt»:

~ 200
g 400
t 500

, то получим в итоге готовый к употреблению файл «1.txt.js»:

	var wsh=WScript.CreateObject("WScript.Shell");
WScript.Sleep(200);
wsh.SendKeys("~");
WScript.Sleep(400);
wsh.SendKeys("g");
WScript.Sleep(500);
wsh.SendKeys("t");

Важно! Для работоспособности программы файл не должен быть пустым, клавиша не должна включать пробелов, между клавишей и ожиданием один пробел, в конце файла не должно быть перевода на новую строку (вроде все:-)).

Для удобства можно скинуть ссылку на программу в папку SendTo, а для преобразования нажимать на файл правой кнопкой мыши и выбирать отправить->TScript и в текущей папке вы получаете преобразованный файл.

Пишите если, что непонятно Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script .

RsK
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
http://www.isoft.spb.ru/

 
« Пред.   След. »
Webdesign by Webmedie.dk Webdesign by Webmedie.dk