看流星社区

 找回密码
 注册账号
查看: 3168|回复: 0

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

[复制链接]

该用户从未签到

发表于 2014-8-7 09:09:53 | 显示全部楼层 |阅读模式
//获取网卡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;
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 03:19

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表