Delphi自定义获取网卡MAC地址过程

来源:互联网 发布:win10没有网络图标 编辑:程序博客网 时间:2024/04/29 05:38

//获取网卡MAC地址===============================================================
procedure CvtInt;
asm
        OR      CL,CL
        JNZ     @CvtLoop
@C1:    OR      EAX,EAX
        JNS     @C2
        NEG     EAX
        CALL    @C2
        MOV     AL,'-'
        INC     ECX
        DEC     ESI
        MOV     [ESI],AL
        RET
@C2:    MOV     ECX,10

@CvtLoop:
        PUSH    EDX
        PUSH    ESI
@D1:    XOR     EDX,EDX
        DIV     ECX
        DEC     ESI
        ADD     DL,'0'
        CMP     DL,'0'+10
        JB      @D2
        ADD     DL,('A'-'0')-10
@D2:    MOV     [ESI],DL
        OR      EAX,EAX
        JNE     @D1
        POP     ECX
        POP     EDX
        SUB     ECX,ESI
        SUB     EDX,ECX
        JBE     @D5
        ADD     ECX,EDX
        MOV     AL,'0'
        SUB     ESI,EDX
        JMP     @z
@zloop: MOV     [ESI+EDX],AL
@z:     DEC     EDX
        JNZ     @zloop
        MOV     [ESI],AL
@D5:
end;

function IntToHex(Value: Integer; Digits: Integer): string;
asm
        CMP     EDX, 32        // Digits < buffer length?
        JBE     @A1
        XOR     EDX, EDX
@A1:    PUSH    ESI
        MOV     ESI, ESP
        SUB     ESP, 32
        PUSH    ECX            // result ptr
        MOV     ECX, 16        // base 16     EDX = Digits = field width
        CALL    CvtInt
        MOV     EDX, ESI
        POP     EAX            // result ptr
        CALL    System.@LStrFromPCharLen
        ADD     ESP, 32
        POP     ESI
end;

function MacAddress: string; //获取MAC信息
var      
  Lib: Cardinal;
  Func: function(GUID: PGUID): Longint; stdcall;       
  GUID1, GUID2: TGUID;       
begin
  Result :='';       
  Lib := LoadLibrary('rpcrt4.dll');
  if Lib <> 0 then      
  begin
    @Func := GetProcAddress(Lib, 'UuidCreateSequential');
    if Assigned(Func) then
    begin      
      if (Func(@GUID1) = 0) and      
        (Func(@GUID2) = 0) and      
        (GUID1.D4[2] = GUID2.D4[2]) and      
        (GUID1.D4[3] = GUID2.D4[3]) and      
        (GUID1.D4[4] = GUID2.D4[4]) and      
        (GUID1.D4[5] = GUID2.D4[5]) and      
        (GUID1.D4[6] = GUID2.D4[6]) and      
        (GUID1.D4[7] = GUID2.D4[7]) then      
      begin      
        Result :=       
         IntToHex(GUID1.D4[2], 2) + '-' +
         IntToHex(GUID1.D4[3], 2) + '-' +
         IntToHex(GUID1.D4[4], 2) + '-' +       
         IntToHex(GUID1.D4[5], 2) + '-' +       
         IntToHex(GUID1.D4[6], 2) + '-' +
         IntToHex(GUID1.D4[7], 2);       
      end;       
    end;       
    FreeLibrary(Lib);       
  end;       
end;

原创粉丝点击