1

このスクリプトは、有効または接続されている最初に見つかったネットワーク接続の Windows シェルの [ステータス] ダイアログと [プロパティ] ダイアログの両方を開くことになっています。ただし、[プロパティ] ダイアログのみが開かれます。ステータス ダイアログの動詞はすでに正しく、"Stat&us" です。スクリプトはテスト済みで、Windows XP Pro SP3 32 ビットで使用されます。接続された 3G ダイヤルアップと LAN ループバックでテストされました。どちらも同じ問題を抱えています。

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 には、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

それはあなたが運が悪いということですか?完全ではありません。2 つの異なる提案があります。最初は少しトリックを使用します。ステータスは、ネットワーク接続が接続状態にあるときのデフォルト アクションです。ネットワーク接続を開き、監視する接続を右クリックして、[ショートカットの作成] を選択します。ショートカットは好きな場所に配置できます。デフォルトでは、デスクトップに「ワイヤレス ネットワーク接続 - Shortcut.lnk」のような名前が付けられます。コマンド ラインで入力するか、スクリプトの Run または Exec メソッドを介して入力すると、必要なことが正確に実行されます。スクリプトを使用してこれをすべて試してみましたが、ショートカットの作成動詞を自動化しようとすると問題が発生しました。

オプション 2

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 に答える