unit2.pas

来自「通过delphi源码介绍给你如果实现焦点不在的热键响应」· PAS 代码 · 共 78 行

PAS
78
字号
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    {热键标识ID}     
    id:   Integer;
    procedure   WMHotKey(var   Msg   :   TWMHotKey);   message   WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
  const RSP_SIMPLE_SERVICE = 1;
  //function RegisterServiceProcess(dwProcessID, dwType: DWord) : DWord; stdcall; external 'KERNEL32.DLL';
{$R *.dfm}

{捕获热键消息}     
procedure   TForm1.WMHotKey   (var   Msg   :   TWMHotKey);
begin
  if   msg.HotKey   =   id   then
  ShowMessage('Ctrl+Alt+R键被按下!');
  form1.Visible   :=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
Const     
  {ALT、CTRL和R键的虚拟键值}     
  MOD_ALT   =   1;     
  MOD_CONTROL   =   2;
  VK_R   =   82;     
begin
  {首先判断程序是否已经运行}     
  if   GlobalFindAtom('MyHotkey')   =   0   then
  begin     
  {注册全局热键Ctrl   +   Alt   +   R}
  id:=GlobalAddAtom('MyHotkey');     
  RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);     
  end     
  else     
  halt;     
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnRegisterHotKey(handle,id);
  GlobalDeleteAtom(id);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
  form1.Hide;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?