用DELPHI如何注册系统级热键

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  HotKeyId: array[0..12] of Integer; //热键数组, 这里准备定义 13 个热键

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
//注册热键
  for i := Low(HotKeyId) to High(HotKeyId) do
    HotKeyId[i] := GlobalAddAtom(PChar(IntToStr(i))); //热键命名可随意
  RegisterHotKey(Handle,HotKeyId[0],0,VK_F2);               //F2
  RegisterHotKey(Handle,HotKeyId[1],0,VK_UP);               //Up
  RegisterHotKey(Handle,HotKeyId[2],0,VK_DOWN);             //Down
  RegisterHotKey(Handle,HotKeyId[3],0,VK_LEFT);             //Left
  RegisterHotKey(Handle,HotKeyId[4],0,VK_RIGHT);            //Right
  RegisterHotKey(Handle,HotKeyId[5],0,VK_PRIOR);            //PageUp
  RegisterHotKey(Handle,HotKeyId[6],0,VK_NEXT);             //PageDown
  RegisterHotKey(Handle,HotKeyId[7],0,VK_OEM_PLUS);         //+
  RegisterHotKey(Handle,HotKeyId[8],0,VK_OEM_MINUS);        //-
  RegisterHotKey(Handle,HotKeyId[9],0,$31);                 //1
  RegisterHotKey(Handle,HotKeyId[10],0,$41);                //a
  RegisterHotKey(Handle,HotKeyId[11],0,VK_RETURN);          //Enter
  RegisterHotKey(Handle,HotKeyId[12],MOD_CONTROL,VK_RETURN); //Ctrl+Enter
end;

//热键
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyId[0] then ShowMessage('F2');
  if (Msg.HotKey=HotKeyId[1]) then ShowMessage('Up');
  if (Msg.HotKey=HotKeyId[2]) then ShowMessage('Down');
  if (Msg.HotKey=HotKeyId[3]) then ShowMessage('Left');
  if (Msg.HotKey=HotKeyId[4]) then ShowMessage('Right');
  if Msg.HotKey = HotKeyId[5] then ShowMessage('PageUp');
  if Msg.HotKey = HotKeyId[6] then ShowMessage('PageDown');
  if Msg.HotKey = HotKeyId[7] then ShowMessage('+');
  if Msg.HotKey = HotKeyId[8] then ShowMessage('-');
  if Msg.HotKey = HotKeyId[9] then ShowMessage('1');
  if Msg.HotKey = HotKeyId[10] then ShowMessage('a');
  if Msg.HotKey = HotKeyId[11] then ShowMessage('Enter');
  if Msg.HotKey = HotKeyId[12] then ShowMessage('Ctrl+Enter');
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
//注销热键
  for i := Low(HotKeyId) to High(HotKeyId) do
  begin
    UnRegisterHotKey(handle,HotKeyId[i]);
    GlobalDeleteAtom(HotKeyId[i]);
  end;
end;

end.

***************************************************

这里是一些常用按键的键值

***************************************************

RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8); 

热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows
键,即其键面上有Windows标志的那个键,其值为Mod_win。

部分热键:       

MOD_ALT      Alt   键
MOD_CONTROL Ctrl 键
MOD_SHIFT    Shift 键       

Back           008                Enter          013      

Shift          016                Ctrl           017
Alt            018                Pause          019
Caps Lock      020                Esc            027
空格键         032                Page Up        033
Page Down      034                End            035
Home           036                方向左         037
方向上         038                方向右         039
方向下         040                Insert         045
Delete         046                0 - 9          048 - 57
A - Z          065 - 090          数字键盘0-9    096 - 105
数字键盘*      106                数字键盘+      107
数字键盘-      109                数字键盘.      110
数字键盘/      111                F1 - F12       112 - 123
Num Lock       144                Soroll Lock    145
;              186                =              187
,              188                -              189
.              190                /              191
~              192                [              219
\              220                ]              221
'              222

上面 的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8, 就这么写:

RegisterHotKey(Handle, hotkeyid, 0, VK_F8); 

 

转载于:https://www.cnblogs.com/kylskjb/archive/2008/08/13/1267113.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值