UCHAR Netbios(    PNCB pncb  // address of network control block  
   );

解决方案 »

  1.   


      //取网卡地址(MAC)列表
      procedure NBGetMac(Strings: TStrings);
      //取第一个非零的网卡地址
      function NBGetFirstMac: String;
      //判断指定网卡地址是否存在
      function NBIsMacInList(Mac: String): Boolean;procedure NBGetMac(Strings: TStrings);
      function HexBL(by: Byte): String;
      begin
        Result := Format('%x', [by]);
        if Length(Result) < 2 then
          Result := '0' + Result;
      end;
    var
      NCB: TNCB;
      Adapter: TAdapterStatus;
      LanaEnum: TLanaEnum;
      I, J: Integer;
      Str: String;
    begin
      Strings.Clear;
      ZeroMemory(@NCB,SizeOf(NCB));  NCB.ncb_command := Chr(NCBENUM);
      NetBios(@NCB);  NCB.ncb_buffer := @LanaEnum;
      NCB.ncb_length := SizeOf(LanaEnum);
      NCB.ncb_command := Chr(NCBENUM);
      NetBios(@NCB);  for I := 0 to Ord(LanaEnum.length) - 1 do
      begin
        ZeroMemory(@NCB,SizeOf(NCB));
        NCB.ncb_command := Chr(NCBRESET);
        NCB.ncb_lana_num := LanaEnum.lana[I];
        NetBios(@NCB);    ZeroMemory(@NCB,SizeOf(NCB));
        NCB.ncb_command := Chr(NCBASTAT);
        NCB.ncb_lana_num := LanaEnum.lana[I];
        StrPCopy(NCB.ncb_callname,'*');
        NCB.ncb_buffer := @Adapter;
        NCB.ncb_length := SizeOf(Adapter);
        NetBios(@NCB);    Str := '';
        for J := 0 to 5 do
        begin
          if J > 0 then Str := Str + '-';
          Str := Str + HexBL(Byte(Adapter.adapter_address[J]));
        end;
        Strings.Add(Str);
      end;
    end;function NBGetFirstMac: String;
    var
      Strings: TStringList;
      I, J: Integer;
    begin
      Result := '';
      Strings := TStringList.Create;
      try
        NBGetMac(Strings);
        for I := 0 to Strings.Count - 1 do
        begin
          for J := 1 to Length(Strings.Strings[I]) do
            if (Strings.Strings[I][J] <> '0') and
              (Strings.Strings[I][J] <> '-') then
            begin
              Result := Strings.Strings[I];
              Break;
            end;
          if Result <> '' then Break;
        end;
      finally
        Strings.Free;
      end;
    end;function NBIsMacInList(Mac: String): Boolean;
    var
      Strings: TStringList;
      I: Integer;
    begin
      Result := False;
      Strings := TStringList.Create;
      try
        NBGetMac(Strings);
        for I := 0 to Strings.Count - 1 do
        begin
          if Strings.Strings[I] = Mac then
          begin
            Result := True;
            Break;
          end;
        end;
      finally
        Strings.Free;
      end;
    end;
      

  2.   

    uses activex;
    var
    gid:Tguid;
    wclid:array[0..127]of widechar;
    start:integer;
    begin
        CoCreateGUID(gid);
        stringfromguid2(gid,wclid,sizeof(wclid) div 2);
        //get start position;
        edit1.text:=widechartostring(wclid);
        start:=length(edit1.text)-12;
        edit2.text:=copy(edit1.text,start,12);
    end;
      

  3.   

    看我的:(好像只能在Win2000下有效)
    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;