如何使这个WSH脚本工作? (详细信息)
该脚本应该打开已启用或连接的第一个找到的网络连接的Windows外壳程序状态和属性对话框。但是,只打开属性对话框。状态对话框的动词已经是正确的,即“Stat & us”。该脚本已经过测试,将在Windows XP Pro SP3 32位下使用。它已通过连接的3G拨号和LAN环回进行测试。两者都有同样的问题。如何使这个WSH脚本工作? (详细信息)
dim a,b,c
set a=createobject("shell.application")
set b=a.namespace(0).parsename("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").getfolder
for i=0 to (b.items.count-1)
set c=b.items.item(i)
for j=0 to (c.verbs.count-1)
'only process connected/enabled
if (lcase(c.verbs.item(j)) = "disc&onnect") or (lcase(c.verbs.item(j)) = "disa&ble") then
'open status and properties dialogs
c.invokeverb("Stat&us") 'this doesn't work
c.invokeverb("P&roperties") 'this one works
msgbox "Press OK to close all and exit"
wscript.quit
end if
next
next
在Windows XP中有一个错误,其效果需要在Explorer进程中调用Status谓词。由于WScript/CScript不是资源管理器进程的子节点,任何尝试调用状态动词的尝试都是徒劳的,尽管没有任何明显的错误。由于以下脚本已在Vista x64中进行测试和工作,因此该错误在更高版本中似乎已得到修复。
Set objShell = CreateObject("Shell.Application")
Set objShellFolder = objShell.Namespace(0).ParseName("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").GetFolder
For Each objShellFolderItem in objShellFolder.Items
Set colShellFolderItemVerbs = objShellFolderItem.Verbs
For Each objShellFolderItemVerb in colShellFolderItemVerbs
strVerb = objShellFolderItemVerb.Name
If (strVerb = "C&onnect/Disconnect") Then
objShellFolderItem.InvokeVerb("Properties")
objShellFolderItem.InvokeVerb("Status")
MsgBox "Press OK to close and exit"
WScript.Quit(0)
End If
Next
Next
选项1
这是否意味着你的运气吗?不是完全。我有两个不同的建议给你。第一个使用一点小技巧。状态是任何网络连接处于连接状态时的默认操作。打开您的网络连接,右键单击想要监视的连接并选择创建快捷方式。您可以在任何地方放置快捷方式。默认情况下,它将在您的桌面上被命名为“无线网络连接 - Shortcut.lnk”。在命令行中键入或通过脚本中的Run或Exec方法进行输入,将完成您所需的操作。我试图通过脚本来完成这些工作,但遇到了问题tryint来自动创建快捷方式动词。
选项2
第二个选择是也有点一种解决方法,但如果你的3G连接使用拨号网络可能工作。命令行rundll32.exe rnaui.dll,RnaDial {name of connection to establish}
将打开要连接的对话框,但是,如果已连接,则会打开连接的“状态”对话框。然后,您可以尝试这样的脚本:
Set objShell = CreateObject("Shell.Application")
Set objShellFolder = objShell.Namespace(0).ParseName("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}").GetFolder
For Each objShellFolderItem in objShellFolder.Items
strConnection = objShellFolderItem.Name
strCommandLine = "rundll32.exe rnaui.dll,RnaDial " & Chr(34) & strConnection & Chr(34)
Set colShellFolderItemVerbs = objShellFolderItem.Verbs
For Each objShellFolderItemVerb in colShellFolderItemVerbs
strVerb = objShellFolderItemVerb.Name
If (strVerb = "C&onnect/Disconnect") Then
objShellFolderItem.InvokeVerb("Properties")
CreateObject("WScript.Shell").Run strCommandLine
MsgBox "Press OK to close and exit"
WScript.Quit(0)
End If
Next
Next
选项3
最后一个选项是使用WMI来显示你的网络连接的信息。这是一种更传统的脚本方法。
无论如何,我希望这可以帮上忙。不要忘记根据需要更改动词。他们确实从一个版本的Windows改变到下一个版本。
我试过_Option 1_,但仍然是同样的问题。它从另一个Explorer进程启动时不会显示。就像你说的那个bug一样。有没有关于这个bug的详细讨论?我搜索了微软网站,但找不到任何。 对于_Option 2_,不幸的是,它仅适用于拨号网络。我还没有测试过,但我需要所有类型的连接/启用网络的状态。 至于_Option 3_,这不是我所需要的。抱歉。 但是,谢谢你让我知道那个bug,所以我至少知道这不是我身边的错误。 – Jay 2012-07-13 02:20:12