请问怎样获得当前计算机所在的局域网的所有计算机IP或计算机名?
不一定要有答案,大家讨论一下。
不一定要有答案,大家讨论一下。
解决方案 »
- 怎样得到上一层控件的信息
- 如何实现鼠标拖动form中的image??
- Tchart中如何动态添加设置饼形图的labels属性呢?
- 请高手指教:Delphi中怎样让另一程序不在任务栏中显示?
- 很有挑战性:DBGridEh的单元格里面如何实现下拉列表增量搜索?
- 这个问题好难???我的头好大
- 痛哭的人:关于ado主从表的头痛问题...若解决,另奉200分!
- 关于.BPL文件使用的问题
- 急救!怎样进行原唱与伴唱的切换,即实现卡拉OK功能??
- 怎么好久不见WINAPI大叔了,WINAPI,我们想你.....呜呜呜......
- DataModule里可以写procedure和function吗?
- 关于存储过程的问题
功 能: 列举工作组中所有的计算机
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败: False;
备 注:
版 本:
1.0 2002/10/03 08:00:00
=================================================================}
Function TPub.NetGetUsers(GroupName: string; var List: TStringList): Boolean;
type
TNetResourceArray = ^TNetResource;//网络类型的数组
Var
i: Integer;
Buf: Pointer;
Temp: TNetResourceArray;
lphEnum: THandle;
NetResource: TNetResource;
Count,BufSize,Res: DWord;
begin
Result := False;
List.Clear;
FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
NetResource.lpRemoteName := @GroupName[1];//指定工作组名称
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK;//列举文件资源信息
//获取指定工作组的网络资源句柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
if Res <> NO_ERROR then Exit; //执行失败
while True do//列举指定工作组的网络资源
begin
Count := $FFFFFFFF;//不限资源数目
BufSize := 8192;//缓冲区大小设置为8K
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
//获取计算机名称
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
if Res = ERROR_NO_MORE_ITEMS then break;//资源列举完毕
if (Res <> NO_ERROR) then Exit;//执行失败
Temp := TNetResourceArray(Buf);
for i := 0 to Count - 1 do//列举工作组的计算机名称
begin
//获取工作组的计算机名称,+2表示删除"\\",如\\wangfajun=>wangfajun
List.Add(Temp^.lpRemoteName + 2);
inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum);//关闭一次列举
if Res <> NO_ERROR then exit;//执行失败
Result := True;
FreeMem(Buf);
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
PnetResourceArr = ^TNetResource;
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GetServerList(List:TStrings);
procedure GetUserList(fServer:string;List:TStrings);
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.GetServerList(List: TStrings);
Type{$H+}PMyRec = ^MyRec;MyRec = RecorddwScope : Integer;dwType : Integer;dwDisplayType : Integer;dwUsage : Integer;LocalName : String;RemoteName : String;Comment : String;Provider : String;End;{H-}VarNetResource : TNetResource;TempRec : PMyRec;Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;p : PNetResourceArr;i,j : SmallInt;NetworkTypeList : TList;begin// Result := False;NetworkTypeList := TList.Create;List.BeginUpdate;List.Clear;GetMem(Buf, 8192);TryRes := 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 DoBeginNew(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 DoBeginTempRec := 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 DoBeginCount := $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 DoBeginList.Add(P^.lpRemoteName);Inc(P);End;End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);//Result := True;FinallyFreeMem(Buf);NetworkTypeList.Destroy;End;List.EndUpdate;end;procedure TForm1.GetUserList(fServer: string; List: TStrings);
VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : PNetResourceArr;Begin
List.Clear;GetMem(Buf, 8192);TryFillChar(NetResource, SizeOf(NetResource), 0);NetResource.lpRemoteName := @fServer[1];NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;NetResource.dwScope := RESOURCETYPE_DISK;Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);If Res <> 0 Then Exit;While True DoBeginCount := $FFFFFFFF;BufSize := 8192;Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If Res = ERROR_NO_MORE_ITEMS Then Exit;If (Res <> 0) then Exit;Temp := PNetResourceArr(Buf);For Ind := 0 to Count - 1 doBeginList.Add(Temp^.lpRemoteName + 2); { Add all the network usernames to List StringList }Inc(Temp);End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);// Result := True;FinallyFreeMem(Buf);End;End;procedure TForm1.Button1Click(Sender: TObject);
begin
form1.GetServerList(form1.ListBox1.Items);
end;procedure TForm1.ListBox1Click(Sender: TObject);
begin
form1.GetUserList(form1.ListBox1.Items.Strings[form1.ListBox1.Itemindex],form1.ListBox2.Items);
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
PnetResourceArr = ^TNetResource;
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GetServerList(List:TStrings);
procedure GetUserList(fServer:string;List:TStrings);
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.GetServerList(List: TStrings);
Type{$H+}PMyRec = ^MyRec;MyRec = RecorddwScope : Integer;dwType : Integer;dwDisplayType : Integer;dwUsage : Integer;LocalName : String;RemoteName : String;Comment : String;Provider : String;End;{H-}VarNetResource : TNetResource;TempRec : PMyRec;Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;p : PNetResourceArr;i,j : SmallInt;NetworkTypeList : TList;begin// Result := False;NetworkTypeList := TList.Create;List.BeginUpdate;List.Clear;GetMem(Buf, 8192);TryRes := 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 DoBeginNew(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 DoBeginTempRec := 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 DoBeginCount := $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 DoBeginList.Add(P^.lpRemoteName);Inc(P);End;End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);//Result := True;FinallyFreeMem(Buf);NetworkTypeList.Destroy;End;List.EndUpdate;end;procedure TForm1.GetUserList(fServer: string; List: TStrings);
VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : PNetResourceArr;Begin
List.Clear;GetMem(Buf, 8192);TryFillChar(NetResource, SizeOf(NetResource), 0);NetResource.lpRemoteName := @fServer[1];NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;NetResource.dwScope := RESOURCETYPE_DISK;Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);If Res <> 0 Then Exit;While True DoBeginCount := $FFFFFFFF;BufSize := 8192;Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If Res = ERROR_NO_MORE_ITEMS Then Exit;If (Res <> 0) then Exit;Temp := PNetResourceArr(Buf);For Ind := 0 to Count - 1 doBeginList.Add(Temp^.lpRemoteName + 2); { Add all the network usernames to List StringList }Inc(Temp);End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);// Result := True;FinallyFreeMem(Buf);End;End;procedure TForm1.Button1Click(Sender: TObject);
begin
form1.GetServerList(form1.ListBox1.Items);
end;procedure TForm1.ListBox1Click(Sender: TObject);
begin
form1.GetUserList(form1.ListBox1.Items.Strings[form1.ListBox1.Itemindex],form1.ListBox2.Items);
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
PnetResourceArr = ^TNetResource;
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GetServerList(List:TStrings);
procedure GetUserList(fServer:string;List:TStrings);
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.GetServerList(List: TStrings);
Type{$H+}PMyRec = ^MyRec;MyRec = RecorddwScope : Integer;dwType : Integer;dwDisplayType : Integer;dwUsage : Integer;LocalName : String;RemoteName : String;Comment : String;Provider : String;End;{H-}VarNetResource : TNetResource;TempRec : PMyRec;Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;p : PNetResourceArr;i,j : SmallInt;NetworkTypeList : TList;begin// Result := False;NetworkTypeList := TList.Create;List.BeginUpdate;List.Clear;GetMem(Buf, 8192);TryRes := 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 DoBeginNew(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 DoBeginTempRec := 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 DoBeginCount := $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 DoBeginList.Add(P^.lpRemoteName);Inc(P);End;End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);//Result := True;FinallyFreeMem(Buf);NetworkTypeList.Destroy;End;List.EndUpdate;end;procedure TForm1.GetUserList(fServer: string; List: TStrings);
VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : PNetResourceArr;Begin
List.Clear;GetMem(Buf, 8192);TryFillChar(NetResource, SizeOf(NetResource), 0);NetResource.lpRemoteName := @fServer[1];NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;NetResource.dwScope := RESOURCETYPE_DISK;Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);If Res <> 0 Then Exit;While True DoBeginCount := $FFFFFFFF;BufSize := 8192;Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);If Res = ERROR_NO_MORE_ITEMS Then Exit;If (Res <> 0) then Exit;Temp := PNetResourceArr(Buf);For Ind := 0 to Count - 1 doBeginList.Add(Temp^.lpRemoteName + 2); { Add all the network usernames to List StringList }Inc(Temp);End;End;Res := WNetCloseEnum(lphEnum);If Res <> 0 Then Raise Exception(Res);// Result := True;FinallyFreeMem(Buf);End;End;procedure TForm1.Button1Click(Sender: TObject);
begin
form1.GetServerList(form1.ListBox1.Items);
end;procedure TForm1.ListBox1Click(Sender: TObject);
begin
form1.GetUserList(form1.ListBox1.Items.Strings[form1.ListBox1.Itemindex],form1.ListBox2.Items);
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,WinSock, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function HostToIP(Name: string; var Ip: string): Boolean;
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then
begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then
begin
IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else
begin
Result := False;
end;
finally
WSACleanup;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
IP: string;
DNS: string;
begin
DNS := InputBox('输入DNS域名', '主机名称:', '');
if HostToIp(DNS, IP) then
showmessage(IP);
end;end.
1。得到本机的IP和子网掩码 eg: 192.168.1.18 掩码 255.255.255.0
2。计算子网的IP范围 eg: 192.168.1.1-192.168.1.254
3。逐个IP检查,可以使用多线程
//得到本机的局域网Ip地址
Function GetLocalIp(var LocalIp:string): Boolean;
//通过Ip返回机器名
Function GetNameByIPAddr(IPAddr: string; var MacName: string): Boolean ;
//获取网络中SQLServer列表
Function GetSQLServerList(var List: Tstringlist): Boolean;
//获取网络中的所有网络类型
Function GetNetList(var List: Tstringlist): Boolean;
//获取网络中的工作组
Function GetGroupList(var List: TStringList): Boolean;
//获取工作组中所有计算机
Function GetUsers(GroupName: string; var List: TStringList): Boolean;
//获取网络中的资源
Function GetUserResource(IpAddr: string; var List: TStringList): Boolean;
//映射网络驱动器
Function NetAddConnection(NetPath: Pchar; PassWord: Pchar;LocalPath: Pchar): Boolean;
//检测网络状态
Function CheckNet(IpAddr:string): Boolean;
//检测机器是否登入网络
Function CheckMacAttachNet: Boolean; //判断Ip协议有没有安装 这个函数有问题
Function IsIPInstalled : boolean;
//检测机器是否上网
Function InternetConnected: Boolean;//关闭网络连接
function NetCloseAll:boolean;