📄 devreader.pas
字号:
Result := true;
end;
end;
end;
except
Result := false;
end;
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
var
dtopen, dtclose: Ttime;
Openmm, Closetime, Opentime: string;
currentlytime: string;
Buf: array[0..64] of byte;
i: integer;
begin
currentlytime := formatdatetime('hh:mm', now);
Closetime := formatdatetime('hh:mm', CloseDateTimePicker.DateTime);
if Closetime = currentlytime then begin
if UpsvListBox then begin
if CloseDateTimePicker.DateTime > OpenDateTimePicker.DateTime then
dtopen := 1 - CloseDateTimePicker.DateTime + OpenDateTimePicker.DateTime
else
dtopen := CloseDateTimePicker.DateTime - OpenDateTimePicker.DateTime;
Openmm := formatdatetime('hhmm', dtopen);
Opentime := inttostr(strtoint(copy(Openmm, 1, 2)) * 60 + strtoint(copy(Openmm, 3, 2)));
Closetime := '1';
AddToHistory('');
Readdata := '';
tmpReadData := '';
Closetime := format('%.2d', [StrToIntdef(trim(Closetime), 0)]);
OpenTime := format('%.4d', [StrToIntdef(trim(Opentime), 0)]);
for i := 0 to 64 do Buf[i] := $00;
Buf[0] := $53;
for i := 0 to 1 do Buf[i + 1] := Ord(Closetime[i + 1]);
Buf[3] := $52;
for i := 1 to 4 do Buf[i + 3] := Ord(OpenTime[i]);
//53 30 32 52 - 30 30 30 31 S02R0001 4.0ms 465.2.0
SendCommand(Buf);
for i := 0 to 64 do Buf[i] := $00;
Buf[0] := $0D;
for i := 0 to 1 do Buf[i + 1] := Ord(Closetime[i + 1]);
Buf[3] := $52;
for i := 1 to 4 do Buf[i + 3] := Ord(OpenTime[i]);
//14 DO 0d 30 32 52 - 30 30 30 31 .02R0001 7.9ms 466.2.0
SendCommand(Buf);
InsertLogfile('关机时间离开机时间:' + Opentime + '分钟');
AddToHistory('启动关机,' + OpenTime + '分钟后开机!');
InsertLogfile('关机时输入电压:' + UPSSTATE.InputPower);
InsertLogfile('关机时输出电压:' + UPSSTATE.OutputPower);
InsertLogfile('关机时负载:' + format('%d', [StrToint(UPSSTATE.PowerLoad)]) + '%');
InsertLogfile('关机时温度:' + UPSSTATE.Tmprt);
delay(300);
Timer1.Enabled := false;
close;
end;
end;
end;
procedure TMainForm.Button2Click(Sender: TObject);
var
Buf: array[0..64] of byte;
i: integer;
begin
if UpsvListBox then begin
AddToHistory('');
Readdata := '';
tmpReadData := '';
for i := 0 to 64 do Buf[i] := $00;
Buf[0] := $51;
Buf[1] := $31;
Buf[2] := $0D;
Buf[3] := $6F;
Buf[4] := $F1;
Buf[5] := $CF;
Buf[6] := $11;
Buf[7] := $88;
SendCommand(Buf);
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
MyIni: TIniFile;
IniFile: string;
closetime, opentime, curtime: string;
begin
curtime := formatdatetime('yyyy-mm-dd hh:mm:ss',now);
IniFile := ExtractFilePath(Application.ExeName);
IniFile := IniFile + 'AutoUpDown.ini';
MyIni := TIniFile.Create(IniFile);
closetime := MyIni.ReadString('Atuo', 'closetime', '');
opentime := MyIni.ReadString('Atuo', 'opentime', '');
CloseDateTimePicker.DateTime := strtodatetime(closetime);
OpenDateTimePicker.DateTime := strtodatetime(opentime);
CloseDateTimePicker.Format := 'HH:mm';
OpenDateTimePicker.Format := 'HH:mm';
InsertLogfile('开机时间' + opentime + ' ' + '关机时间' + closetime);
InsertLogfile('系统启动时间:'+ curtime);
end;
procedure TMainForm.Button3Click(Sender: TObject);
var
MyIni: TIniFile;
IniFile: string;
closetime, opentime: string;
begin
IniFile := ExtractFilePath(Application.ExeName);
IniFile := IniFile + 'AutoUpDown.ini';
MyIni := TIniFile.Create(IniFile);
Closetime := formatdatetime('hh:mm', CloseDateTimePicker.DateTime);
opentime := formatdatetime('hh:mm', openDateTimePicker.DateTime);
MyIni.WriteString('Atuo', 'closetime', closetime);
MyIni.WriteString('Atuo', 'opentime', opentime);
AddToHistory('开机:' + opentime + ' 关机:' + closetime + '保存成功!');
InsertLogfile('重新设置开机时间' + opentime + ' ' + '重新设置关机时间' + closetime);
end;
function TMainForm.WinExitInNT(iFlags: integer): boolean;
begin
Close;
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;
function TMainForm.SetPrivilege(sPrivilegeName: string; bEnabled: boolean): boolean;
var
TPPrev,
TP: TTokenPrivileges;
Token: THandle;
dwRetLen: DWord;
begin
Result := False;
//opens the access token associated with a process.
OpenProcessToken(GetCurrentProcess, //handle to process
TOKEN_ADJUST_PRIVILEGES //Required to change the privileges specified in an access token.
or TOKEN_QUERY, //Required to query the contents of an access token.
Token);
TP.PrivilegeCount := 1;
//retrieves the locally unique identifier (LUID) used on a specified system to locally represent the specified privilege name.
if (LookupPrivilegeValue(
nil, //attempts to find the privilege name on the local system.
PChar(sPrivilegeName), // address of string specifying the privilege
TP.Privileges[0].LUID) // address of locally unique identifier
) then
begin
if (bEnabled) then
begin
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
end
else begin
TP.Privileges[0].Attributes := 0;
end;
dwRetLen := 0;
//enables or disables privileges in the specified access token.
Result := AdjustTokenPrivileges(
Token, // handle to token that contains privileges
False, //modifies privileges
TP, // pointer to new privilege information
SizeOf(TPPrev), // size, in bytes, of the TPPrev buffer
TPPrev, // receives original state of changed privileges
dwRetLen // receives required size of the TPPrev buffer
);
end;
CloseHandle(Token);
end;
procedure TMainForm.Delay(waittime: integer);
var
EndTime: DWORD;
begin
EndTime := GetTickCount + waittime;
while GetTickCount < EndTime do
Application.ProcessMessages;
end;
procedure TMainForm.InsertLogfile(log_str: string);
var
F: TextFile;
MyStr: string;
time: string;
sss: string;
FileHandle: Integer;
FileLogpath: string;
MyIni: TIniFile;
begin
MyIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'AutoUpDown.ini');
FileLogpath := ExtractFilePath(Application.ExeName) + MyIni.ReadString('system', 'logfilepath', '\log\');
try
time := FormatDateTime('yyyymmdd', Now) + '_AutoUPDOWN';
sss := FileLogpath + time + '.txt';
if not FileExists(sss) then begin
FileHandle := FileCreate(sss);
FileClose(FileHandle);
end;
AssignFile(F, sss);
Append(F);
MyStr := FormatDateTime('yyyy-mm-dd hh:mm:ss', Now) + ' | ' + log_str;
Writeln(F, MyStr);
Flush(F);
CloseFile(F);
except
exit;
end;
end;
procedure TMainForm.Button4Click(Sender: TObject);
var
dtopen, dtclose: Ttime;
Openmm, Closetime, Opentime: string;
currentlytime: string;
Buf: array[0..64] of byte;
i: integer;
begin
dtopen := CloseDateTimePicker.DateTime - OpenDateTimePicker.DateTime;
Openmm := formatdatetime('hhmm', dtopen);
Opentime := inttostr(strtoint(copy(Openmm, 1, 2)) * 60 + strtoint(copy(Openmm, 3, 2)));
showmessage(opentime);
end;
procedure TMainForm.Timer2Timer(Sender: TObject);
var
Buf: array[0..64] of byte;
i: integer;
begin
Timer2.Enabled := false;
if UpsvListBox then begin
AddToHistory('');
Readdata := '';
tmpReadData := '';
for i := 0 to 64 do Buf[i] := $00;
Buf[0] := $51;
Buf[1] := $31;
Buf[2] := $0D;
Buf[3] := $6F;
Buf[4] := $F1;
Buf[5] := $CF;
Buf[6] := $11;
Buf[7] := $88;
SendCommand(Buf);
delay(5000);
Timer2.Enabled :=true;
end;
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WinExitInNT(EWX_SHUTDOWN); //关机
end;
procedure TMainForm.MinMin(var Msg: TWMSYSCOMMAND);
begin
if (Msg.CmdType=SC_CLOSE) then
Msg.CmdType:=SC_MINIMIZE; //使其最小化
Inherited;
end;
end.
Test bewteen time code
var
dtopen, dtclose: Ttime;
Openmm, Closetime, Opentime: string;
currentlytime: string;
CommandStr: string;
begin
if CloseDateTimePicker.DateTime > OpenDateTimePicker.DateTime then
dtopen := 1 - CloseDateTimePicker.DateTime + OpenDateTimePicker.DateTime
else
dtopen := CloseDateTimePicker.DateTime - OpenDateTimePicker.DateTime;
Openmm := formatdatetime('hhmm', dtopen);
Opentime := inttostr(strtoint(copy(Openmm, 1, 2)) * 60 + strtoint(copy(Openmm, 3, 2)));
showmessage(opentime);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -