======================================================
注:本文源代码点此下载
======================================================
疯狂代码 http://www.crazycoder.cn/ :http:/www.crazycoder.cn/delphi/article11711.html
用到3个api
bool registerhotkey( hwnd hwnd, //响应该热键窗口句柄 int id, //该热键唯标识 uint fsmodiers, //该
热键辅助按键 uint vk //该热键键值 );
为了得到唯标识我们还将用到另个api
atom globaladdatom(
lpctstr lpstring //自己设定个串
);
我们还要在退出时候消除这个热键 所以需要声明个全局变量:
hotkeyid: integer;
第步:
在窗口create事件中加入以下代码
hotkeyid := globaladdatom('myhotkey') - $c000; 注: hotkeyid合法取的范围是0x0000到0xbfff的间
globaladdatom得到值 在0xc000到0xffff的间所以减掉0xc000来满足要求
第 2步:
在上面代码下面加入:
registerhotkey(handle, hotkeyid, mod_alt, vk_f8);
热键辅助按键包括mod_ctrl ,mod_alt,mod_sht,对于windows兼容键盘还支持windows 键即其键面上有
windows标志那个键其值为mod_win
上面 代码注册了个热键:alt+f8当然如果你希望象takeit那样只用f8, 就这么写:
registerhotkey(handle, hotkeyid, 0, vk_f8);
注:handle是个特殊变量它表示当前窗口句柄
这个你应该能句举反 3了吧
原理:
旦热键设置成功在应用过程中如果有相应键被按下windows系统都会给你应 用发送个消息wm_hotkey不管
你应用是否为当前活动其中wm_hotkey消 息格式为:
idhotkey = () wparam; // 该参数在设置系统级热键有用,般不予使用 fumodiers = (uint)
loword(lparam); //热键辅助按键 uvirtkey = (uint) hiword(lparam); //热键键值
第 3步:
注册了热键就该写下响应代码了
首先在头部分private段中加入声明 (作用是声明这个过程和声明变量类似 有关如何声明,过程请请参考各自帮
助文件或其它资料):
procedure hotkeydown(var msg: tmessage); message wm_hotkey;
然后在中加入如下代码:
procedure tf.hotkeydown(var msg: tmessage); begin (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' 2009-2-12 3:33:32
疯狂代码 http://www.crazycoder.cn/
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/