操作系统为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;
解决方案 »
- 求quick report的一些技巧,问题解决就给分
- 有谁知道d5+windows2003能断点调试dll不???
- 谁帮我找回失去的记忆:关于DBGrid的拖放问题
- 我在一个DLL1里封装了一个DataModule,DataModule包含所有数据感知控件和所有的数据控制控件,我怎样在另一个封装了MDIChild的DLL2里动态加
- 怎样激活程序窗口?
- 实现三维仿真交互,用3dsmax建模,能用delphi来实现吗?
- 用鼠标在Timage上写字,怎么弄能得到最佳效果,满意给300分
- SQL中参数的问题
- 替换msgina 使用自己的登陆界面
- delphi执行多条SQL语句不抛出异常
- INDY IDTCPSERVER的一点疑问!
- WebBrowser.Navigate中加了PostData ,怎么执行下来,跟踪的结果却不是 post(用sniff)?为什么会如此??
还是检查一下不同操作系统下的API有什么说明。
>>那肯定是不能取到的。除非把他的网卡卸下装在你的机器上。
另外,mac是全球统一的,网卡生产时就定了,跟网线没关系,还得看你用什麼方法取得, 如果你用網絡協議的API取得的話, 就會如你上面說的情況