
コントロールパネルからネットワーク接続を開かせ、右クリックメニューにある「有効にする」or「無効にする」を選択するという自動化したものがあったのですが、
仕事で利用しているPCなのでコントロールパネルが開かず、マイネットワークの右クリックからプロパティか、ncpa.cplで開くしか手段がなく、利用できませんでした。
devconなどの他ツールを使わずにローカルエリア接続を有効にしたいのですが、何か方法はありませんでしょうか?
ちなみに、弄った後のものになりますが、下記方法だとマイネットワークのプロパティが前面に出るだけで、ネットワーク接続の画面にあるfolderitemが取得できなくなっています。
アクティブなウィンドウのfolderitemを取得するとか、右クリックのプロパティをDo itじゃなく、画面開いたときと同じような処理(スクリプト上で自動認識?)できるのであれば問題もなさそうなのですが・・・
それかncpl.cplでfolderitemを取得して・・・という方法もあるのかもしれません(調べましたが見つかりませんでしたorz)
Const ssfDESKTOP = 0
Const sConPaneName = "マイ ネットワーク"
Const sConnectionName = "ローカル エリア接続"
Const sConAAA = "プロパティ(&R)"
Const sDisableVerb = "無効にする(&B)"
Const sEnableVerb = "有効にする(&A)"
set shellApp = createobject("shell.application")
set oControlPanel = shellApp.Namespace(ssfDESKTOP)
set oNetConnections = nothing
set oNetC2onnections = nothing
for each folderitem in oControlPanel.items
if lcase(folderitem.name) = lcase(sConPaneName) then
set oNetConnections = folderitem': exit for
end if
'if folderitem.name = sConPaneName then
'set oNetC2onnections = folderitem.getfolder: exit for
'end if
next
for each verb in oNetConnections.verbs
if verb.name = sConAAA then
verb.Doit
WScript.Sleep 2000
end if
next
if oNetConnections is nothing then
wscript.quit
end if
Set WshShell = CreateObject("Wscript.Shell")
WshShell.AppActivate("ネットワーク接続")
set oNetC2onnections = folderitem.getfolder
set oLanConnection = nothing
for each folderitem in oNetC2onnections.items
msgbox folderitem.name
if lcase(folderitem.name) = lcase(sConnectionName) then
set oLanConnection = folderitem: exit for
WScript.Echo "aaaaaaa"
end if
next
if oLanConnection is nothing then
wscript.quit
end if
for each verb in oLanConnection.verbs
if verb.name = sDisableVerb then
verb.Doit
WScript.Sleep 2000
end if
next
お分かりになられる方いらっしゃいましたら、ご教授願います。
No.3ベストアンサー
- 回答日時:
No.2です。
もう少し洗練された方法に変えました。呼び出し方は以下の通りです。EnableLAN("ローカル エリア接続",True)
EnableLAN("ローカル エリア接続",False)
'***************************************************************
'* ネットワーク接続の接続/無効を制御する
'* 引 数:NetworkName 処理対象のネットワーク接続名
'* :Enable True = 接続 / False = 無効
'* 戻り値:結果 0 = 正常終了
'* 1 = ネットワーク接続が見つからない
'* 2 = 処理対象のネットワーク接続名が見つからない
'* 3 = タイムアウト
'***************************************************************
Function EnableLAN(ByVal NetworkName,ByVal Enable)
Const EnableVerb = "有効にする(&A)" '接続する場合のコマンド
Const DisableVerb = "無効にする(&B)" '切断する場合のコマンド
Const StatusPosition = 1 '状態を示す文字列の位置
Const StatusLength = 2 '状態を示す文字列の長さ
Const EnableWord = "接続" '接続時の状態
Const DisableWord = "無効" '無効時の状態
Const MaxWaitCount = 2000 '状態遷移の最大検査回数
Dim oShell 'シェルオブジェクト
Dim oNetwork 'ネットワーク接続
Dim oConnect '処理対象の接続
Dim iIndex 'ネットワーク接続内のインデックス
Dim iWork '戻り値/カウンタ
Dim sExpect '期待する状態
Dim sStatus '取得した状態(全文)
Set oShell = CreateObject("Shell.Application")
Set oNetwork = oShell.NameSpace("Shell:ConnectionsFolder")
If oNetwork Is Nothing Then
EnableLAN = 1
Exit Function
End If
iWork = oNetwork.Items.Count - 1
For iIndex = 0 To iWork
Set oConnect = oNetwork.Items.Item(iIndex)
If oConnect.Name = NetworkName Then Exit For
Next
If iIndex > iWork Then
EnableLAN = 2
Exit Function
End If
If Enable Then
oConnect.InvokeVerb EnableVerb
sExpect = EnableWord
Else
oConnect.InvokeVerb DisableVerb
sExpect = DisableWord
End If
For iWork = 1 To MaxWaitCount
Set oConnect = oNetwork.Items.Item(iIndex)
sStatus = oNetwork.GetDetailsOf(oConnect,2)
If Mid(sStatus,StatusPosition,StatusLength) = sExpect Then
EnableLAN = 0
Exit Function
End If
WScript.Sleep 1
Next
EnableLAN = 3
End Function
※たぶん、Windows2000でも変更なしで実行できると思います。
お礼遅れました。
実際に動作確認等終わり、運用でも利用の了解得ることができそうです。
ただ使えるだけでなく、参考になりました。
ありがとうございました。
No.2
- 回答日時:
大分、遅くなりましたが以下のScriptで実行できました。
環境は WindowsXP Professional SP3 です。
'**************************************************
'* "ローカル エリア接続"の接続/無効を切り替える
'* 引数 Enable True=接続 / False=無効
'* 戻り値 0=正常 / 1=ネットワークなし / 2=ローカル エリア接続なし / 3=タイムアウト
'**************************************************
Function EnableLAN(ByVal Enable)
Const ssfCONTROLS = 3
Const sColumnStatus = 2
Const sMaxCount = 2000
Const sConPaneName = "ネットワーク接続"
Const sConnectionName = "ローカル エリア接続"
Const sDisableVerb = "無効にする(&B)"
Const sEnableVerb = "有効にする(&A)"
Const sConnect = "接続"
Const sDisconnect = "無効"
Set ShellApp = CreateObject("Shell.Application")
Set oControlPanel = ShellApp.NameSpace(ssfCONTROLS)
Set oConPane = Nothing
Set oNetConnections = Nothing
For Each FolderItem In oControlPanel.Items
If FolderItem.Name = sConPaneName Then
Set oConPane = FolderItem
For Each Element In FolderItem.GetFolder.Items
If Element.Name = sConnectionName Then
Set oNetConnections = Element
Exit For
End If
Next
Exit For
End If
Next
If oConPane Is Nothing Then
EnableLAN = 1
Exit Function
End If
If oNetConnections Is Nothing Then
EnableLAN = 2
Exit Function
End If
Expected = ""
If Enable Then
oNetConnections.InvokeVerb sEnableVerb
Expected = sConnect
Else
oNetConnections.InvokeVerb sDisableVerb
Expected = sDisconnect
End If
TimeCount = 0
Do
Status = ""
For Each FolderItem In oControlPanel.Items
If FolderItem.Name = sConPaneName Then
For Each Element In FolderItem.GetFolder.Items
If Element.Name = sConnectionName Then
Status = FolderItem.GetFolder.GetDetailsOf _
(Element, sColumnStatus)
Exit For
End If
Next
Exit For
End If
Next
If Left(Status, 2) = Expected Then
EnableLAN = 0
Exit Do
End If
If TimeCount >= sMaxCount Then
EnableLAN = 3
Exit Do
End If
WScript.Sleep 1
TimeCount = TimeCount + 1
Loop
End Function
No.1
- 回答日時:
何でdevconはダメなんですか?
この回答への補足
実行形式を配布することができない環境であることと、devconだとデバイスIDで制御するかと思いますが、数千台のPCで、メーカーやOSも統一されているわけではないので、対応しきれないのが現状です。
ローカルエリア接続という点と、Win2kかXPの人だけ対応するので・・・
devconを使わなくてもマイネットワークの右クリックからプロパティか、ncpl.cplで開くことはできますので、コントロールパネルから判別するこの(↑)のやり方を流用できないかと考えてはいるのですが、判別させることは不可能なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ローカルネットワーク接続1とか...
-
Windows8.1で有線LANが正常に接...
-
コマンドプロンプトからネット...
-
Wi-Fiでネットワークに接続しよ...
-
SSIDが表示されません
-
突然インターネットに接続出来...
-
無線から有線への切り替えについて
-
ロカルエリア接続について
-
マザーボード修理交換後もイン...
-
サブネットマスク デフォルト...
-
Wi-FiがiPhoneには繋がるのにAn...
-
Wi-Fi中継機をつけました。中継...
-
ぷららなのですがホスト名がwww...
-
プリンターのネットワークボー...
-
無線LAN ルータ corega CG-WLR3...
-
TeraTermでログイン出来ない
-
Yahoo BB
-
AOLでのADSL複数台接続について
-
InternetExplorerではこのペー...
-
Temporary Internet Filesフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルネットワーク接続1とか...
-
無線から有線への切り替えについて
-
LAN接続を簡単にON,OF...
-
ネットワーク接続が未指定?
-
VBScript等でローカルエリア接...
-
グラボをつけるとネット接続で...
-
PCWi-Fiの設定方法がわからな...
-
イーサネットを削除してしまい...
-
不定期でネットワーク アダプタ...
-
K7Computing Lspの削除
-
TCP/IPのプロパティを一瞬で表...
-
コマンドプロンプトからネット...
-
ときどきインターネットに繋が...
-
Linuxで接続するとネットができ...
-
GW-US54GXSでワイヤレスネット...
-
SSIDが表示されません
-
データ通信量を測るソフトは?
-
IPアドレスを変更したら繋が...
-
マザーボード修理交換後もイン...
-
NTT西日本セキュリティ対策ツー...
おすすめ情報