• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi热键(快捷键)设定

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

如果是全局和局部的,那么在主窗体上(或其他控件上)(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'


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览发布时间:2022-07-18
下一篇:
Matlab按照灰度图像去除数据冗余发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap