Объект WScript.Shell метод AppActivate — Как активировать окно Windows

Объект WScript.Shell метод AppActivate — Как активировать окно Windows Объектная модель Windows Script Host

Здравствуйте, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим, как активировать окно Windows заданного приложения программным методом. Статья будет интересна как рядовым пользователям, так и начинающим программистам.

И так, давайте рассмотрим метод AppActivate объекта WScript_Shell, который позволяет сделать активное окно Window заданной программы. Давайте мысленно подумаем, где метод AppActivate может пригодиться: у нас работает три разных приложения, каждое из них находится в состоянии ожидания ввода данных. Задача – написать сценарий, который обработает нужную информацию, и в зависимости от ее типа, передаст ее той или иной программе.

Как активировать окно Windows программным путем

Что бы имитировать ввод данных с клавиатуры можно использовать функцию SendKeys, вот только есть одна беда, данные будут отправляться в слепую, по принципу, кто активен – тот и получил. Вот тут-то нам и пригодится функция AppActivate, которая позволяет активировать Windows окно, давайте посмотрим на ее синтаксис:

AppActivate(String | ProcessID) – Видим, что метод может принимать только один параметр, который, в свою очередь, может быть или строкой (String), или целым числом (ProcessID). В первом случае, мы передаем методу AppActivate имя диалогового окна того приложения, которое хотим сделать активным, во втором случае – идентификатор процесса заданной программы.

Вроде всё понятно, но есть один подводный камень. Если мы одновременно запустим несколько экземпляров одной программы, например, программу Блокнот, то мы увидим, что заголовки окон идентичны, в этом случае, метод AppActivate сделает активное окно того экземпляр, который первый в его внутреннем списке, грубо говоря, мы не сможем активировать окно ОС Windows длянужной нам копии. Но, зато, для активации Windows окна можно использовать идентификатор процесса – его можно узнать, запустив диспетчер задач и перейдя на вкладку процессы, имя процесса для программы _Блокнот_ – notepad.exe.

В последнем случае тоже есть подводный камень – нам придется запустить приложение и дополнительно рассмотреть его идентификатор. Но, так мучиться не нужно, есть прекрасная функция Exec, которая позволяет запустить исполняемый файл и получить его идентификатора.

активное окно приложения Windows

Хорошо, давайте посмотрим на следующий пример на языке vbscript:

'***********************************************************************************' Wscript_Shell_метод_AppActivate' Как активировать окно Windows приложения' AppActivate1.vbs'***********************************************************************************OptionExplicit dim WshShelldim note_1, note_2, note_3 ' Создаем ссылку на объект WScript_Shellset WshShell = WScript.CreateObject("WScript.Shell"'-----------------------------------------------------------------------' запускаем три копии _блокнота_'----------------------------------------------------------------------- ' первый экземплярset note_1 = WshShell.Exec("notepad.exe")' ждем 500 миллисекундWScript.Sleep 500' отправляем строкуWshShell.SendKeys ("первая копия"'----------------------------------------------------------------------- ' второй экземплярset note_2 = WshShell.Exec("notepad.exe")' ждем 500 миллисекундWScript.Sleep 500' отправляем строкуWshShell.SendKeys ("вторая копия"'----------------------------------------------------------------------- ' третий экземплярset note_3 = WshShell.Exec("notepad.exe")' ждем 500 миллисекундWScript.Sleep 500 With WshShell ' отправляем строку .SendKeys ("третья копия"'-----------------------------------------------------------------------  ' запускаем калькулятор .Exec("calc.exe"' пробуем активировать окно Windows по его имени' потерпим неудачу!!! .AppActivate ("Безымянный - Блокнот")  MsgBox "Какой экземпляр активирован?"  ' активное окно второй копии _блокнота_ .AppActivate (note_2.ProcessID)EndWithMsgBox "Какой экземпляр активирован?"

В данном примере, мы трижды запускаем программу Блокнот, причем, сразу после запуска, симулируем ввод текста, причем, для каждого экземпляра разный, это позволит нам видеть, действительно ли мы смогли активировать нужное окно Windows. Мы дважды используем метод _AppActivate_, сперва пробуем активировать окно программы по имени (тут нет никакой логики, так как все три окна имеют одинаковое имя), а потом пробуем активировать окно программы Windows для второй копии по его идентификатору.

Как активировать окно ОС Windows

А вот аналогичный пример, но уже на языке jscript:

//***********************************************************************************// Wscript_Shell_метод_AppActivate// Как активировать окно Windows приложения// AppActivate1.js//*********************************************************************************** var WshShell1;var note_1, note_2, note_3; // Создаем ссылку на объект WScript.ShellWshShell1 = WScript.CreateObject("WScript.Shell"); //-----------------------------------------------------------------------// запускаем три_экземпляра блокнота//----------------------------------------------------------------------- // первый экземплярnote_1 = WshShell1.Exec("notepad.exe");// ждем 500 миллисекундWScript.Sleep(500);// отправляем строкуWshShell1.SendKeys("экземпляр_первый"); //----------------------------------------------------------------------- // второй_экземплярnote_2 = WshShell1.Exec("notepad.exe");// ждем 500 миллисекундWScript.Sleep(500);// отправляем строкуWshShell1.SendKeys("экземпляр_второй"); //----------------------------------------------------------------------- // третий_экземплярnote_3 = WshShell1.Exec("notepad.exe");// ждем 500 миллисекундWScript.Sleep(500); with(WshShell1){// отправляем строку SendKeys ("экземпляр_третий");  //-----------------------------------------------------------------------  // запускаем калькулятор Exec("calc.exe");  // пробуем активировать окно ОС Windows по его имени// потерпим неудачу!!! AppActivate ("Безымянный - Блокнот");  WScript.Echo("Какой_экземпляр активирован?");  // активное окно второго_экземпляра _блокнота_ AppActivate (note_2.ProcessID)}WScript.Echo("Какой_экземпляр активирован?");

Скачать архив с примерами

И так, в этой статье мы рассмотрели объект Wscript_Shell сервера Windows Script Host, а именно: метод _AppActivate_, который позволяет активировать окно Windows приложения.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий