概述
type
TForm1 = class(TForm)
PRocedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
end;
var
Form1: TForm1;
id,id2:Integer;
implementation
{$R *.DFM}
procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then
begin
ShowMessage('Ctrl + Q ');
end;
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82) then
begin
ShowMessage('Ctrl + R ');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom('hotkey') - $C000; ;
RegisterHotKey(handle,id,mod_control,81);
id2:=GlobalAddAtom('hotkey2') - $C000; ;
RegisterHotKey(handle,id2,mod_control,82);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id);
UnRegisterHotKey(handle,id2);
end;
说明:
Bool RegisterHotKey(
HWND hWnd, // 响应该热键的窗口句柄
Int id, // 改热键的唯一标识
UNIT fsModifiers, // 该热键的辅助按键
UINT vk // 该按键的键值
);
为了得到唯一标识,我们还将用到另一个API函数ATOM GlobalAddAtom(
LPCTSTR lpString //自己设定的一个字符串
);
因为我们还要在程序退出的时候,消除这个热键, 所以需要声明一个全局变量:
HotKeyId: Integer;
第一步:
在窗口的create事件中,加入以下代码
HotKeyId := GlobalAddAtom(‘MyHotKey’) - $C000;
注:HotKeyId的合法取之范围是0x0000到0xBFFF之间,
GlobalAddAtom函数得到的值在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。
第二步:
在上面的代码下面加入:
RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8);
热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows键,即其键面上有Windows标志的那个键,其值
上面的代码注册了一个热键:ALT+F8。当然如果你希望只用F8, 就这么写:
RegisterHotKey(Handle, hotkeyid, 0, VK_F8);
注:handle是一个特殊的变量,它表示当前窗口的句柄。
原理:
一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应
用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消
息的格式为:
idHotKey = (int)wParam; // 该参数在设置系统级的热键有用,一般不予使用
fuModifiers = (UINT) LOWORD(lParam); //热键的辅助按键
uVirtKey = (UINT) HIWORD(lParam); //热键的键值
第三步:
注册了热键,就该写下响应代码了。
首先,在程序头部分的private段中加入声明:
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
然后在程序中加入如下代码:
procedure Tfmain.HotKeyDown(var Msg: Tmessage);
begin
if (Msg.LparamLo = MOD_ALT) AND Msg.LParamHi = VK_F8 then //假设热键为ALT+F8
begin
...//热键处理程序
end
end;
最后一步:
在窗口的close事件中加入
UnRegisterHotKey(handle, HotKeyId); //注销HotKey,
最后
以上就是缥缈山水为你收集整理的delphi 设置全局快捷键的全部内容,希望文章能够帮你解决delphi 设置全局快捷键所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复