windows - WshShell.AppActivate 似乎在简单的 vbs 脚本中不起作用

标签 windows vbscript

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

Set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate "HostsMan"
WshShell.SendKeys "%{F4}"

第二行好像不行。我知道第 3 行有效,因为它激活了 Windows 关机菜单。有什么我想念的吗?

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

最佳答案

我也试过了,还是不行。窗口类一定有问题,也许 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

关于windows - WshShell.AppActivate 似乎在简单的 vbs 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165377/

相关文章:

windows - 需要关机脚本 : Check date if Wednesday run batch script

windows - 在 Windows XP 上覆盖本地主机

.net - Windows .Net应用程序崩溃看门狗

windows - 无法获取 Windows Internet Explorer 主窗口的句柄

c++ - 在哪里可以找到 Windows 进程中已卸载模块的列表?

SQL/ASP - 预期为 : "- But it' s there?

xml - 尝试在 VBScript 中使用 XPATH 解析 XML 时获取空值

c# - 完全关闭辅助窗口

Vbscript 修剪函数

VBScript 在不启用兼容模式的情况下将 DOC 转换为 DOCX