⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Printable View
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Hmm I'm not sure how windows treats networked computers but you can probably check around in the registry. I found a spot in there under HKEY_LOCAL_MACHINE\System\MountedDevices that had my regular drives pluse a few \??\Volume-{volumekey} listed.
I know that these are mounted remote drives or folders that I have shared. Not sure if there is a place in there that lists networked computers that dont have sharing enabled. But its a start =p
This will load all domains and respective computers regardless of sharing.
Enjoy :DVB Code:
'IN A MODULE Option Explicit Public Type SERVER_INFO_100 sv100_platform_id As Long sv100_name As Long End Type Public Const SV_TYPE_DOMAIN_ENUM As Long = &H80000000 Public Const SV_TYPE_ALL As Long = &HFFFFFFFF Public Const MAX_PREFERRED_LENGTH As Long = -1 Public Const NERR_SUCCESS As Long = 0& Public Const ERROR_REQ_NOT_ACCEP = 71& Public Const ERROR_MORE_DATA As Long = 234& Public Const NERR_BASE = 2100 Public Const NERR_InvalidComputer = (NERR_BASE + 251) Public Declare Function NetServerEnum Lib "netapi32" (ByVal servername As Long, ByVal level As Long, buf As Any, _ ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, ByVal servertype As Long, ByVal domain As Long, _ resume_handle As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pTo As Any, uFrom As Any, ByVal lSize As Long) Public Declare Function NetApiBufferFree Lib "netapi32" (ByVal Buffer As Long) As Long Public Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long Public Function GetServers(sDomain As String, sType As Long) As String() Dim bufptr As Long Dim dwEntriesread As Long Dim dwTotalentries As Long Dim dwResumehandle As Long Dim se100 As SERVER_INFO_100 Dim success As Long Dim nStructSize As Long Dim Cnt As Long nStructSize = LenB(se100) success = NetServerEnum(0&, 100, bufptr, MAX_PREFERRED_LENGTH, dwEntriesread, dwTotalentries, sType, StrPtr(sDomain), dwResumehandle) 'success = 71 'NO ACTIVE 'DOMAIN' If success = NERR_SUCCESS And success <> ERROR_MORE_DATA Then Dim compNames() As String ReDim compNames(dwEntriesread) For Cnt = 0 To dwEntriesread - 1 CopyMemory se100, ByVal bufptr + (nStructSize * Cnt), nStructSize compNames(Cnt) = GetPointerToByteStringW(se100.sv100_name) DoEvents Next End If Call NetApiBufferFree(bufptr) GetServers = compNames End Function Public Function GetPointerToByteStringW(ByVal dwData As Long) As String Dim tmp() As Byte Dim tmplen As Long If dwData <> 0 Then tmplen = lstrlenW(dwData) * 2 If tmplen <> 0 Then ReDim tmp(0 To (tmplen - 1)) As Byte CopyMemory tmp(0), ByVal dwData, tmplen GetPointerToByteStringW = tmp End If End If End Function 'BEHIND A FORM WITH TWO COMBOS (cboDomain AND cboComputer) Private Sub Form_Load() Dim compNames() As String Dim x As Integer 'SETUP THE DOMAIN COMBO BOX compNames = GetServers(vbNullString, SV_TYPE_DOMAIN_ENUM) For x = LBound(compNames) To UBound(compNames) - 1 cboDomain.AddItem compNames(x) Next cboDomain.ListIndex = 0 End Sub Private Sub cboDomain_Click() 'NEED TO CLEAR CBOCOMPUTER AND RELOAD WITH COMPUTERS IN THE NEWLY SELECTED DOMAIN 'SETUP THE COMPUTER COMBO BOX On Error GoTo No_Bugs Dim compNames() As String Dim x As Integer cboComputer.Clear x = 0 compNames = GetServers(cboDomain.Text, SV_TYPE_ALL) If UBound(compNames) > 0 Then For x = LBound(compNames) To UBound(compNames) - 1 cboComputer.AddItem compNames(x) Next cboComputer.ListIndex = 0 End If Exit Sub No_Bugs: If Err.Number = "9" Then cboDomain.RemoveItem (cboDomain.ListIndex) cboDomain.ListIndex = 0 compNames = GetServers(cboDomain.Text, SV_TYPE_ALL) Resume Else MsgBox Err.Number & " - " & Err.Description, vbOKOnly + vbExclamation, App.ProductName End If End Sub
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Are you running a domain or workgroup?
If you are running a domain, it will find all computers that are on-line.
If you are running a workgroup then I'm not sure, since I am
running a domain I can't test it.