!!!!!!!!MAC地址,有新发现!!! 据我看来,好像只能在WIN2000下有效,而且TCP的设置要保证应用NETBIOS。我也很想知道WIN98下获得MAC的方法。一种万无一失的方法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我的执行代码,你可以试试: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; 我试过在win98上确实不行的。好像winnt40也不行。 不知有谁能编写一个通用程序将所在各种windows操作系统下的MAC地址都能正确读出来。 首先noflybird的程序在2000下试可以调试通过的我觉得问题可能出在netbios上面在连接网络时netbios是打开的,而未连接时,netbios时关闭的 其实用api很容易获得mactemp:string;winexec(pchar(/command.com/c ipconfig/all>'+temp),sw_hide) to NoflyBirds:你将下面的 If Ord(re)<>0 Then exit改成: If (Ord(re)<>0) and (Ord(re)<>6) Then exit;即可以了,在win2000下你原来的写法没有问题,在win98下就不行了,我也不知道为什么,刚才查到另外一个可用的与不可用的进行比较得出这个结论,也是这两天遇到这个问题翻出这个旧帖。 抱歉,你的名字打错了noflybird (东方不亮) noflybird (东方不亮) noflybird (东方不亮) 更正如上 比较菜的问题:如何捕捉鼠标滚轮动作?? 我想对指定多个文件进行复制、覆盖,该如何实现? 情问一下有这样的函数吗? 好像我没分似的,我也散分 我用 s:=ExlApp.cells(3,4) 读Excel单元格,为何老告诉我“找不到成员”? 关于面向对象 很急,急!一个简单问题!(在线等待!) 问一个有关Webbrowser的问题 wly033(代码机器),flying_fish(飞鱼),scycgyj(阿郎)进来看看! 关于打印时默认宽度的设定!!(来者有分!) 流式文件读写 帮帮忙,javascript中调用的activeX控件怎么做啊?急救!!
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;
temp:string;winexec(pchar(/command.com/c ipconfig/all>'+temp),sw_hide)
你将下面的 If Ord(re)<>0 Then
exit改成: If (Ord(re)<>0) and (Ord(re)<>6) Then
exit;
即可以了,在win2000下你原来的写法没有问题,在win98下就不行了,我也不知道为什么,刚才查到另外一个可用的与不可用的进行比较得出这个结论,也是这两天遇到这个问题翻出这个旧帖。
noflybird (东方不亮)
noflybird (东方不亮) 更正如上