Объект 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
'***********************************************************************************
Option Explicit
 
dim WshShell
dim note_1, note_2, note_3
 
' Создаем ссылку на объект WScript_Shell
set 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)
End With
MsgBox "Какой экземпляр активирован?"

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

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

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

//***********************************************************************************
// Wscript_Shell_метод_AppActivate
// Как активировать окно Windows приложения
// AppActivate1.js
//***********************************************************************************
 
var WshShell1;
var note_1, note_2, note_3;
 
// Создаем ссылку на объект WScript.Shell
WshShell1 = 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 приложения.

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