2012-07-08 68 views
1

該腳本應該打開已啓用或連接的第一個找到的網絡連接的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 

回答

1

在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