操作系统为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;

解决方案 »

  1.   

    MAC地址是固定的,插不插网线都应该没问题。
    还是检查一下不同操作系统下的API有什么说明。
      

  2.   

    mac是全球统一的,网卡生产时就定了,跟网线没关系
      

  3.   

    無關的, 看你用什麼方法取得而已, 如果你用網絡協議的API取得的話, 就會如你上面說的情況
      

  4.   

    我想问一下,我要找局域网中其他机子的MAC地址,如果对方机子没开,我是不是能找到它的MAC地址呢?
      

  5.   

    根据我的测试.的确是这样.我也不清楚怎么回事.而使用windows的ipconfig /al命令.无论什么情况都能取出正确的mac地址.
      

  6.   

    我想问一下,我要找局域网中其他机子的MAC地址,如果对方机子没开,我是不是能找到它的MAC地址呢?
    >>那肯定是不能取到的。除非把他的网卡卸下装在你的机器上。 
    另外,mac是全球统一的,网卡生产时就定了,跟网线没关系,还得看你用什麼方法取得, 如果你用網絡協議的API取得的話, 就會如你上面說的情況