2013-07-31 24 views
1

當您與VMware View桌面斷開連接時,我們有一個應用程序可將自身最小化到屏幕的左上角。所以我寫了下面的VBS來激活應用程序並使其最大化,工作正常。對於應用程序的多個實例,VBScript/w AppActivate

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

objShell.SendKeys "% r" 

objShell.SendKeys "% x" 

但是一些用戶有同一個應用程序打開的多個實例。所以我想知道如何讓這個腳本執行每個應用程序的實例?我假設我必須關閉PID,因爲每個實例都有自己的PID,但我不確定如何執行此操作。

謝謝, 布賴恩

回答

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」(它會執行還原)),它實際上會使兩者最大化。我的記事本測試很好。但我需要這樣做的實際應用程序需要首先恢復,然後是最大化命令。如果您只是執行最大化命令,由於某種原因它不起作用。 – Brian

+0

當{輸入}鍵!任何想法爲什麼你的作品爲一但不是其他,但刪除R命令將適用於兩者?它是否計時?也許某種等待語句在循環之前? – Brian

+0

可能。試試'WScript.Sleep(100)' – Tomalak

相關問題