VBScript / w AppActivate用于应用程序的多个实例

时间:2013-07-31 20:02:09

标签: vbscript

我们有一个应用程序,当您从VMware View桌面断开连接时,它将自身最小化到屏幕的左上角。所以我编写了以下VBS,它将激活应用程序并使其最大化,并且工作正常。

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

objShell.SendKeys "% r"

objShell.SendKeys "% x"

但是有些用户打开了同一个应用的多个实例。所以我想知道如何让这个脚本为应用程序的每个实例执行?我假设我必须关闭PID,因为每个实例都有自己的PID,但我不确定如何做到这一点。

谢谢, 布赖恩

1 个答案:

答案 0 :(得分: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