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/