procedure Tfeiyan.GetServerList(List: TStrings); Type {$H+} PMyRec=^MyRec; MyRec=Record dwScope:Integer; dwType:Integer; dwDisplayType:Integer; dwUsage:Integer; LocalName:String; RemoteName:String; Comment:String; Provider:String; End; {H-} Var NetResource : TNetResource; TempRec: PMyRec; Buf:Pointer; Count,BufSize,Res:DWORD; lphEnum:THandle; p:PNetResourceArr; i, j :SmallInt; NetworkTypeList:TList; begin NetworkTypeList := TList.Create; List.BeginUpdate; List.Clear; GetMem(Buf,8192); Try Res:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum); If Res <> 0 Then Raise Exception(Res); Count := $FFFFFFFF; BufSize := 8192; Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); If Res = ERROR_NO_MORE_ITEMS Then Exit; If (Res <> 0) Then Raise Exception(Res); P := PNetResourceArr(Buf); For I := 0 To Count - 1 Do Begin New(TempRec); TempRec^.dwScope := P^.dwScope; TempRec^.dwType := P^.dwType ; TempRec^.dwDisplayType := P^.dwDisplayType ; TempRec^.dwUsage := P^.dwUsage ; TempRec^.LocalName := StrPas(P^.lpLocalName); TempRec^.RemoteName := StrPas(P^.lpRemoteName); TempRec^.Comment := StrPas(P^.lpComment); TempRec^.Provider := StrPas(P^.lpProvider); NetworkTypeList.Add(TempRec); Inc(P); End; Res := WNetCloseEnum(lphEnum); If Res <> 0 Then Raise Exception(Res); For J := 0 To NetworkTypeList.Count-1 Do Begin TempRec := NetworkTypeList.Items[J]; NetResource := TNetResource(TempRec^); Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); If Res <> 0 Then Raise Exception(Res); While true Do Begin Count := $FFFFFFFF; BufSize := 8192; Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); If Res = ERROR_NO_MORE_ITEMS Then Break; If (Res <> 0) Then Raise Exception(Res); P := PNetResourceArr(Buf); For I := 0 To Count - 1 Do Begin List.Add(P^.lpRemoteName); Inc(P); End; End; End; Res := WNetCloseEnum(lphEnum); If Res <> 0 Then Raise Exception(Res); Finally FreeMem(Buf); NetworkTypeList.Destroy; End; List.EndUpdate; end; 以上是获得计算机名 function Tfeiyan.nametoip(name: string): string; var WSAData:TWSAData; HostEnt:PHostEnt; begin result:=''; WSAStartup(2,WSAData); HostEnt:=gethostbyname(PChar(name)); if HostEnt<>nil then begin with HostEnt^ do result:=Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]); end; WSACleanup; end; 根据计算机名获取IP
參考此貼代碼: http://topic.csdn.net/t/20040508/10/3040713.html
參考此貼代碼: http://topic.csdn.net/t/20040508/10/3040713.html
Type
{$H+}
PMyRec=^MyRec;
MyRec=Record
dwScope:Integer;
dwType:Integer;
dwDisplayType:Integer;
dwUsage:Integer;
LocalName:String;
RemoteName:String;
Comment:String;
Provider:String;
End;
{H-}
Var
NetResource : TNetResource;
TempRec: PMyRec;
Buf:Pointer;
Count,BufSize,Res:DWORD;
lphEnum:THandle;
p:PNetResourceArr;
i, j :SmallInt;
NetworkTypeList:TList;
begin
NetworkTypeList := TList.Create;
List.BeginUpdate;
List.Clear;
GetMem(Buf,8192);
Try
Res:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
If Res <> 0 Then Raise Exception(Res);
Count := $FFFFFFFF;
BufSize := 8192;
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If Res = ERROR_NO_MORE_ITEMS Then Exit;
If (Res <> 0) Then Raise Exception(Res);
P := PNetResourceArr(Buf);
For I := 0 To Count - 1 Do
Begin
New(TempRec);
TempRec^.dwScope := P^.dwScope;
TempRec^.dwType := P^.dwType ;
TempRec^.dwDisplayType := P^.dwDisplayType ;
TempRec^.dwUsage := P^.dwUsage ;
TempRec^.LocalName := StrPas(P^.lpLocalName);
TempRec^.RemoteName := StrPas(P^.lpRemoteName);
TempRec^.Comment := StrPas(P^.lpComment);
TempRec^.Provider := StrPas(P^.lpProvider);
NetworkTypeList.Add(TempRec);
Inc(P);
End;
Res := WNetCloseEnum(lphEnum);
If Res <> 0 Then Raise Exception(Res);
For J := 0 To NetworkTypeList.Count-1 Do
Begin
TempRec := NetworkTypeList.Items[J];
NetResource := TNetResource(TempRec^);
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> 0 Then Raise Exception(Res);
While true Do
Begin
Count := $FFFFFFFF;
BufSize := 8192;
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If Res = ERROR_NO_MORE_ITEMS Then Break;
If (Res <> 0) Then Raise Exception(Res);
P := PNetResourceArr(Buf);
For I := 0 To Count - 1 Do
Begin
List.Add(P^.lpRemoteName);
Inc(P);
End;
End;
End;
Res := WNetCloseEnum(lphEnum);
If Res <> 0 Then Raise Exception(Res);
Finally
FreeMem(Buf);
NetworkTypeList.Destroy;
End;
List.EndUpdate;
end;
以上是获得计算机名
function Tfeiyan.nametoip(name: string): string;
var
WSAData:TWSAData;
HostEnt:PHostEnt;
begin
result:='';
WSAStartup(2,WSAData);
HostEnt:=gethostbyname(PChar(name));
if HostEnt<>nil then
begin
with HostEnt^ do
result:=Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]);
end;
WSACleanup;
end;
根据计算机名获取IP