delphi热键设定的方法

来源:互联网 发布:湖南大学北校区 知乎 编辑:程序博客网 时间:2024/05/13 03:52

======================================================
注:本文源代码点此下载
======================================================

问题是你要全局的.还是要系统级的,还是要局部的。

如果是全局和局部的,那么在主窗体上(或其他控件上)(form)的keypress等属性上监控就行了..

如果是系统级的,那么需要api了.

简单代码:

用到3个api函数

bool registerhotkey(

hwnd hwnd, //响应该热键的窗口句柄

int id, //该热键的唯一标识

uint 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标志的那个键,其值为mod_win。

上面 的代码注册了一个热键:alt+f8。当然如果你希望象takeit那样,只用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

showmessage('f8');

end;

end;

最后一步:

在窗口的close事件中加入

unregisterhotkey(handle, hotkeyid); //注销hotkey, 释放资源。

atomid = globaladdatom(ls_atomid)

//得到id,保证不和其他应用程序发生冲突

ll_rc = registerhotkey(handle(this), atomid, mod_alt + mod_control, 65)

//注册的热键为ctrl+alt+a ,65为'a'


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击