怎样获得本机和网上邻居中共享的其他计算机的名称、ip地址和网卡号?(100分)

  • 主题发起人 主题发起人 Liyue
  • 开始时间 开始时间
L

Liyue

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样获得本机和网上邻居中共享的其他计算机的名称、ip地址和网卡号?
 
给你一段代码,不过只能找出名称,其它的让给别人了,呵呵。
Computer: array[1..500] of string[25];
ComputerCount: Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
FindAllComputers('RESEARCH');
for i:=0 to 20 do
showmessage(computer);
end;

procedure TForm1.FindAllComputers(Workgroup: string);
var
EnumHandle: THandle;
WorkgroupRS: TNetResource;
Buf: array[1..500] of TNetResource;
BufSize: DWORD;
Entries: DWORD;
Result: integer;
begin
ComputerCount:=0;
Workgroup := Workgroup + #0;
FillChar(WorkgroupRS, SizeOf(WorkgroupRS), 0);
with WorkgroupRS do begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @Workgroup[1];
end;

WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @WorkgroupRS, EnumHandle);
repeat
Entries := 1;
BufSize := SizeOf(Buf);
Result := WNetEnumResource(EnumHandle, Entries, @Buf, BufSize);
if (Result = NO_ERROR) and (Entries = 1) then begin
Inc(ComputerCount);
Computer[ComputerCount] := StrPas(Buf[1].lpRemoteName);
end;
until (Entries <> 1) or (Result <> NO_ERROR);
WNetCloseEnum(EnumHandle);
end;
 
这段代码能找出本机网卡号,抄来的,已经测试过,可以的 ^_^
Function NBGetAdapterAddress(a:Integer) : String;
Var
NCB : TNCB; // Netbios control block file://NetBios控制块
ADAPTER : TADAPTERSTATUS; // Netbios adapter status//取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer; // Temporary work value//临时变量
cRC : Char; // Netbios return code//NetBios返回值
strTemp : String; // Temporary string//临时变量

Begin
// Initialize
Result := '';

Try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));

// Issue enum command
NCB.ncb_command := Chr(NCBENUM);
cRC := NetBios(@NCB);

// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;

// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;

// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);

// Convert it to string
strTemp := '';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[ intIdx]),2);
Result := strTemp;
Finally
End;
End;

Procedure TForm1.Button3Click(Sender : TObject);
Begin
SHOWMESSAGE(NBGetAdapterAddress(0));
End;
 
给我你的e-mail,我发一个源程序给你。
 
谢谢!!!
zjly808.163.com
 
我也要:zoujinhe@changhong.com
 
也给我一个吧,我对此很感兴趣,我的:jn_zzj@163.com
 
多人接受答案了。
 
后退
顶部