السلام عليكم ورحمة الله
تعديل :- الكود شغال شكرا لكم
بارك الله فيكم وشكرا
تعديل :- الكود شغال شكرا لكم
كود :
Public Const SV_TYPE_ALL As Integer = &HFFFFFFFF
Public Structure SERVER_INFO_101
Public Platform_ID As Integer
<MarshalAsAttribute(UnmanagedType.LPWStr)> Public Name As String
Public Version_Major As Integer
Public Version_Minor As Integer
Public Type As Integer
<MarshalAsAttribute(UnmanagedType.LPWStr)> Public Comment As String
End Structure
Public Declare Unicode Function NetServerEnum Lib "Netapi32.dll" (
ByVal Servername As Integer, ByVal Level As Integer, ByRef Buffer As IntPtr, ByVal PrefMaxLen As Integer,
ByRef EntriesRead As Integer, ByRef TotalEntries As Integer, ByVal ServerType As Integer,
ByVal DomainName As String, ByRef ResumeHandle As Integer) As Integer
Public Declare Function NetApiBufferFree Lib "Netapi32.dll" (ByVal lpBuffer As IntPtr) As Integer
Public Shared Function GetNetworkComputers(Optional ByVal DomainName As String = Nothing) As DataTable
Dim ServerInfo As SERVER_INFO_101
Dim MaxLenPref As Integer = -1
Dim level As Integer = 101
Dim ResumeHandle As Integer = 0
Dim ret, EntriesRead, TotalEntries As Integer
Dim BufPtr As IntPtr
Dim dt As New DataTable
dt.Columns.Add("IPs")
dt.Columns.Add("PCs")
Try
ret = NetServerEnum(0, level, BufPtr, MaxLenPref, EntriesRead, TotalEntries, SV_TYPE_ALL, DomainName, ResumeHandle)
If ret = 0 Then
For i As Integer = 0 To EntriesRead - 1
#Disable Warning BC42109 ' Variable is used before it has been assigned a value
ServerInfo = Marshal.PtrToStructure(IncrementPointer(BufPtr, i * Marshal.SizeOf([structure]:=ServerInfo)), GetType(SERVER_INFO_101))
#Enable Warning BC42109 ' Variable is used before it has been assigned a value
Dim Rw As DataRow = dt.NewRow
Dim IPstring As String = ""
For Each ip As Net.IPAddress In Net.Dns.GetHostAddresses(ServerInfo.Name)
'Debug.WriteLine(ip.ToString)
If Not ip.IsIPv6LinkLocal Then
IPstring = IPstring & ip.ToString
End If
Next
Rw(0) = IPstring.ToString
Rw(1) = ServerInfo.Name.ToString
dt.Rows.Add(Rw)
Next
End If
NetApiBufferFree(BufPtr)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return dt
End Function
Private Shared Function IncrementPointer(ByVal ptr As IntPtr, ByVal i As Integer) As IntPtr
If IntPtr.Size = 4 Then
Return New IntPtr(ptr.ToInt32 + i)
End If
If IntPtr.Size = 8 Then
Return New IntPtr(ptr.ToInt64 + i)
End If
End Function
Private Sub btnGet_Click(sender As Object, e As EventArgs) Handles btnGet.Click
'LstBx.DataSource = GetNetworkComputers()
LstBx.Items.Clear()
Dim dtt As DataTable = GetNetworkComputers()
If dtt.Rows.Count > 0 Then
For i As Integer = 0 To dtt.Rows.Count - 1
LstBx.Items.Add(dtt.Rows(i)(0).ToString & ":" & dtt.Rows(i)(1).ToString)
Next
End If
dtt.Dispose()
End Sub
بارك الله فيكم وشكرا