使用 VBscript 自动关闭 excel 弹出提示
Automatically closing an excel popup prompt using VBscript
我有一个 excel 文件,它应该通过网络查询访问远程监控服务器。由于文件中的数据必须定期刷新和保存,我编写了一个 .vbs 脚本来完成它。它工作正常,但由于服务器使用无法关闭的基本身份验证安全性,因此每次运行时,excel 都会抛出一个弹出窗口 "Windows Security" window 询问用户名和密码。 "Save credentials" 有一个选项,但它仍然需要用户单击 "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
脚本会在 window 出现时触发,甚至会在我当时关注的任何 window 上注册一个 "enter" 按键,但它无法关注弹出窗口 window 本身。它在 "Notepad" 或 "calculator" 等其他应用程序上工作得很好。这是否特定于弹出窗口 windows?如何修改脚本以专注于 "Excel" 弹出窗口?还有其他更简单或更可靠的替代方案吗?
谢谢
不幸的是,AppActivate
和 SendKeys
在弹出窗口和对话框上似乎并不总能很好地工作 windows。
不过,有一个名为 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]
。请注意,这里的引号是双引号,因为它们在 within 一个 VBS 字符串文字中。对于最后一个参数,您需要指定要push/click 的按钮的控件ID。对于典型的对话框按钮(OK
、Cancel
、Yes
、No
等),您可以尝试使用 nircmd
的预定义控件 ID:ok
、cancel
、yes
、no
等。否则,您需要使用 Spy++ 等工具来确定按钮的控件 ID 并将其传递。
我有一个 excel 文件,它应该通过网络查询访问远程监控服务器。由于文件中的数据必须定期刷新和保存,我编写了一个 .vbs 脚本来完成它。它工作正常,但由于服务器使用无法关闭的基本身份验证安全性,因此每次运行时,excel 都会抛出一个弹出窗口 "Windows Security" window 询问用户名和密码。 "Save credentials" 有一个选项,但它仍然需要用户单击 "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
脚本会在 window 出现时触发,甚至会在我当时关注的任何 window 上注册一个 "enter" 按键,但它无法关注弹出窗口 window 本身。它在 "Notepad" 或 "calculator" 等其他应用程序上工作得很好。这是否特定于弹出窗口 windows?如何修改脚本以专注于 "Excel" 弹出窗口?还有其他更简单或更可靠的替代方案吗?
谢谢
不幸的是,AppActivate
和 SendKeys
在弹出窗口和对话框上似乎并不总能很好地工作 windows。
不过,有一个名为 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]
。请注意,这里的引号是双引号,因为它们在 within 一个 VBS 字符串文字中。对于最后一个参数,您需要指定要push/click 的按钮的控件ID。对于典型的对话框按钮(OK
、Cancel
、Yes
、No
等),您可以尝试使用 nircmd
的预定义控件 ID:ok
、cancel
、yes
、no
等。否则,您需要使用 Spy++ 等工具来确定按钮的控件 ID 并将其传递。