如何使这个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改变到下一个版本。

+0

我试过_Option 1_,但仍然是同样的问题。它从另一个Explorer进程启动时不会显示。就像你说的那个bug一样。有没有关于这个bug的详细讨论?我搜索了微软网站,但找不到任何。 对于_Option 2_,不幸的是,它仅适用于拨号网络。我还没有测试过,但我需要所有类型的连接/启用网络的状态。 至于_Option 3_,这不是我所需要的。抱歉。 但是,谢谢你让我知道那个bug,所以我至少知道这不是我身边的错误。 – Jay 2012-07-13 02:20:12