2013-07-31 2 views
1

У нас есть приложение, которое минимизирует себя в верхнем левом углу экрана при отключении от вашего рабочего стола VMware View. Поэтому я написал следующую VBS, которая активирует приложение и максимизирует его, что отлично работает.VBScript/w AppActivate для нескольких экземпляров приложения

Set objShell = CreateObject("WScript.Shell") 
objShell.AppActivate "notepad" 

objShell.SendKeys "% r" 

objShell.SendKeys "% x" 

Но некоторые пользователи имеют несколько экземпляров одного и того же приложения. Так что мне интересно, как заставить этот скрипт выполнять для каждого экземпляра приложения? Я предполагаю, что мне нужно будет отключить PID, поскольку каждый экземпляр будет иметь свой собственный PID, но я не уверен, как это сделать.

Спасибо, Brian

ответ

2

AppActivate принимает PID. Вы можете использовать WMI для извлечения PID всех процессов с этим именем.

Option Explicit 

Dim Shell, WMI, wql, process 

Set Shell = CreateObject("WScript.Shell") 
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 

wql = "SELECT ProcessId FROM Win32_Process WHERE Name = 'notepad.exe'" 

For Each process In WMI.ExecQuery(wql) 
    Shell.AppActivate process.ProcessId 
    Shell.SendKeys "% r" 
    Shell.SendKeys "% x" 
Next 

См. Также the Win32_Process class documentation.

+0

Интересный, он работает, но только для одного из примеров Блокнота. НО, если я замечаю вторую последнюю команду (Shell.SendKeys "% r" (которая выполняет восстановление)), она фактически максимизирует оба. Это хорошо для моего теста в блокноте. Но фактическое приложение, которое мне нужно для этого, требует сначала Восстановить, затем команду Maximize. Если вы просто выполняете команду Maximize, это не работает по какой-то причине. – Brian

+0

Dang {enter} ключ! Любые идеи, почему ваши работы работают для одного, а не для другого, но удаление команды R будет работать для обоих? Это время? Может быть, какое-то выражение ожидания перед этим петли ??? – Brian

+0

Может быть. Попробуйте 'WScript.Sleep (100)' – Tomalak

Смежные вопросы