2013-03-10 3 views
3

Я хочу перечислить все подключенные сетевые компьютеры в списке. Кто-нибудь знает как?Названия компьютеров в сети VB.Net

+0

Вы хотите, чтобы все компьютеры находились на странице «Компьютер -> Сеть» (Windows 7)? – Neolisk

+0

Да, точно .. Я не знаю, с чего начать, это моя проблема. Dan-o – Kraxed

ответ

9

Добавить ссылку на System.DirectoryServices.

Добавить;

Imports System.DirectoryServices 

Затем используйте;

Private Delegate Sub UpdateDelegate(ByVal s As String) 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    Dim t As New Threading.Thread(AddressOf GetNetworkComputers) 
    t.IsBackground = True 
    t.Start() 

End Sub 

Private Sub AddListBoxItem(ByVal s As String) 
    ListBox1.Items.Add(s) 
End Sub 

Private Sub GetNetworkComputers() 
    Dim alWorkGroups As New ArrayList 
    Dim de As New DirectoryEntry 

    de.Path = "WinNT:" 
    For Each d As DirectoryEntry In de.Children 
     If d.SchemaClassName = "Domain" Then alWorkGroups.Add(d.Name) 
     d.Dispose() 
    Next 

    For Each workgroup As String In alWorkGroups 

     de.Path = "WinNT://" & workgroup 
     For Each d As DirectoryEntry In de.Children 

      If d.SchemaClassName = "Computer" Then 

       Dim del As UpdateDelegate = AddressOf AddListBoxItem 
       Me.Invoke(del, d.Name) 

      End If 

      d.Dispose() 

     Next 
    Next 
End Sub 
+0

Что делать, если OP хочет все рабочие группы? В конце концов, «Сеть» показывает все. – Neolisk

+0

См. Мой модифицированный код ;-) – PGallagher

+2

Теперь вы на правильном пути. Upvoting ... – Neolisk

0

Я нарубил некоторый код, чтобы получить вам это, если его не совершенен должен быть достаточно близко (надеюсь, что это помогает) ...

Private Sub GetCurrentDevices() 

    Try 

     Dim ps As New System.Diagnostics.ProcessStartInfo("arp", "-a ") 

     ps.RedirectStandardOutput = True 
     ps.UseShellExecute = False 
     ps.WindowStyle = ProcessWindowStyle.Hidden 
     ps.CreateNoWindow = True 

     Dim sbResults As New StringBuilder 

     Using proc As New System.Diagnostics.Process() 

      proc.StartInfo = ps 
      proc.Start() 

      Dim sr As System.IO.StreamReader = proc.StandardOutput 

      While Not proc.HasExited 
       System.Threading.Thread.Sleep(100) 
      End While 

      sbResults.Append(sr.ReadToEnd) 

     End Using 

     Dim IP_Address, MAC_Address, Device_Name As String 

     Dim AllOutputLines() As String = sbResults.ToString.Split(vbCrLf) 
     sbResults = Nothing 

     For Each IndividualOutputLine As String In AllOutputLines 

      Windows.Forms.Application.DoEvents() 

      If IndividualOutputLine.Contains("dynamic") Then 

       Dim Entries() As String = IndividualOutputLine.Split(New String() {}, StringSplitOptions.RemoveEmptyEntries) 

       If Entries.Length = 3 Then 

        'Here is your info ... 

        IP_Address = Entries(0) 
        MAC_Address = Entries(1).ToUpper 
        Device_Name = GetComputerName(IP_Address) 


       End If 

      End If 

     Next 

      Catch ex As Exception 

     MsgBox(ex.ToString) 

    End Try 

End Sub 

Private Function GetComputerName(ByVal IP_Address As String) As String 

    Dim ReturnValue As String = cUnknown 

    Try 

     Dim myIPs As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(IP_Address) 
     ReturnValue = myIPs.HostName 
     myIPs = Nothing 

    Catch ex As Exception 
    End Try 

    If ReturnValue = IP_Address Then ReturnValue = cUnknown 

    Return ReturnValue 

End Function 
+0

Спасибо за ответ .. :) – Kraxed