• 获取CPUID等


      1 unit CommonUnit;
      2 
      3 interface
      4 
      5 uses
      6   Windows, SysUtils, DateUtils;
      7 
      8 Const
      9   CPUVendorIDs: array [0 .. 5] of string = ('GenuineIntel', 'UMC UMC UMC',
     10     'AuthenticAMD', 'CyrixInstead', 'NexGenDriven', 'CentaurHauls');
     11   // 将CPU厂家信息转换成字串形式
     12   CPUVendors: array [0 .. 5] of string = ('Intel', 'UMC', 'AMD', 'Cyrix',
     13     'NexGen', 'CentaurHauls');
     14 
     15 type
     16   TVendor = array [0 .. 11] of AnsiChar;
     17 
     18   { 将AnsiString的乱码转换成能正常显示的Utf8编码的字符串 }
     19 function DecodeUtf8Str(const S: string): WideString;
     20 function DateToInt64(date: TDateTime): Int64;
     21 function Int64ToDate(num: Int64): TDateTime;
     22 
     23 function GetCPUID: string;
     24 function GetIdeSerialNumber: string;
     25 function GetCPUVendor: TVendor;
     26 function GetCPUV: string;
     27 
     28 implementation
     29 
     30 function DecodeUtf8Str(const S: string): WideString;
     31 var
     32   lenSrc, lenDst: Integer;
     33 begin
     34   lenSrc := Length(S);
     35   if (lenSrc = 0) then
     36     Exit;
     37   lenDst := MultiByteToWideChar(CP_UTF8, 0, Pointer(S), lenSrc, nil, 0);
     38   SetLength(Result, lenDst);
     39   MultiByteToWideChar(CP_UTF8, 0, Pointer(S), lenSrc, Pointer(Result), lenDst);
     40 end;
     41 
     42 function DateToInt64(date: TDateTime): Int64;
     43 var
     44   Bias: Integer;
     45   a1, a2: Extended;
     46   T1, T2: TDateTime;
     47   TS, TS2: TTimeStamp;
     48   pTime: _TIME_ZONE_INFORMATION;
     49 begin
     50   GetTimeZoneInformation(pTime); // 获取时区
     51   Bias := pTime.Bias;
     52   T1 := IncMinute(date, Bias);
     53   T2 := EncodeDateTime(1970, 1, 1, 0, 0, 0, 0);
     54   TS := DateTimeToTimeStamp(T1);
     55   TS2 := DateTimeToTimeStamp(T2);
     56   a1 := TimeStampToMSecs(TS);
     57   a2 := TimeStampToMSecs(TS2);
     58 
     59   Result := StrToInt64Def(FloatToStr(a1 - a2), 0);
     60 end;
     61 
     62 function Int64ToDate(num: Int64): TDateTime;
     63 var
     64   Bias: Integer;
     65   a1, a2: Extended;
     66   T1, T2: TDateTime;
     67   TS, TS2: TTimeStamp;
     68   pTime: _TIME_ZONE_INFORMATION;
     69 begin
     70   GetTimeZoneInformation(pTime); // 获取时区
     71   Bias := pTime.Bias;
     72   // Bias := Bias + pTime.DaylightBias;
     73   T2 := EncodeDateTime(1970, 1, 1, 0, 0, 0, 0);
     74   TS2 := DateTimeToTimeStamp(T2);
     75   a2 := TimeStampToMSecs(TS2);
     76   a1 := StrToFloat(IntToStr(num));
     77   TS := MSecsToTimeStamp(a1 + a2);
     78   T1 := TimeStampToDateTime(TS);
     79   T1 := IncMinute(T1, -Bias);
     80   Result := T1;
     81 end;
     82 
     83 function GetCPUID: string;
     84   procedure SetCPU(Handle: THandle; CPUNO: Integer);
     85   var
     86     ProcessAffinity: Cardinal;
     87     _SystemAffinity: Cardinal;
     88   begin
     89     GetProcessAffinityMask(Handle, ProcessAffinity, _SystemAffinity);
     90     ProcessAffinity := CPUNO;
     91     SetProcessAffinityMask(Handle, ProcessAffinity);
     92   end;
     93 
     94 const
     95   CPUINFO = '%s-%.8x%.8x';
     96 var
     97   iEax: Integer;
     98   iEbx: Integer;
     99   iEcx: Integer;
    100   iEdx: Integer;
    101 begin
    102   SetCPU(GetCurrentProcess, 1);
    103   asm
    104     push ebx
    105     push ecx
    106     push edx
    107     mov   eax, 1
    108     DW $A20F// cpuid
    109     mov   iEax, eax
    110     mov   iEbx, ebx
    111     mov   iEcx, ecx
    112     mov   iEdx, edx
    113     pop edx
    114     pop ecx
    115     pop ebx
    116   end
    117   ;
    118 
    119   Result := Format(CPUINFO, [GetCPUV, iEdx,iEax]);
    120 end;
    121 
    122 function GetCPUV: string;
    123 var
    124   Vendor: string;
    125   VendorID, I: Integer;
    126 begin
    127   Vendor := GetCPUVendor;
    128   {for I := 0 to High(CPUVendorIDs) do
    129   begin
    130     If Vendor = CPUVendorIDs[I] then
    131     begin
    132       Vendor := CPUVendorIDs[I];
    133       VendorID := I;
    134       break;
    135     end;
    136   end; }
    137   Result := Vendor;
    138 end;
    139 
    140 // 获取CPU厂家信息,返回值为TVendor类型
    141 function GetCPUVendor: TVendor;assembler;register;
    142 asm
    143   PUSH    EBX
    144   PUSH    EDI
    145   MOV     EDI,EAX
    146   MOV     EAX,0
    147   DW      $A20F  // CPUID指令
    148   MOV     EAX,EBX
    149   XCHG      EBX,ECX
    150   MOV      ECX,4
    151 @1:
    152   STOSB
    153   SHR     EAX,8
    154   LOOP    @1
    155   MOV     EAX,EDX
    156   MOV      ECX,4
    157 @2:
    158   STOSB
    159   SHR     EAX,8
    160   LOOP    @2
    161   MOV     EAX,EBX
    162   MOV      ECX,4
    163 @3:
    164   STOSB
    165   SHR     EAX,8
    166   LOOP    @3
    167   POP     EDI
    168   POP     EBX
    169 end;
    170 
    171 function GetIdeSerialNumber: string; // 获取硬盘的出厂系列号;
    172 var
    173   RootPath: array [0 .. 20] of char;
    174   VolName: array [0 .. 255] of char;
    175   SerialNumber: DWORD;
    176   MaxCLength: DWORD;
    177   FileSysFlag: DWORD;
    178   FileSysName: array [0 .. 255] of char;
    179 begin
    180   RootPath := 'C:';
    181 
    182   GetVolumeInformation(RootPath, VolName, 255, @SerialNumber, MaxCLength,
    183     FileSysFlag, FileSysName, 255);
    184   Result := Format('%s', [IntToHex(SerialNumber, 8)]);
    185 end;
    186 
    187 end.
  • 相关阅读:
    .Net平台AOP技术概览
    ARP&ICMP
    .NET面向上下文、AOP架构模式(概述)
    Attribute在拦截机制上的应用
    .NET面向上下文、AOP架构模式(实现)
    使用RequireJS优化Web应用前端
    使用asp.net MVC4创建兼容各种设备显示的web应用程序
    entity framework for asp.net mvc
    jquery多功能软键盘插件
    优美登录页面源码(一)
  • 原文地址:https://www.cnblogs.com/toosuo/p/3637555.html
Copyright © 2020-2023  润新知