uses
   nb30;

 function GetMACAdress: string;
 var
   I: Integer;
   LRetCode: Char;
   LSystemID:   string;
   LNCB: TNCB;
   LAdapter: TAdapterStatus;
   LLEnum: TLanaEnum;
 begin
   LSystemID := '';
   Fillchar(LNCB, SizeOf(LNCB), 0);
   Fillchar(LLEnum, SizeOf(LLEnum), 0);
   Fillchar(LAdapter, SizeOf(LAdapter), 0);
   // 获取网卡个数
   LLEnum.Length := Chr(0);
   LNCB.ncb_command := Chr(NCBENUM);     
   LNCB.ncb_buffer := @LLEnum;     
   LNCB.ncb_length := SizeOf(LLEnum);     
   Netbios(@LNCB);
   
   I := 0;
   repeat
     Fillchar(LNCB, SizeOf(LNCB), 0);
     LNCB.ncb_command := Chr(NCBRESET);
     LNCB.ncb_lana_num := LLEnum.lana;
     Netbios(@LNCB);
     Fillchar(LNCB, SizeOf(LNCB), 0);
     LNCB.ncb_command := Chr(NCBASTAT);
     LNCB.ncb_lana_num := LLEnum.lana;
     LNCB.ncb_callname[0] := '*';
     LNCB.ncb_buffer := @LAdapter;
     LNCB.ncb_length := SizeOf(TAdapterStatus);
     LRetCode := Netbios(@LNCB);
     
     if (LRetCode = Chr(0)) or (LRetCode = Chr(6)) then
     begin
       LSystemID := Format('%.2X-%.2X-%.2X-%.2X-%.2X-%.2X', [
         Ord(LAdapter.adapter_address[0]),
         Ord(LAdapter.adapter_address[1]),
         Ord(LAdapter.adapter_address[2]),
         Ord(LAdapter.adapter_address[3]),
         Ord(LAdapter.adapter_address[4]),
         Ord(LAdapter.adapter_address[5])]);
     end;
          
     Inc(I);     
   until (I >= Ord(LLEnum.Length)) or (LSystemID <> '00-00-00-00-00-00');
   
   Result := LSystemID;
 end;