📄 u_sharefun.~pas
字号:
unit u_ShareFun;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;
// CPU ID 专用变量========================================
CONST
ID_BIT = $200000 ;
TYPE
TCPUID = ARRAY[1..4] OF LONGINT;
TVENDOR = ARRAY[0..11] OF CHAR;
//========================================================
// CPU 信息专用函数=======================================
FUNCTION IsCPUID_Available : BOOLEAN ; register;
FUNCTION GetCPUID : TCPUID ; assembler ; register;
FUNCTION GetCPUVendor : TVendor ; assembler ; register;
//========================================================
FUNCTION REGISTER_JXC_CREATER(T_REG_NAME:STRING):BOOLEAN;
FUNCTION REGISTER_JXC_REGISTER(T_REG_NAME,T_SF_ID:STRING):BOOLEAN;
FUNCTION REGISTER_KEY_VALUE_STR(T_REG_NAME,T_KEY:STRING):STRING;
FUNCTION REGISTER_KEY_VALUE_INT(T_REG_NAME,T_KEY:STRING):INTEGER;
FUNCTION REGISTER_NUMBER_JXC(CPU_ID:LONGINT):STRING;
FUNCTION REGISTER_KEY_VALUE_DATE(T_REG_NAME,T_KEY:STRING):TDATE;
FUNCTION REGISTER_KEY_CHECK(T_REG_NAME:STRING):BOOLEAN;
FUNCTION REGISTER_KEY_CREATE(T_REG_NAME:STRING):BOOLEAN;
FUNCTION REGISTER_KEY_DELETE(T_REG_NAME:STRING):BOOLEAN;
// 判断字符是否是数字
function IsNumeric(Data: string) : boolean;
VAR
IsJXCAvailable : Boolean ;
JXC_UserBH : String ;
JXC_UserName : String ;
JXC_Temp : String ;
implementation
FUNCTION IsCPUID_Available : BOOLEAN ; register;
asm
PUSHFD {direct access to flags no possible, only via stack}
POP EAX
MOV EDX,EAX
XOR EAX,ID_BIT
PUSH EAX
POPFD
PUSHFD
POP EAX
XOR EAX,EDX
JZ @EXIT
MOV AL,TRUE
@EXIT:
END;
FUNCTION GetCPUID : TCPUID ; assembler ; register;
asm
PUSH EBX
PUSH EDI
MOV EDI,EAX
MOV EAX,1
DW $A20F
STOSD
MOV EAX,ECX
STOSD
POP EDI
POP EBX
END;
FUNCTION GetCPUVendor : TVendor ; assembler ; register;
asm
PUSH EBX
PUSH EDI
MOV EDI,EAX
MOV EAX,0
DW $A20F
MOV EAX,EBX
XCHG EBX,ECX
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI
POP EBX
END;
FUNCTION REGISTER_JXC_CREATER(T_REG_NAME:STRING):BOOLEAN;
VAR
REG:TRegistry;
BEGIN
REG:=TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
IF Reg.OpenKey(T_REG_NAME,TRUE) THEN
BEGIN
Reg.WriteDate('RUN_FIRST_DATE',DATE);
Reg.WriteInteger('CPU_ID' ,GetCPUID[4]);
Reg.WriteString('SF_ID' ,'');
RESULT :=TRUE;
END
ELSE
RESULT :=FALSE;
FINALLY
Reg.CloseKey;
Reg.Free;
END;
END;
FUNCTION REGISTER_JXC_REGISTER(T_REG_NAME,T_SF_ID:STRING):BOOLEAN;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
IF REG.OpenKey(T_REG_NAME,TRUE) THEN
BEGIN
REG.WriteString('SF_ID',T_SF_ID);
RESULT:=TRUE;
END
ELSE
RESULT:=FALSE;
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
FUNCTION REGISTER_KEY_VALUE_STR(T_REG_NAME,T_KEY:STRING):STRING;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
IF REG.OpenKey(T_REG_NAME,TRUE) THEN
RESULT:=REG.ReadString(T_KEY);
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
FUNCTION REGISTER_KEY_VALUE_INT(T_REG_NAME,T_KEY:STRING):INTEGER;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
IF REG.OpenKey(T_REG_NAME,TRUE) THEN
RESULT:=REG.ReadInteger(T_KEY);
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
FUNCTION REGISTER_NUMBER_JXC(CPU_ID:LONGINT):STRING;
VAR
T_REG:LONGINT;
BEGIN
T_REG:=(((CPU_ID*6)+6)*6)+6;
RESULT:=COPY(INTTOSTR(T_REG),1,8);
END;
FUNCTION REGISTER_KEY_VALUE_DATE(T_REG_NAME,T_KEY:STRING):TDATE;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
IF REG.OpenKey(T_REG_NAME,TRUE) THEN
RESULT:=REG.ReadDate(T_KEY);
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
FUNCTION REGISTER_KEY_CHECK(T_REG_NAME:STRING):BOOLEAN;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
IF REG.OpenKey(T_REG_NAME,TRUE) THEN
RESULT:=REG.ValueExists('CPU_ID');
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
FUNCTION REGISTER_KEY_CREATE(T_REG_NAME:STRING):BOOLEAN;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
REG.OpenKey(T_REG_NAME,TRUE);
RESULT:=TRUE;
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
FUNCTION REGISTER_KEY_DELETE(T_REG_NAME:STRING):BOOLEAN;
var
REG:TREGISTRY;
BEGIN
REG:=TREGISTRY.Create;
TRY
REG.RootKey:=HKEY_CURRENT_USER;
REG.DeleteKey(T_REG_NAME);
RESULT:=TRUE;
FINALLY
REG.CloseKey;
REG.Free;
END;
END;
function IsNumeric(Data: string) : boolean;
var
i, code : integer;
r : real ;
begin
val(data, r, code);
if code = 0 then
result := true
else
result := false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -