Espero te sirva esta pieza de Codigo
procedure TForm1.Button1Click(Sender: TObject);
begin
GetSQLServers(Memo1.Lines);
end;
const
SV_TYPE_SQLSERVER = $00000004;
type
_SERVER_INFO_100 = packed record
sv100_platform_id:DWORD;
sv100_name: PWideChar;
end;
SERVER_INFO_100 = _SERVER_INFO_100;
TServerInfo100 = SERVER_INFO_100;
LPSERVER_INFO_100 = ^SERVER_INFO_100;
PServerInfo100 = ^TServerInfo100;
TArrServerInfo100 = Array [0..Pred(MaxWord)] of TServerInfo100;
PArrServerInfo100 = ^TArrServerInfo100;
function NetServerEnum(servername: PWideString; level: DWORD; out bufptr: Pointer; prefmaxlen: DWORD;
entriesread: PDWORD; totalentries: PDWORD; servertype: DWORD; domain: PWideChar;
resumehandle: PDWORD): DWORD; stdcall; external 'netapi32.dll';
function NetApiBufferFree(buffer: Pointer): DWORD; stdcall; external 'netapi32.dll';
function GetSQLServers(List: TStrings): Integer;
var lpEntries: PArrServerInfo100;
dwPrefMaxLen: DWORD;
dwEntriesRead: DWORD;
dwTotalEntries:DWORD;
dwTotalCount: DWORD;
dwServerType: DWORD;
dwResumeHandle:DWORD;
dwStatus: DWORD;
begin
if Assigned(List) then List.Clear;
dwServerType:=SV_TYPE_SQLSERVER;
dwPrefMaxLen:=DWORD(-1);
dwEntriesRead:=0;
dwTotalEntries:=0;
dwTotalCount:=0;
dwResumeHandle:=0;
result:=0;
dwStatus:=NetServerEnum(nil, 100, Pointer(lpEntries), dwPrefMaxLen, @dwEntriesRead, @dwTotalCount, SV_TYPE_SQLSERVER, nil, @dwResumeHandle);
if ((dwStatus = ERROR_SUCCESS) or (dwStatus = ERROR_MORE_DATA)) then
begin
if Assigned(lpEntries) then
begin
while (dwEntriesRead > 0) do
begin
Dec(dwEntriesRead);
Inc(result);
if Assigned(List) then List.Add(WideCharToString(lpEntries[dwEntriesRead].sv100_name));
end;
NetApiBufferFree(lpEntries);
end;
end;
end;
Saludos