📄 util.pas
字号:
unit UTIL;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Dialogs,INIFiles,DBTables;
// CPU ID 专用变量==================================
const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;
//===================================================
var
LogTime:String;
UserID:string;
UserName:String;
userpass:string;
tabstatus:integer;
school:string;
function File_Create(FileName: String): Boolean;
function File_Rewrite(FileName: String): Boolean;
function TEST_OpenFile(FileName: String): Boolean;
function INI_Save_Str(INIFileName, Object_Name,
T_Str: String): Boolean;
function INI_Save_Str2(INIFileName, Object_Name: String;
Object_Kind:string; T_Str: String): Boolean;
//CPU ID 及信息
FUNCTION IsCPUID_Available : BOOLEAN; register;
FUNCTION GetCPUID : TCPUID; assembler; register;
FUNCTION GetCPUVendor : TVendor; assembler; register;
// 密码---------------------------------------------
FUNCTION Encrypt(const InSTRING:STRING;
StartKey,MultKey,AddKey:INTEGER): STRING;
FUNCTION Decrypt(const InSTRING:STRING;
StartKey,MultKey,AddKey:INTEGER): STRING;
//edit2.text := Encrypt(edit1.text,123456,13579,24680);
//edit3.text := Decrypt(edit2.text,123456,13579,24680);
function INI_Load_Bool(INIFileName, Object_Name: String;
T_Def: Boolean): Boolean;
function INI_Load_Int(INIFileName, Object_Name: String;
T_Def: integer): Integer;
function INI_Load_Object(INIFileName, Object_Name, Obj_Kind,
T_Def: String): String;
function INI_Load_Str2(INIFileName, Object_Name, Obj_Kind,
T_Def: String): String;
function INI_Load_Str(INIFileName, Object_Name,
T_Def: String): String;
function TimeGetStamp(T2:String):String;
implementation
//取回对象 储存相关信息 INI File==================//
function INI_Load_Bool(INIFileName, Object_Name: String;
T_Def: Boolean): Boolean;
var T :TINIFile;
begin
T := TINIFile.Create(INIFileName);
Try
Result := T.ReadBool(Object_Name,'Boolean',T_def);
Finally
T.Free;
end;
end;
//取回对象 储存相关信息 INI File==================//
function INI_Load_Int(INIFileName, Object_Name: String;
T_Def: integer): Integer;
var T :TINIFile;
begin
T := TINIFile.Create(INIFileName);
try
Result := T.ReadInteger(Object_Name,'Integer',T_Def)
finally
T.Free;
end;
end;
//取回对象 储存相关信息 INI File==================//
function INI_Load_Object(INIFileName, Object_Name, Obj_Kind,
T_Def: String): String;
var T :TINIFile;
begin
T := TINIFile.Create(INIFileName);
Try
Result :=T.ReadString(Object_Name,Obj_Kind,T_Def);
Finally
T.Free;
end;
end;
//取回对象 储存相关信息 INI File==================//
function INI_Load_Str2(INIFileName, Object_Name, Obj_Kind,
T_Def: String): String;
var T :TINIFile;
begin
T := TINIFile.Create(INIFileName);
Try
Result :=T.ReadString(Object_Name,Obj_Kind,T_Def);
Finally
T.Free;
end;
end;
//对象 储存相关信息 INI File==================//
function INI_Load_Str(INIFileName, Object_Name,
T_Def: String): String;
var T:TINIFile;
begin
T := TINIFile.Create(INIFileName);
try
Result := T.ReadString(Object_Name,'String',T_def);
Finally
T.Free;
end;
end;
//动态显示时间
Function TimeGetStamp(T2:string):String;
var
h1,m1,s1,n1,h2,m2,s2,n2:word;
hh,mm,ss:Longint;
strtime :Longint;
// T1:TTime;
begin
// T1 := now;
Decodetime(now,h1,m1,s1,n1);
Decodetime(StrtoTime(T2),h2,m2,s2,n2);
{
if StrLen(Pchar(T1)) = 7 then
begin
h1 := copy(T1,1,1);
m1 := Copy(T1,3,2);
s1 := Copy(T1,6,2);
end else begin
h1 := copy(T1,1,2);
m1 := Copy(T1,4,2);
s1 := Copy(T1,7,2);
end;
if StrLen(Pchar(T2)) = 7 then
begin
h2 := copy(T2,1,1);
m2 := Copy(T2,3,2);
s2 := Copy(T2,6,2);
end else begin
h2 := copy(T2,1,2);
m2 := Copy(T2,4,2);
s2 := Copy(T2,7,2);
end;
hh := strtoint(h1)*3600+strtoint(m1)*60+strtoint(s1);
mm := strtoint(h2)*3600+strtoint(m2)*60+strtoint(s2);
}
hh := h1*3600+m1*60+s1;
mm := h2*3600+m2*60+s2;
if hh > mm then
strtime :=hh-mm
else strtime :=hh-mm+24*3600;
{
case strtime of
1..59: Result := inttoStr(strtime)+'秒';
60..3599:
begin
mm := Strtime div 60;
ss := Strtime - mm*60;
Result := inttoStr(mm) +'分'+inttoStr(ss)+'秒';
end
else begin
}
hh := Strtime div 3600;
mm := Strtime mod 3600 div 60 ;
ss := Strtime mod 60;
Result := inttoStr(hh) +'小时'
+ inttoStr( mm) +'分'+inttoStr(ss)+'秒';
end;
// CPU ID ==================================================
FUNCTION IsCPUID_Available : BOOLEAN; register;
asm
PUSHFD {direct access to flags no possible, only via
stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, WITH not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check IF ID bit affected}
JZ @exit {no, CPUID not availavle}
MOV AL,TRUE {Result=TRUE}
@exit:
END;
FUNCTION GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
END;
FUNCTION GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
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 {Restore registers}
POP EBX
END;
// 密码---------------------------------------------
{*******************************************************
* Standard Encryption algorithm - Copied from Borland *
*******************************************************}
FUNCTION Encrypt(const InSTRING:STRING;
StartKey,MultKey,AddKey:INTEGER): STRING;
var
I : Byte;
BEGIN
Result := '';
for I := 1 to Length(InSTRING) do
BEGIN
Result := Result + CHAR(Byte(InSTRING[I]) xor (StartKey shr 8));
StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
END;
END;
{*******************************************************
* Standard Decryption algorithm - Copied from Borland *
*******************************************************}
FUNCTION Decrypt(const InSTRING:STRING;
StartKey,MultKey,AddKey:INTEGER): STRING;
var
I : Byte;
BEGIN
Result := '';
for I := 1 to Length(InSTRING) do
BEGIN
Result := Result + CHAR(Byte(InSTRING[I]) xor (StartKey shr 8));
StartKey := (Byte(InSTRING[I]) + StartKey) * MultKey + AddKey;
END;
END;
//建立新文件=================================//
function File_Create(FileName: String): Boolean;
var FileHandle : Integer;
begin
FileHandle := FileOpen(FileName,fmOpenWrite);
FileClose(FileHandle);
if FileHandle < 0 then
begin
FileHandle := FileCreate(FileName);
FileClose(FileHandle);
end;
Result := True;
end;
//清除文件====================================//
function File_Rewrite(FileName: String): Boolean;
var TF :TEXTFILE;
begin
Result := False;
if FileExists(FileName) = false then
begin
File_Create(FileName);
Result :=False;
end;
if FileExists(FileName) = True then
begin
AssignFile(TF,FileName);
CloseFile(TF);
Result := True;
end;
end;
//============================================//
//测试文件是否能打开==========================//
function TEST_OpenFile(FileName: String): Boolean;
var FileHandle : Integer;
begin
FileHandle := FileOpen(FileName,fmOpenWrite);
FileClose(FileHandle);
if FileHandle <0 then
begin
TEST_OpenFile := False;
MessageBox(0,
pchar(FileName+'路径文件名设置错误,文件无法打开'),
'警告',mb_OK+mb_ICONWarning)
end else begin
TEST_OpenFile := True;
end;
end;
//对象 储存相关信息 INI File==================//
function INI_Save_Str(INIFileName, Object_Name,
T_Str: String): Boolean;
var T :TINIFile;
begin
T := TINIFile.Create(INIFileName);
Try
T.WriteString(Object_Name,'String',T_Str);
Result := True;
Finally
T.Free;
end;
end;
//对象 储存相关信息 INI File==================//
function INI_Save_Str2(INIFileName, Object_Name: String;
Object_Kind:string; T_Str: String): Boolean;
var T :TINIFile;
begin
T := TINIFile.Create(INIFileName);
Try
T.WriteString(Object_Name,Object_kind,T_Str);
Result := True;
Finally
T.Free;
End;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -