1

该脚本应该打开第一个找到的启用或连接的网络连接的 Windows shell 状态和属性对话框。但是,仅打开“属性”对话框。状态对话框的动词已经正确,即“Stat&us”。该脚本已经过测试,将在 Windows XP Pro SP3 32-Bit 下使用。它通过连接的 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
4

1 回答 1

1

在 Windows XP 中存在一个错误,其影响需要从资源管理器进程中调用 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 方法键入该命令将完全满足您的需要。我尝试通过脚本来完成这一切,但在尝试自动化创建快捷方式动词时遇到了问题。

选项 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 更改为下一个版本。

于 2012-07-10T06:56:35.347 回答