- ベストアンサー
LAN内に設置されているコンピュータ名を
LAN内に設置されているコンピュータ名を VB2005で作成したアプリ内で表示する必要があります。 コマンドプロンプトの [NET VIEW]コマンドと同等の処理を行うとすれば どのようにコーディングしていけば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
昔、VBScriptでやってたヤツを編集し直してみました。 '**** ネットワークに接続しているマシン名を取得 **** Function GetNodes() As List(Of String) Const ssfNETWORK As Integer = &H12 Dim A, B, C Dim R As List(Of String) = New List(Of String) GetNodes = R C = GetMyWorkGroup() A = CreateObject("Shell.Application") A = FindFolder("ネットワーク全体", A.Namespace(ssfNETWORK)) If A Is Nothing Then Exit Function A = FindFolder("Microsoft Windows Network", A.GetFolder()) If A Is Nothing Then Exit Function '★もし、ワークグループに関わらず取得する場合は以下を工夫する A = FindFolder(C, A.GetFolder()) If A Is Nothing Then Exit Sub A = A.GetFolder().Items() For Each B In A R.Add(B.Name) Next GetNodes = R End Function '**** フォルダ集団から指定の名前を持つオブジェクトを返す *** Function FindFolder(ByVal Name, ByVal Folder) Dim A FindFolder = Nothing Name = Name.ToUpper() For Each A In Folder.Items() If A.Name.ToUpper = Name Then FindFolder = A Exit For End If Next End Function '**** 自身のワークグループを取得 **** Function GetMyWorkGroup() As String Dim A, B GetMyWorkGroup = "" A = CreateObject("WbemScripting.SWbemLocator") A = A.ConnectServer() A = A.ExecQuery("SELECT Domain FROM Win32_ComputerSystem") For Each B In A GetMyWorkGroup = B.Domain Next End Function
その他の回答 (1)
- SaKaKashi
- ベストアンサー率24% (755/3136)
NET VIEWをcmd.exeで実行して結果を%TEMP%に書き出す。
お礼
質問を書きながら、仰るとおりの事で問題ない気がしてました。 しかしながら、もう少し便利なロジックがあるかもと期待して質問して見ました。 ありがとうございました!
お礼
なんと!サンプルまで頂きまして、ありがとうございます! 頂いたサンプルに少しコードを足して、 望み通りの結果が得れました! ありがとうございました!
補足
VB2005で新規プロジェクトを作成して、フォームにボタンとリストボックスを貼り付けて・・・ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sList As List(Of String) Dim i As Integer = 0 sList = GetNodes() ListBox1.Items.Clear() For i = 0 To sList.Count - 1 ListBox1.Items.Add(sList(i)) Next End Sub '**** ネットワークに接続しているマシン名を取得 **** Function GetNodes() As List(Of String) Const ssfNETWORK As Integer = &H12 Dim A, B, C Dim R As List(Of String) = New List(Of String) GetNodes = R C = GetMyWorkGroup() A = CreateObject("Shell.Application") A = FindFolder("ネットワーク全体", A.Namespace(ssfNETWORK)) If A Is Nothing Then Exit Function A = FindFolder("Microsoft Windows Network", A.GetFolder()) If A Is Nothing Then Exit Function '★もし、ワークグループに関わらず取得する場合は以下を工夫する A = FindFolder(C, A.GetFolder()) If A Is Nothing Then Exit Function A = A.GetFolder().Items() For Each B In A R.Add(B.Name) Next GetNodes = R End Function '**** フォルダ集団から指定の名前を持つオブジェクトを返す *** Function FindFolder(ByVal Name, ByVal Folder) Dim A FindFolder = Nothing Name = Name.ToUpper() For Each A In Folder.Items() If A.Name.ToUpper = Name Then FindFolder = A Exit For End If Next End Function '**** 自身のワークグループを取得 **** Function GetMyWorkGroup() As String Dim A, B GetMyWorkGroup = "" A = CreateObject("WbemScripting.SWbemLocator") A = A.ConnectServer() A = A.ExecQuery("SELECT Domain FROM Win32_ComputerSystem") For Each B In A GetMyWorkGroup = B.Domain Next End Function End Class