📄 globals.pas
字号:
if FileExists(myGetSystemDirectory+'\dxdiag.exe') then Result:=myGetSystemDirectory+'\dxdiag.exe' else
if FileExists(myGetWindowsDirectory+'\dxdiag.exe') then Result:=myGetWindowsDirectory+'\dxdiag.exe'
else Result:='dxdiag';
end;
Function ResultRegeditFile:string;
begin
if FileExists(myGetSystemDirectory+'\regedit.exe') then Result:=myGetSystemDirectory+'\regedit.exe' else
if FileExists(myGetWindowsDirectory+'\regedit.exe') then Result:=myGetWindowsDirectory+'\regedit.exe'
else Result:='regedit';
end;
Procedure ExitWindowsSystem(Const I:integer);
function SetPrivilege(sPrivilegeName : string;bEnabled : boolean ): boolean;
var //NT关机准备函数
TPPrev,TP : TTokenPrivileges;
Token : THandle;
dwRetLen : DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
TP.PrivilegeCount:=1;
if( LookupPrivilegeValue(Nil,PChar( sPrivilegeName ),TP.Privileges[ 0 ].LUID ))then
begin
if( bEnabled )then //Give this privileges
begin
TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
end
else begin //NOT Give this privileges
TP.Privileges[ 0 ].Attributes := 0;
end;
dwRetLen := 0;
//enables or disables privileges in the specified access token.
Result := AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),TPPrev,dwRetLen);
end;
CloseHandle( Token );
end;
function WinExitInNT( iFlags : integer ) : boolean;
begin //NT关机函数
Result := True;
if( SetPrivilege( 'SeShutdownPrivilege',True ) )then
begin
if( not ExitWindowsEx( iFlags,0 ) )then
begin
Result := False;
end;
SetPrivilege( 'SeShutdownPrivilege',False )
end
else begin
Result := False;
end;
end;
begin
case I of
0 : begin
win32check(exitwindows(0,0)); //第一个注销
win32check(exitwindowsex(ewx_logoff,0));//第二个注销
end;
1 : begin //重启系统
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF,32);
if win32platform =ver_platform_win32_NT then WinExitInNT(EWX_FORCE+EWX_reboot);
end;
2 : begin //关闭系统
if win32platform =ver_platform_win32_windows then exitwindowsex(ewx_force+ewx_shutdown+ewx_poweroff,32);
if win32platform =ver_platform_win32_NT then WinExitInNT(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF);
//以下为自添多个关机过程
exitwindowsex(ewx_logoff+ewx_force,32);
exitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF,0);
exitwindowsex(ewx_shutdown,32);
WinExitInNT(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF);
end ;
end;
end;
Procedure EmptyRecycleBin ; //清空回收站
Const
SHERB_NOCONFIRMATION = $00000001 ;
SHERB_NOPROGRESSUI = $00000002 ;
SHERB_NOSOUND = $00000004 ;
Type
TSHEmptyRecycleBin = function (Wnd : HWND ;LPCTSTR : PChar ;DWORD : Word ) : Integer ; stdcall ;
Var
SHEmptyRecycleBin : TSHEmptyRecycleBin ;
LibHandle : THandle ;
Begin
LibHandle := LoadLibrary(PChar('Shell32.dll')) ;
If LibHandle <> 0 then
@SHEmptyRecycleBin := GetProcAddress(LibHandle, 'SHEmptyRecycleBinA')
Else
Begin
MessageDlg('Failed to load Shell32.dll.', mtError, [mbOK], 0);
Exit ;
End ;
If @SHEmptyRecycleBin <> nil then SHEmptyRecycleBin(Application.Handle ,'' ,SHERB_NOCONFIRMATION or SHERB_NOPROGRESSUI or SHERB_NOSOUND ) ;
FreeLibrary(LibHandle);
@SHEmptyRecycleBin := nil ;
End ;
function SearchAllFile(Path:string;Ext:string):TStrings;
var //搜索指定目录下的所有指定扩展名的文件,返回全路径文件名到TSrings字符串 Path 路径(ExtractFilePath(ParamStr(0))),Ext扩展名(*.ini)
ResultStrings:TStrings;
SResult:integer;
SearchRec:TsearchRec;
begin
ResultStrings:=TStringList.Create;
SResult:=FindFirst(format('%s\', [Path])+Ext, faAnyFile, SearchRec);
while SResult=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and (SearchRec.Attr<>faDirectory) and (LowerCase(SearchRec.Name)<>'desktop.ini') then
begin
//ResultStrings.Add(ChangeFileExt(SearchRec.Name,'')); //反回去扩展名的
ResultStrings.Add(format('%s\',[Path])+SearchRec.Name);
end;
SResult:=FindNext(SearchRec);
end;
FindClose(SearchRec);
Result:=ResultStrings;
end;
Function RegValueExists(RootKEY:HKEY;Const Openkey,KeyName:string):boolean;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if (Reg.OpenKey(OpenKey,False))and(Reg.ValueExists(KeyName)) then Result:=True else Result:=False;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function RegKeyExists(RootKEY:HKEY;Const Openkey,KeyName:string):boolean;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if (Reg.OpenKey(OpenKey,False))and(Reg.KeyExists(KeyName)) then Result:=True else Result:=False;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function DeleteKey(RootKEY:HKEY;Const Openkey,KeyName:string):boolean;
var
Reg:TRegistry;
begin
try
Reg:=Tregistry.Create;
Reg.RootKey:=RootKEY;
Reg.OpenKey(Openkey,False);
Result:=Reg.DeleteKey(KeyName);
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function DeleteValue(RootKEY:HKEY;Const Openkey,KeyName:string):boolean;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if (Reg.OpenKey(OpenKey,False))and(Reg.ValueExists(KeyName)) then Result:=Reg.DeleteValue(KeyName) else Result:=True;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function GetRegStringKey(RootKEY:HKEY;Const Openkey,KeyName:string):String;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if (Reg.OpenKey(OpenKey,False))and(Reg.ValueExists(KeyName)) then Result:=Reg.ReadString(KeyName) else Result:='';
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function SetRegStringKey(RootKEY:HKEY;Const Openkey,KeyName,KeyValue:string):Boolean;
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey:=RootKey;
if Reg.OpenKey(OpenKey,True) then Reg.WriteString(KeyName,KeyValue);
Finally
Reg.CloseKey;
Reg.Free;
Result:=False;
end;
Result:=True;
end;
Function GetRegIntegerKey(RootKEY:HKEY;Const Openkey,KeyName:string):integer;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if (Reg.OpenKey(OpenKey,False))and(Reg.ValueExists(KeyName)) then Result:=Reg.ReadInteger(KeyName) else Result:=0;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function SetRegIntegerKey(RootKEY:HKEY;Const Openkey,KeyName:string;KeyValue:integer):Boolean;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if Reg.OpenKey(OpenKey,True) then Reg.WriteInteger(KeyName,KeyValue);
Finally
Reg.CloseKey;
Reg.Free;
Result:=False;
end;
Result:=True;
end;
Function GetRegBinaryKey(RootKEY:HKEY;Const Openkey,KeyName:string):Byte;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if (Reg.OpenKey(OpenKey,False))and(Reg.ValueExists(KeyName)) then Reg.ReadBinaryData(KeyName,Result,512) else Result:=0;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Function SetRegBinaryKey(RootKEY:HKEY;Const Openkey,KeyName:string;KeyValue:Byte):Boolean;
var
Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
Reg.RootKey:=RootKey;
if Reg.OpenKey(OpenKey,True) then Reg.WriteBinaryData(KeyName,KeyValue,SizeOf(KeyValue));//写注册表
Finally
Reg.CloseKey;
Reg.Free;
Result:=False;
end;
Result:=True;
end;
Function BooleanToInteger(Const BooleanValue:Boolean):integer;
begin
if BooleanValue then result:=1 else result:=0;
end;
Function IntegerToBoolean(Const IntegerValue:integer):Boolean;
begin
if IntegerValue>0 then result:=True else result:=False;
end;
Function YesNoToBoolean(Const YesNoValue:string):Boolean;
begin
if LowerCase(YesNoValue)='yes' then result:=True else result:=False;
end;
Function BooleanToYesNo(Const BooleanValue:boolean):string;
begin
if BooleanValue then result:='yes' else result:='no';
end;
Function StringToBoolean(Const StringValue:string):Boolean;
begin
if StringValue>'0' then result:=True else result:=False;
end;
Function BooleanToString(Const BooleanValue:boolean):string;
begin
if BooleanValue then result:='1' else result:='0';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -