WshShell.AppActivate似乎不适用于简单的vbs脚本

use*_*756 10 windows vbscript

总vbs脚本newb在这里.我正在尝试自动关闭某个打开的窗口,即一个名为HostsMan的程序.这是在Windows 8.1 Pro 64位上,这是我的脚本目前的样子:

Set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate "HostsMan"
WshShell.SendKeys "%{F4}"
Run Code Online (Sandbox Code Playgroud)

第二行似乎不起作用.我知道第3行有效,因为它激活了Windows关闭菜单.有什么我想念的吗?

更新/更多信息:手动输入alt-F4会关闭它,所以我知道这应该有效.我还用其他打开的窗口测试了这个脚本,它们关闭得很好.此外,HostsMan以管理员权限打开,因此我尝试将脚本作为具有最高权限的任务集运行,以查看是否会执行此操作,但仍然没有.但这适用于使用Admin权限运行的其他打开的窗口.令人沮丧!

Bon*_*ond 10

我也试过了,但是无法让它发挥作用.关于窗口类必须有一些东西,也许,哪里AppActivate看不到它作为顶级窗口?

无论如何,AppActivate还允许您传递进程ID而不是窗口标题.当我安装HostsMan时,进程名称是hm.exe,所以我将在下面的示例中使用它.

Set Processes = GetObject("winmgmts:").InstancesOf("Win32_Process")

For Each Process In Processes
    If StrComp(Process.Name, "hm.exe", vbTextCompare) = 0 Then

        ' Activate the window using its process ID...
        With CreateObject("WScript.Shell")
            .AppActivate Process.ProcessId
            .SendKeys "%{F4}"
        End With

        ' We found our process. No more iteration required...
        Exit For

    End If
Next
Run Code Online (Sandbox Code Playgroud)