Здравствуйте, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим, как активировать окно Windows заданного приложения программным методом. Статья будет интересна как рядовым пользователям, так и начинающим программистам.
И так, давайте рассмотрим метод AppActivate объекта WScript_Shell, который позволяет сделать активное окно Window заданной программы. Давайте мысленно подумаем, где метод AppActivate может пригодиться: у нас работает три разных приложения, каждое из них находится в состоянии ожидания ввода данных. Задача – написать сценарий, который обработает нужную информацию, и в зависимости от ее типа, передаст ее той или иной программе.
Как активировать окно Windows программным путем
Что бы имитировать ввод данных с клавиатуры можно использовать функцию SendKeys, вот только есть одна беда, данные будут отправляться в слепую, по принципу, кто активен – тот и получил. Вот тут-то нам и пригодится функция AppActivate, которая позволяет активировать Windows окно, давайте посмотрим на ее синтаксис:
AppActivate(String | ProcessID) – Видим, что метод может принимать только один параметр, который, в свою очередь, может быть или строкой (String), или целым числом (ProcessID). В первом случае, мы передаем методу AppActivate имя диалогового окна того приложения, которое хотим сделать активным, во втором случае – идентификатор процесса заданной программы.
Вроде всё понятно, но есть один подводный камень. Если мы одновременно запустим несколько экземпляров одной программы, например, программу Блокнот, то мы увидим, что заголовки окон идентичны, в этом случае, метод AppActivate сделает активное окно того экземпляр, который первый в его внутреннем списке, грубо говоря, мы не сможем активировать окно ОС Windows длянужной нам копии. Но, зато, для активации Windows окна можно использовать идентификатор процесса – его можно узнать, запустив диспетчер задач и перейдя на вкладку процессы, имя процесса для программы _Блокнот_ – notepad.exe.
В последнем случае тоже есть подводный камень – нам придется запустить приложение и дополнительно рассмотреть его идентификатор. Но, так мучиться не нужно, есть прекрасная функция Exec, которая позволяет запустить исполняемый файл и получить его идентификатора.
Хорошо, давайте посмотрим на следующий пример на языке 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 для второй копии по его идентификатору.
А вот аналогичный пример, но уже на языке 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 приложения.