📄 dmhook.pas
字号:
{*******************************************************}
{* Email: fansheng_hx@163.com *}
{* QQ: 39262884 *}
{*******************************************************}
unit DMHook;
interface
uses
Windows, SysUtils, Classes, KeyboardHook, MouseHook, ExtCtrls, RemindPopup,
IniFiles;
type
TDM = class(TDataModule)
tmrIdle: TTimer;
rpp: TRemindPop;
procedure DataModuleCreate(Sender: TObject);
procedure tmrIdleTimer(Sender: TObject);
private
FMouseHook: TMouseHook;
FKeyboardHook: TKeyboardHook;
FState: Boolean;
FWorkTime, FRestTime: Integer;
FWorkCount, FResetCount: Integer;
function GetWorkTime: Integer;
procedure SetWorkTime(AValue: Integer);
public
procedure HookMouse(const AHandle: HWND; const X, Y: Integer);
procedure HookKeyboard(const KeyCode: Integer);
property WorkTime: Integer read FWorkTime write SetWorkTime;
end;
var
DM: TDM;
implementation
{$R *.dfm}
procedure TDM.DataModuleCreate(Sender: TObject);
begin
FMouseHook := TMouseHook.Create;
FMouseHook.DLLName := MouseHook.DEFDLLNAME;
FMouseHook.Blocked := False;
FMouseHook.OnMouse := HookMouse;
FKeyboardHook := TKeyboardHook.Create;
FKeyboardHook.DLLName := KeyboardHook.DEFDLLNAME;
FKeyboardHook.OnKeyDown := HookKeyboard;
FMouseHook.Start;
FKeyboardHook.Start;
FState := False;
FWorkTime := GetWorkTime;
FRestTime := 5;
end;
function TDM.GetWorkTime: Integer;
var
iniSet: TIniFile;
begin
Result := 60;
iniSet := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Set.ini');
try
Result := iniSet.ReadInteger('AppleClock', 'WorkTime', 60)
finally
iniSet.Free;
end;
end;
procedure TDM.SetWorkTime(AValue: Integer);
var
iniSet: TIniFile;
begin
if (AValue <= 0) or (AValue >= 300) then Exit;
FWorkTime := AValue;
iniSet := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Set.ini');
try
iniSet.WriteInteger('AppleClock', 'WorkTime', AValue)
finally
iniSet.Free;
end;
end;
procedure TDM.HookKeyboard(const KeyCode: Integer);
begin
FState := True;
end;
procedure TDM.HookMouse(const AHandle: HWND; const X, Y: Integer);
begin
FState := True;
end;
procedure TDM.tmrIdleTimer(Sender: TObject);
var
sHint: string;
iMin: Integer;
bState: Boolean;
begin
bState := FState;
if bState then
begin
Inc(FWorkCount);
FResetCount := 0;
end
else
Inc(FResetCount);
if FResetCount >= FRestTime then
begin
FWorkCount := 0;
end;
if ((FWorkCount mod FWorkTime) = 0) and (FResetCount = 0) then
begin
sHint := Format('Continuous use of computer you have %d minutes, please note that a break!', [FWorkCount]);
rpp.ShowPopUp(0, 'Health Tips', sHint);
end;
FState := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -