⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmhook.pas

📁 一个朋友写的delphi的漂亮时钟
💻 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 + -