昔、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
お礼
なんと!サンプルまで頂きまして、ありがとうございます! 頂いたサンプルに少しコードを足して、 望み通りの結果が得れました! ありがとうございました!
補足
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