DELPHI如何注册系统热键

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
用DELPHI如何注册系统热键 (2003年10月21日)
发表日期:2003-3-1  文章作者:未知   已浏览: 357 字体大小:[ - +]

  本站更新 分类:系统  作者:龙门刀客 推荐:  阅读次数:393 
(http://www.tommstudio.com/newclub30/) 

用到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
end;
end;

最后一步:

在窗口的close事件中加入

UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。

Delphi 全局热键注册+使用 RAD Studio 10.2.3 测试√ 全局变量: var mHotKey01, mHotKey02: Integer; 1、在程序创建的时候或者窗体显示的时候注册热键 begin // 原子【mHotKey01】 mHotKey01 := GlobalAddAtom('xiaoyin_HotKey_CTRL_F1') - $C000; //注册热键【Ctrl + F1】 RegisterHotKey(Handle, mHotKey01, MOD_CONTROL, VK_F1) 阅读详情

相关推荐

delphi设置全局快捷键

delphi设置全局快捷键

Delphi之RegisterHotKey和UnregisterHotKey

下面是根据D7的帮助手册翻译并注释过来的,不得不说按F1查看帮助手册真的很方便,就是是英文的,比中文看的久点,为了方便查询,我就顺手翻译下了。 RegisterHotKey函数用来注册全局热键到指定的句柄 下面是函数原型 BOOL RegisterHotKey( HWND hWnd, //接收热键的窗口句柄 int id, // 热键的标识id UIN...

拿头去拼啊 819

Delphi版的Hotkey自定义热键源代码

内容索引:Delphi源码,系统相关,Hotkey,热键  Delphi版的Hotkey自定义热键源代码,设置,录制宏、编辑描述文件,鼠标快捷方式定义,键盘快捷方式定义等,源码爱好者已经收录了不少的Delphi热键,每一个从实现的原理上都有所不同,收录这些源码更侧重于学习研究,因此学习Delphi编程的朋友有必要参阅一下源程序。注意,源码包中有多个DPR文件,要先编译生成DLL的,然后再编译热键程序。

delphi RegisterHotKey注册快键

RegisterHotkey(self.handle,globalatom('myhostkey'),mod_control+mod_alt,VK_key12);   procedure Hostkey(var msg:Tmessage);message WM_HOTKEY;egin     procedure HostKey(var msg:Tmessage); begin

shandiantianying的专栏 1021

delphi热键注册

unit Unit1;       interface      uses     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,      Dialogs;       type     TForm1 = class(TForm)        pro

123123121 953

批量注册系统热键delphi《万一》

====================================================== 注:重要!用眼过度需要养眼,点此养眼! ====================================================== china-pub 计算机绝版图书按需印刷服务 =======================================

128

DELPHI如何注册系统热键

以下为转贴:用到3个API函数 1、BOOL RegisterHotKey( HWND hWnd,  //响应该热键的窗口句柄 Int id,      //该热键的唯一标识 UINT fsModifiers, //该热键的辅助按键 UINT vk    //该热键的键值 ); 2、为了得到唯一标识,我们还将用到另一个API函数 ATOM GlobalAddAtom( LPCTSTR lpSt

qqp_528的专栏 6202

Delphi RegisterHotKey 设置系统热键

首先先贴一张热键表 Symbolic constant name Value (hexadecimal) Keyboard (or mouse) equivalent VK_LBUTTON 01 Left mouse button VK_RBUTTON 02 Right mouse button VK_CANCEL 03 Cont

Microblue(严 武) 7036

注册系统相关

注册文件类型 unit regftyp; (*************************************************************************** This is a unit to handle filetyp-associations in Win95/NT. The unit supports -Regis...

dkopg24406的专栏 193

热键1,效果图和全代码

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ActnList, ComCtrls, ExtCtrls; type TForm1 = class(TForm...

weixin_30580943的博客 134

全局热键 RegisterHotKey

全局 热键 RegisterHotKey 注册

Delphi注册系统热键..rar

Delphi注册系统热键..rar

DELPHI 7 控制热键

通过钩子控制某一热键是否可用 WM_KEYDOWN,WM_SYSKEYDOWN,WM_KEYUP,WM_SYSKEYUP: if (p.vkCode = VK_LWIN) OR (p.vkCode = VK_RWIN)//判断按下的是不是某一键值

delphi程序全局热键的自定义方法

全局热键的意思是指,当程序并不是当前窗口的时候,按下热键也可以响应。 以前做这种功能用过一种方法,是编写一个键盘钩子的DLL,过滤系统中所有的键盘消息,当然还要再写一个程序去调用它。这种方法做起来麻烦了一起,不过倒是黑客窃取键盘密码雏形。 这里介绍的方法是利用windows api直接注册热键,分三步走:1、增加一个全局Atom2、为Atom注册一个全局热键(这样相应的键盘消息就会分配给本程序...

weixin_30673715的博客 677

公布Delphi热键注册源码

1{-------------------------------------------------------------------------------2热键注册3作者:张金利日期:2010.08.124说明:5------------------------------------------------------...

weixin_30593261的博客 202

定义热键调用主窗体(最小化到系统托盘)

//*****************************************************unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CoolTrayIc

yct0605的专栏 1111

delphi 设置全局快捷键

type TForm1 = class(TForm) PRocedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); protected procedure hotykey(var msg:TMessage); message WM_HOTKEY; end; var Form

sierllen的专栏 427

热键

我win10系统试的 追答 一、在private下面 procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY; //热键声明。 二、var HotKeyId: Integer; //全局变量。 三、FormCreate事件里写。 1、HotKeyId := GlobalAddAtom('MyHotK

nextop88的专栏 293

任务栏程序-02

人真是少啊,看第一部分的人寥寥无几,这是人气凋零啊!牢骚发完了。OK,续上贴。对于初学者来说,定义系统热键(hotkey)好像是一项很难的技术,实际上在Delphi里,可以很轻松的完成。依本例来说,声明两个atom类型全局变量aF9与aF10。var  aF9,aF10  : ATOM;在Form1上拖放一个WebBrowser控件(在InterNet中),名字为Web1。在form的cr

yuzhan的专栏 1013
上一篇: 人民币金额大小写转换函数
下一篇: 程序中调出控制面板等窗口
dingrj
博客等级 码龄21年 6粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值