如何使这个WSH脚本工作? (详情请留言)

时间:2012-07-08 14:36:21

标签: windows vbscript network-programming windows-shell wsh

此脚本应该打开第一个找到的已启用或已连接的网络连接的Windows shell状态和属性对话框。但是,仅打开“属性”对话框。状态对话框的动词已经正确,即“Stat& us”。该脚本已经过测试,将在Windows XP Pro SP3 32位下使用。它通过连接的3G拨号和LAN Loopback进行了测试。两者都有同样的问题。

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

1 个答案:

答案 0 :(得分:1)

在Windows XP中有一个错误,其效果需要在Explorer进程中调用Status动词。由于WScript / CScript不是Explorer进程的子进程,因此尽管没有任何明显错误,但任何尝试调用状态动词都是徒劳的。此错误似乎已在以后的版本中修复,因为下面的脚本已经过测试并在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更改为下一个版本。