紧急在线等候,怎样得到网卡的id号?

jet_zhs 2002-05-14 08:59:55
怎样用api函数得到网卡的id号?
...全文
40 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vjun 2002-05-15
  • 打赏
  • 举报
回复
看我的:(好像只能在Win2000下有效)
function GetMACAddress(AdapterNo: Byte): String;
var
Adapter: TAdapterStatus;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := Char(AdapterNo);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := '00:00:00:00:00:00';
Exit;
end;

FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := Char(AdapterNo);
NCB.ncb_callname := '*';

FillChar(Adapter, SizeOf(Adapter), 0);
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := '00:00:00:00:00:00';
Exit;
end;
Result :=
IntToHex(Byte(Adapter.adapter_address[0]), 2) + ':' +
IntToHex(Byte(Adapter.adapter_address[1]), 2) + ':' +
IntToHex(Byte(Adapter.adapter_address[2]), 2) + ':' +
IntToHex(Byte(Adapter.adapter_address[3]), 2) + ':' +
IntToHex(Byte(Adapter.adapter_address[4]), 2) + ':' +
IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;
alongjuan 2002-05-14
  • 打赏
  • 举报
回复
UP
linx88 2002-05-14
  • 打赏
  • 举报
回复
uses activex;
var
gid:Tguid;
wclid:array[0..127]of widechar;
start:integer;
begin
CoCreateGUID(gid);
stringfromguid2(gid,wclid,sizeof(wclid) div 2);
//get start position;
edit1.text:=widechartostring(wclid);
start:=length(edit1.text)-12;
edit2.text:=copy(edit1.text,start,12);
end;
softwing 2002-05-14
  • 打赏
  • 举报
回复

//取网卡地址(MAC)列表
procedure NBGetMac(Strings: TStrings);
//取第一个非零的网卡地址
function NBGetFirstMac: String;
//判断指定网卡地址是否存在
function NBIsMacInList(Mac: String): Boolean;

procedure NBGetMac(Strings: TStrings);
function HexBL(by: Byte): String;
begin
Result := Format('%x', [by]);
if Length(Result) < 2 then
Result := '0' + Result;
end;
var
NCB: TNCB;
Adapter: TAdapterStatus;
LanaEnum: TLanaEnum;
I, J: Integer;
Str: String;
begin
Strings.Clear;
ZeroMemory(@NCB,SizeOf(NCB));

NCB.ncb_command := Chr(NCBENUM);
NetBios(@NCB);

NCB.ncb_buffer := @LanaEnum;
NCB.ncb_length := SizeOf(LanaEnum);
NCB.ncb_command := Chr(NCBENUM);
NetBios(@NCB);

for I := 0 to Ord(LanaEnum.length) - 1 do
begin
ZeroMemory(@NCB,SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LanaEnum.lana[I];
NetBios(@NCB);

ZeroMemory(@NCB,SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LanaEnum.lana[I];
StrPCopy(NCB.ncb_callname,'*');
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
NetBios(@NCB);

Str := '';
for J := 0 to 5 do
begin
if J > 0 then Str := Str + '-';
Str := Str + HexBL(Byte(Adapter.adapter_address[J]));
end;
Strings.Add(Str);
end;
end;

function NBGetFirstMac: String;
var
Strings: TStringList;
I, J: Integer;
begin
Result := '';
Strings := TStringList.Create;
try
NBGetMac(Strings);
for I := 0 to Strings.Count - 1 do
begin
for J := 1 to Length(Strings.Strings[I]) do
if (Strings.Strings[I][J] <> '0') and
(Strings.Strings[I][J] <> '-') then
begin
Result := Strings.Strings[I];
Break;
end;
if Result <> '' then Break;
end;
finally
Strings.Free;
end;
end;

function NBIsMacInList(Mac: String): Boolean;
var
Strings: TStringList;
I: Integer;
begin
Result := False;
Strings := TStringList.Create;
try
NBGetMac(Strings);
for I := 0 to Strings.Count - 1 do
begin
if Strings.Strings[I] = Mac then
begin
Result := True;
Break;
end;
end;
finally
Strings.Free;
end;
end;
zjqyb 2002-05-14
  • 打赏
  • 举报
回复
UCHAR Netbios(

PNCB pncb // address of network control block
);

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧