我有一个excel文件,它应该通过Web查询访问远程监控服务器。由于必须定期刷新和保存文件中的数据,因此我编写了一个.vbs脚本来执行此操作。它工作正常,但由于服务器使用基本的身份验证安全性,无法关闭,每次运行时,excel会弹出一个弹出窗口" Windows安全"窗口要求用户名和密码。可以选择"保存凭据",但仍然需要用户点击" OK"继续,但系统要求没有用户交互。
谷歌搜索我发现this stack exchange post和其他类似的方法,所以我修改了脚本以满足我的需求:
Set wshShell = CreateObject("WScript.Shell")
Do
ret = wshShell.AppActivate("Windows Security")
If ret = True Then
wshShell.SendKeys "{enter}"
Exit Do
End If
WScript.Sleep 500
Loop
当窗口出现时脚本会触发,甚至注册"输入"在我当时关注的任何窗口上按下按键,但它无法专注于弹出窗口本身。它在其他应用程序上运行得非常好,例如" Notepad"或"计算器"。这是以某种方式特定于弹出窗口吗?如何修改脚本以专注于" Excel"弹出?还有其他更简单或更可靠的替代方案吗?
由于
答案 0 :(得分:1)
不幸的是,AppActivate
和SendKeys
似乎并不总是在弹出窗口和对话框窗口上运行良好。
但是,有一个名为nircmd
的命令行实用程序可以执行您所需的操作。无论如何,这是一个很好的工具,你可能会发现它的各种其他用途。
下载并将其放在与VBScript相同的文件夹中。或者,将其保存在System32/SysWow64
文件夹或%path%
环境变量中包含的任何其他文件夹中。然后在VBScript中包含以下语句:
With CreateObject("WScript.Shell")
.Run "nircmd dlg """" ""Windows Security"" click ok"
End With
dlg
命令具有以下参数:
dlg [Process Name] [Window Title] [Action] [Parameters]
我们会将[Process Name]
留空(""""
)并提供[Window Title]
。请注意,这里的引号加倍,因为它们是在 VBS字符串文字中。对于最后一个参数,您需要指定要按/单击的按钮的控件ID。对于典型的对话框按钮(OK
,Cancel
,Yes
,No
等),您可以尝试使用nircmd
的预定义控件ID:{{1 }},ok
,cancel
,yes
等。否则,您需要使用像Spy ++这样的工具来确定按钮的控件ID并将其传递给它。