操作系统为WIN98时,不管是否插上网线都能正常读取网卡MAC地址,而系统为WINME或WINXP时,插上网线能读取,不插网线就不能正常读取MAC。这是为什么?我的程序如下:unit util;interface uses Registry, Windows, ActiveX, IniFiles, SysUtils, DateUtils, nb; function NbLanaEnum: TLana_Enum;
function NbReset(l: Byte): Word;
function NbGetMacAddr(LanaNum: Integer): String;implementationfunction NbLanaEnum: TLana_Enum;
var
NCB: TNCB;
L_Enum: TLana_Enum;
RetCode: Word;
begin
FillChar(NCB, SizeOf(NCB), 0);
FillChar(L_Enum, SizeOf(TLana_Enum), 0);
NCB.Command := NCB_ENUM;
NCB.Buf := @L_Enum;
NCB.Length := Sizeof(L_Enum);
RetCode := NetBiosCmd(NCB);
if RetCode <> NRC_GOODRET then begin
L_Enum.Length := 0;
L_Enum.Lana[0] := Byte(RetCode);
end;
L_Enum.Length := 1;
L_Enum.Lana[0] := 0;
Result := L_Enum;
end;function NbReset(l: Byte): Word;
var
NCB: TNCB;
begin
Result := NRC_GOODRET;
FillChar(NCB, SizeOf(NCB), 0);
NCB.Command := NCB_RESET;
NCB.Lana_Num := l;
Result := NetBiosCmd(NCB);
end;function NbGetMacAddr(LanaNum: Integer): String;
var
NCB: TNCB;
AdpStat: TAdpStat;
RetCode: Word;
begin
FillChar(NCB, SizeOf(NCB), 0);
FillChar(AdpStat, SizeOf(AdpStat), 0);
NCB.Command := NCB_ADPSTAT;
NCB.Buf := @AdpStat;
NCB.Length := Sizeof(AdpStat);
FillChar(NCB.CallName, Sizeof(TNBName), $20);
NCB.CallName[0] := Byte('*');
NCB.Lana_Num := LanaNum;
RetCode := NetBiosCmd(NCB);
if RetCode = NRC_GOODRET then begin
Result := Format('%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x',
[AdpStat.ID[0],
AdpStat.ID[1],
AdpStat.ID[2],
AdpStat.ID[3],
AdpStat.ID[4],
AdpStat.ID[5]
]);
end else begin
Result := '000000000000';
end;
end;
function NbReset(l: Byte): Word;
function NbGetMacAddr(LanaNum: Integer): String;implementationfunction NbLanaEnum: TLana_Enum;
var
NCB: TNCB;
L_Enum: TLana_Enum;
RetCode: Word;
begin
FillChar(NCB, SizeOf(NCB), 0);
FillChar(L_Enum, SizeOf(TLana_Enum), 0);
NCB.Command := NCB_ENUM;
NCB.Buf := @L_Enum;
NCB.Length := Sizeof(L_Enum);
RetCode := NetBiosCmd(NCB);
if RetCode <> NRC_GOODRET then begin
L_Enum.Length := 0;
L_Enum.Lana[0] := Byte(RetCode);
end;
L_Enum.Length := 1;
L_Enum.Lana[0] := 0;
Result := L_Enum;
end;function NbReset(l: Byte): Word;
var
NCB: TNCB;
begin
Result := NRC_GOODRET;
FillChar(NCB, SizeOf(NCB), 0);
NCB.Command := NCB_RESET;
NCB.Lana_Num := l;
Result := NetBiosCmd(NCB);
end;function NbGetMacAddr(LanaNum: Integer): String;
var
NCB: TNCB;
AdpStat: TAdpStat;
RetCode: Word;
begin
FillChar(NCB, SizeOf(NCB), 0);
FillChar(AdpStat, SizeOf(AdpStat), 0);
NCB.Command := NCB_ADPSTAT;
NCB.Buf := @AdpStat;
NCB.Length := Sizeof(AdpStat);
FillChar(NCB.CallName, Sizeof(TNBName), $20);
NCB.CallName[0] := Byte('*');
NCB.Lana_Num := LanaNum;
RetCode := NetBiosCmd(NCB);
if RetCode = NRC_GOODRET then begin
Result := Format('%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x',
[AdpStat.ID[0],
AdpStat.ID[1],
AdpStat.ID[2],
AdpStat.ID[3],
AdpStat.ID[4],
AdpStat.ID[5]
]);
end else begin
Result := '000000000000';
end;
end;
解决方案 »
- delphi 7的中 TIdTCPClient组件ReadLn超时不能用怎么解决?
- 带图形界面的windows服务程序在Win2003下的问题
- [问]SetVal(const applyid: TXSDecimal);有关XML Service调用
- pbl 的调用
- 急问!在线!
- 100分征名
- 关于数据库的一个小问题!
- 高分求救关于edit的简单问题!!!!
- 请问ip2000的控件在哪儿可以下载
- 深入WIN2000注册表 -(详尽的文档共18章,整理的好辛苦,将就一下)
- INDY IDTCPSERVER的一点疑问!
- WebBrowser.Navigate中加了PostData ,怎么执行下来,跟踪的结果却不是 post(用sniff)?为什么会如此??
还是检查一下不同操作系统下的API有什么说明。
>>那肯定是不能取到的。除非把他的网卡卸下装在你的机器上。
另外,mac是全球统一的,网卡生产时就定了,跟网线没关系,还得看你用什麼方法取得, 如果你用網絡協議的API取得的話, 就會如你上面說的情況