据我看来,好像只能在WIN2000下有效,而且TCP的设置要保证应用NETBIOS。我也很想知道WIN98下获得MAC的方法。一种万无一失的方法。

解决方案 »

  1.   

    这是我的执行代码,你可以试试:
    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;
      

  2.   

    我试过在win98上确实不行的。好像winnt40也不行。
      

  3.   

    不知有谁能编写一个通用程序将所在各种windows操作系统下的MAC地址都能正确读出来。
      

  4.   

    首先noflybird的程序在2000下试可以调试通过的我觉得问题可能出在netbios上面在连接网络时netbios是打开的,而未连接时,netbios时关闭的
      

  5.   

    其实用api很容易获得mac
    temp:string;winexec(pchar(/command.com/c ipconfig/all>'+temp),sw_hide)
      

  6.   

    to NoflyBirds:
    你将下面的  If Ord(re)<>0 Then
                  exit改成:  If (Ord(re)<>0) and (Ord(re)<>6) Then
                  exit;
    即可以了,在win2000下你原来的写法没有问题,在win98下就不行了,我也不知道为什么,刚才查到另外一个可用的与不可用的进行比较得出这个结论,也是这两天遇到这个问题翻出这个旧帖。
      

  7.   

    抱歉,你的名字打错了noflybird (东方不亮) 
    noflybird (东方不亮) 
    noflybird (东方不亮) 更正如上