📄 unittimetoclose1.~pas
字号:
unit UnitTimeToClose1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,strutils, Graphics,dateutils, Controls, Forms,
Dialogs,inifiles, ExtCtrls, StdCtrls,registry, ComCtrls, Menus;
type
TFormTimeToClose = class(TForm)
StatusBar1: TStatusBar;
GroupBox1: TGroupBox;
UpDown1: TUpDown;
Edit1: TEdit;
UpDown2: TUpDown;
Edit2: TEdit;
UpDown3: TUpDown;
Edit3: TEdit;
CheckBox1: TCheckBox;
Bevel1: TBevel;
Timer1: TTimer;
Button1: TButton;
CheckBox3: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);
procedure UpDown3Click(Sender: TObject; Button: TUDBtnType);
procedure Edit1Click(Sender: TObject);
procedure Edit2Click(Sender: TObject);
procedure Edit3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure AdjustToken();
procedure settime();
procedure FormShow(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
shuttime:string;
tishi:boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
FormTimeToClose: TFormTimeToClose;
implementation
uses UnitTimeToClose2;
{$R *.dfm}
procedure TFormTimeToClose.FormCreate(Sender: TObject);
var myini:tinifile;filename:string;
begin
Filename:=ExtractFilePath(Paramstr(0))+'info.ini';
myini:=Tinifile.create(filename);
self.CheckBox1.Checked:=myini.Readbool('shutdown','shut',true);
self.Edit1.Text:=myini.ReadString('time','hour','22');
self.Edit2.Text:=myini.ReadString('time','minute','45');
self.CheckBox3.Checked:=myini.Readbool('hint','tishi',true);
myini.Free;
self.settime;
if shuttime='' then
shuttime:='22:45:00';
tishi:=true;
if strtotime(shuttime)<=time() then
begin
checkbox1.Checked:=false;
end;
end;
procedure TFormTimeToClose.Timer1Timer(Sender: TObject);
var myt:string;
FormTimeToCloseWarm:tFormTimeToCloseWarm;
begin
if self.CheckBox1.Checked then
begin
if strtotime(shuttime)<=time() then
begin
self.AdjustToken;
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF,0);
end;
end;
if checkbox3.Checked then
begin
if tishi then
begin
if checkbox1.Checked then
begin
try
myt:=datetimetostr(incminute(strtodatetime('2003-10-25 '+shuttime),-5));
myt:=rightstr(trim(myt),8);
if strtotime(myt)<=time() then
begin
tishi:=false;
try
FormTimeToCloseWarm:=tFormTimeToCloseWarm.Create(self);
FormTimeToCloseWarm.ShowModal;
finally
FormTimeToCloseWarm.Free;
end;
end;
except
end;
end;
end;
end;
end;
procedure TFormTimeToClose.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
edit1.Text:=inttostr(self.UpDown1.Position);
end;
procedure TFormTimeToClose.UpDown2Click(Sender: TObject; Button: TUDBtnType);
begin
edit2.Text:=inttostr(self.UpDown2.Position);
end;
procedure TFormTimeToClose.UpDown3Click(Sender: TObject; Button: TUDBtnType);
begin
edit3.Text:=inttostr(self.UpDown3.Position);
end;
procedure TFormTimeToClose.Edit1Click(Sender: TObject);
begin
self.Edit1.SelectAll;
end;
procedure TFormTimeToClose.Edit2Click(Sender: TObject);
begin
self.Edit2.SelectAll;
end;
procedure TFormTimeToClose.Edit3Click(Sender: TObject);
begin
self.Edit3.SelectAll;
end;
procedure TFormTimeToClose.Button1Click(Sender: TObject);
var myini:tinifile; filename:string;
begin
self.settime;
Filename:=ExtractFilePath(Paramstr(0))+'info.ini';
myini:=Tinifile.create(filename);
myini.WriteBool('shutdown','shut',checkbox1.Checked);
if (edit1.Text<>'') and (edit2.Text<>'') then
begin
myini.WriteString('time','hour',edit1.Text);
myini.WriteString('time','minute',edit2.Text);
end;
myini.WriteBool('hint','tishi',checkbox3.Checked);
myini.Free;
self.Close;
//self.Caption:=shuttime;
end;
procedure TFormTimeToClose.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not((key in ['0'..'9',#8])) then
begin
key:=#0;
edit1.Clear;
edit1.SetFocus;
end;
end;
procedure TFormTimeToClose.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not((key in ['0'..'9',#8])) then
begin
key:=#0;
edit2.Clear;
edit2.SetFocus;
end;
end;
procedure TFormTimeToClose.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if not((key in ['0'..'9',#8])) then
begin
key:=#0;
edit3.Clear;
edit3.SetFocus;
end;
end;
procedure TFormTimeToClose.AdjustToken();
var
hdlProcessHandle : Cardinal;
hdlTokenHandle : Cardinal;
tmpLuid : Int64;
tkp : TOKEN_PRIVILEGES;
tkpNewButIgnored : TOKEN_PRIVILEGES;
lBufferNeeded : Cardinal;
Privilege : array[0..0] of _LUID_AND_ATTRIBUTES;
begin
hdlProcessHandle := GetCurrentProcess;
OpenProcessToken(hdlProcessHandle,
(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),
hdlTokenHandle);
// Get the LUID for shutdown privilege.
LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
Privilege[0].Luid := tmpLuid;
Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1; // One privilege to set
tkp.Privileges[0] := Privilege[0];
// Enable the shutdown privilege in the access token of this
// process.
AdjustTokenPrivileges(hdlTokenHandle,
False,
tkp,
Sizeof(tkpNewButIgnored),
tkpNewButIgnored,
lBufferNeeded);
end;
procedure TFormTimeToClose.settime();
begin
if (self.Edit1.Text<>'') and (edit2.Text<>'') and (edit3.Text<>'') then
begin
if length(trim(edit1.Text))=1 then
shuttime:='0'+edit1.Text else
shuttime:=edit1.Text;
if length(trim(edit2.Text))=1 then
shuttime:=shuttime+':'+'0'+edit2.Text else
shuttime:=shuttime+':'+edit2.Text;
if length(trim(edit3.Text))=1 then
shuttime:=shuttime+':'+'0'+edit3.Text else
shuttime:=shuttime+':'+edit3.Text;
end;
end;
procedure TFormTimeToClose.FormShow(Sender: TObject);
begin
timer1.Interval:=5000;
end;
procedure TFormTimeToClose.CheckBox1Click(Sender: TObject);
begin
self.settime;
if (checkbox1.Checked) and (strtotime(shuttime)<=time()) then
begin
checkbox1.Checked:=false;
showmessage('设定的时间比现在时间早!');
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -