请教delphi 获取网卡MAC地址 如题,是不是有api函数的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 use nb30;Var NCB : TNCB; ADAPTER : TADAPTERSTATUS; LANAENUM : TLANAENUM; intIdx : Integer; result : Char; buf : String;begin Try ZeroMemory(@NCB, SizeOf(NCB)); NCB.ncb_command := Chr(NCBRESET); NCB.ncb_lana_num := LANAENUM.lana[0]; result := NetBios(@NCB); If Ord(result)<>0 Then exit; //获取网卡适配器地址 ZeroMemory(@NCB, SizeOf(NCB)); NCB.ncb_command := Chr(NCBASTAT); NCB.ncb_lana_num := LANAENUM.lana[0]; StrPCopy(NCB.ncb_callname, '*'); NCB.ncb_buffer := @ADAPTER; NCB.ncb_length := SizeOf(ADAPTER); result := NetBios(@NCB); If Ord(result)<>0 Then exit; buf := ''; For intIdx := 0 To 5 Do buf := buf + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2)+'-'; edtMACAddress.Text := copy(buf,0,length(buf)-1); Finally End;end; For intIdx := 0 To 5 Do运行到这里,提示[Error] For loop control variable must be simple local variable procedure TfrmMain.btnRunClick(Sender: TObject);begin memResult.lines.add('您的第'+edtAdapterNum.text+'个适配器的MAC地址为'+NBGetAdapterAddress(StrtoInt(edtAdapterNum.Text)));end;function TfrmMain.NBGetAdapterAddress(adapterNum: integer): String;//adapter00为指定的网卡适配器Var NCB:TNCB; // NetBios控制块 ADAPTER : TADAPTERSTATUS; // 获取网卡状态 LANAENUM : TLANAENUM; // Netbios lana intIdx : Integer; // 临时变量 cRC : Char; // NetBios返回值 strTemp : String; // 临时变量Begin Result := ''; Try // 清空控制块 ZeroMemory(@NCB, SizeOf(NCB)); NCB.ncb_command:=Chr(NCBENUM); cRC := NetBios(@NCB); // 重新设置enum命令 NCB.ncb_buffer := @LANAENUM; NCB.ncb_length := SizeOf(LANAENUM); cRC := NetBios(@NCB); If Ord(cRC)<>0 Then exit; // 重新设定网卡 ZeroMemory(@NCB, SizeOf(NCB)); NCB.ncb_command := Chr(NCBRESET); NCB.ncb_lana_num := LANAENUM.lana[adapterNum]; cRC := NetBios(@NCB); If Ord(cRC)<>0 Then exit; // 获取网卡地址 ZeroMemory(@NCB, SizeOf(NCB)); NCB.ncb_command := Chr(NCBASTAT); NCB.ncb_lana_num := LANAENUM.lana[adapterNum]; StrPCopy(NCB.ncb_callname, '*'); NCB.ncb_buffer := @ADAPTER; NCB.ncb_length := SizeOf(ADAPTER); cRC := NetBios(@NCB); // 将获得信息转换为字符串 strTemp := ''; For intIdx := 0 To 5 Do strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2); Result := strTemp; Finally End;end; 6楼不负责任的答案,GOUPI&laji,断网情况下,根本不能用,还想蹭分 求如何写类 大家帮忙解决DBNavigator问题 怎么比较2个数组是否相等 急需这样的功能解决后另加分100在线等.. 怎么能用DELPHI 语句自动生成一个数据库.可以设置数据库的密码 ado+oracle的查询问题?高手请进(高分相送)! 过年了,都进来拿年终奖金! ADOQUERY如何取存储过程返回的值? 往数据库中添加记录的问题 大家帮忙出出主意,斑竹手下留情!! 有form1,form2,....form10,怎样定义窗体数组,并动态显示. 高分求delphi调用zlib.dll实现压缩解压缩的代码,放弃使用zlib单元了,生成的结果和.net调用zlib.dll生成的结果不一样
NCB : TNCB;
ADAPTER : TADAPTERSTATUS;
LANAENUM : TLANAENUM;
intIdx : Integer;
result : Char;
buf : String;
begin
Try
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[0];
result := NetBios(@NCB);
If Ord(result)<>0 Then
exit;
//获取网卡适配器地址
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[0];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
result := NetBios(@NCB);
If Ord(result)<>0 Then
exit;
buf := '';
For intIdx := 0 To 5 Do
buf := buf + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2)+'-';
edtMACAddress.Text := copy(buf,0,length(buf)-1);
Finally
End;end;
[Error] For loop control variable must be simple local variable
begin
memResult.lines.add('您的第'+edtAdapterNum.text+'个适配器的MAC地址为'+NBGetAdapterAddress(StrtoInt(edtAdapterNum.Text)));
end;
function TfrmMain.NBGetAdapterAddress(adapterNum: integer): String;
//adapter00为指定的网卡适配器
Var
NCB:TNCB; // NetBios控制块
ADAPTER : TADAPTERSTATUS; // 获取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer; // 临时变量
cRC : Char; // NetBios返回值
strTemp : String; // 临时变量Begin
Result := '';
Try
// 清空控制块
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command:=Chr(NCBENUM);
cRC := NetBios(@NCB); // 重新设置enum命令
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;
// 重新设定网卡
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[adapterNum];
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;
// 获取网卡地址
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[adapterNum];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);
// 将获得信息转换为字符串
strTemp := '';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
Result := strTemp;
Finally
End;
end;