1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| function NetServerEnum( const servername : PWideChar; const level : DWORD; const bufptr : Pointer; const prefmaxlen : DWORD; const entriesread : PDWORD; const totalentries : PDWORD; const servertype : DWORD; const domain : PWideChar; const resume_handle : PDWORD ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
function NetApiBufferFree( const Buffer : Pointer ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
procedure Tlogin.ScanServers; const MAX_PREFERRED_LENGTH = DWORD(-1); NERR_Success = 0; SV_TYPE_ALL = $FFFFFFFF; SV_TYPE_WORKSTATION = $00000001; SV_TYPE_SERVER = $00000002; SV_TYPE_SQLSERVER = $00000004; SV_TYPE_DOMAIN_CTRL = $00000008; SV_TYPE_DOMAIN_BAKCTRL = $00000010; SV_TYPE_TIMESOURCE = $00000020; SV_TYPE_AFP = $00000040; SV_TYPE_NOVELL = $00000080; SV_TYPE_DOMAIN_MEMBER = $00000100; SV_TYPE_LOCAL_LIST_ONLY = $40000000; SV_TYPE_PRINT = $00000200; SV_TYPE_DIALIN = $00000400; SV_TYPE_XENIX_SERVER = $00000800; SV_TYPE_MFPN = $00004000; SV_TYPE_NT = $00001000; SV_TYPE_WFW = $00002000; SV_TYPE_SERVER_NT = $00008000; SV_TYPE_POTENTIAL_BROWSER= $00010000; SV_TYPE_BACKUP_BROWSER = $00020000; SV_TYPE_MASTER_BROWSER = $00040000; SV_TYPE_DOMAIN_MASTER = $00080000; SV_TYPE_DOMAIN_ENUM = $80000000; SV_TYPE_WINDOWS = $00400000; type PSERVER_INFO_101 = ^SERVER_INFO_101; SERVER_INFO_101 = record dwPlatformId : integer; lpszServerName: LPWSTR; dwVersionMajor: integer; dwVersionMinor: integer; dwType: integer; lpszComment: LPWSTR; end; var pBuffer : PSERVER_INFO_101; pWork : PSERVER_INFO_101; dwEntriesRead : DWORD; dwTotalEntries : DWORD; i : integer; dwResult : NET_API_STATUS;
begin Server.Items.Clear; dwResult := NetServerEnum(nil,101,@pBuffer,MAX_PREFERRED_LENGTH, @dwEntriesRead,@dwTotalEntries,SV_TYPE_SQLSERVER,nil,0); if dwResult = NERR_SUCCESS then begin try pWork := pBuffer; for i := 1 to dwEntriesRead do begin Server.Items.Add(pWork.lpszServerName); inc(pWork); end; finally NetApiBufferFree(pBuffer); end; end; end; |