使用VBscript自动closuresExcelpopup提示
我有一个应该通过Web查询访问远程监控服务器的Excel文件。 由于文件中的数据必须定期刷新和保存,所以我写了一个.vbs脚本来完成。 它工作正常,但由于服务器使用基本的身份validation安全性,无法closures,每次运行,Excel会popup一个popup式窗口“Windows安全”窗口要求input用户名和密码。 有一个“保存凭据”选项,但仍然需要用户点击“确定”继续,但系统要求没有用户交互。
search一下,我发现这个堆栈交换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
当窗口出现时,脚本会触发,甚至在当时我关注的任何窗口上注册一个“enter”按键,但是它不能关注popup窗口本身。 它在其他应用程序如“记事本”或“计算器”上工作得非常好。 这是不是特定于popup窗口? 我如何修改脚本以专注于“Excel”popup窗口? 还有其他更简单或更可靠的替代scheme吗?
谢谢
不幸的是, AppActivate
和SendKeys
在popup窗口和对话窗口上似乎并不总是如此。
有一个名为nircmd
的命令行工具,可以做你所需要的,但是。 无论如何,这是一个伟大的工具,你可能会发现它的各种其他用途。
将它下载并放入与VBScript相同的文件夹中。 或者,将其保存在System32/SysWow64
文件夹或%path%
环境variables中包含的任何其他文件夹中。 然后在您的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]
。 请注意,这里的引号加倍,因为它们在 VBSstring文字中。 对于最后一个参数,您需要指定您想要按下/单击的button的控件ID。 对于典型的对话框button( OK
, Cancel
, Yes
, No
等),您可以尝试使用nircmd
的预定义控件ID: ok
, cancel
, yes
, no
等。否则,您需要使用Spy ++之类的工具确定button的控制ID并传递。