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

    技术2022-05-20  48

    //获取网卡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     ESIend;function MacAddress: string; //获取MAC信息var         Lib: CardinalFunc: 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;


    最新回复(0)