如何获得网卡编号

解决方案 »

  1.   

    function GetPhysicalAddress: string;
    Var
      NCB : TNCB;
      ADAPTER : TADAPTERSTATUS;
      LANAENUM : TLANAENUM;
      intIdx : Integer;
      re : Char;
      buf : String;
    begin
      Try
    {    ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBENUM);
        re := NetBios(@NCB);    // Reissue enum command
        NCB.ncb_buffer := @LANAENUM;
        NCB.ncb_length := SizeOf(LANAENUM);
        re := NetBios(@NCB);
        If Ord(re)<>0 Then
          exit;
     }
     { Copyright (C) Bowman }
     { [email protected] }
        // Reset adapter
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBRESET);
        NCB.ncb_lana_num := LANAENUM.lana[0];//important
        re := NetBios(@NCB);
        If Ord(re)<>0 Then
        begin
          Result := '';
          exit;
        end;
        // Get adapter address
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBASTAT);
        NCB.ncb_lana_num := LANAENUM.lana[0];////bowman
        StrPCopy(NCB.ncb_callname, '*');
        NCB.ncb_buffer := @ADAPTER.adapter_address[0];
        NCB.ncb_length := SizeOf(ADAPTER);
        re := NetBios(@NCB);
        If Ord(re)<>0 Then
          exit;    buf := '';
        For intIdx := 0 To 5 Do
          buf := buf + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2)+'-';
        Result := copy(buf,0,length(buf)-1);
      finally
      //  freemem(@NCB,SizeOf(NCB));
      end;
    end;