delphi 设置全局快捷键

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
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标志的那个键,其值

为Mod_win。  
上面的代码注册了一个热键: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 全局热键注册+使用 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源码)

你是公司白领吗?是不是总是偷偷在电脑上玩连连看之类的小游戏?老板过来了,怎么办?不用担心,有我在,只要按下ALT+Z就可以隐藏当前窗口,再按即会显示出来刚刚被隐藏的窗口.双击有说明 :)<br>我的博客http://www.kumouse.com

delphi程序中定义热键

delphi程序中定义热键   用到3个API函数 BOOL RegisterHotKey ( HWND hWnd, //响应该热键的窗口句柄 Int id, //该热键的唯一标识 UINT fsModifiers, //该热键的辅助按键...

weixin_30369087的博客 167

delphixe设置全局快捷键

delphixe设置全局快捷键 delphixe设置全局快捷键 delphixe设置全局快捷键

delphi热键:delphi程序中定义热键的方法 --转

====================================================== 注:本文源代码点此下载 ====================================================== 疯狂代码 http://www.crazycoder.cn/ :http:/www.crazycoder.cn/delphi/article117

javazhuanzai的专栏 389

Delphi设置全局快捷键

typeTForm1 = class(TForm)procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);protectedprocedure hotykey(var msg:TMessage); message WM_HOTKEY;end; varForm1: TForm1;id,id2:In...

我的IT之旅 405

delphi实现全局快捷键的功能

没什么复杂的,只是最近才用,跟大家分享一下     全局快捷键就是焦点不在这个系统时也管用的快捷键     1、首先需要注册快捷键 [delphi] view plain copy FShowkeyid := GlobalAddAtom('mykey_show');   //F12   RegisterHotKey(handle, FSh

疯流人物 3308

delphi 快捷键用法

1. 窗体上全局 快捷键,首先设置keyprivew 属性为true. procedure TFMzcfLr.FormKeyDown(Sender : TObject; var Key : Word; Shift : TShiftState); begin if Key = 13 then //当按下回车时 begin ...

aiyitan9175的博客 266

delphi中如何响应键盘的组合键(如:ctrl k)

1:varHot: boolean;procecure form1.formkeydown(.....);beginif (key = VK_K) and (ssShift in shift) thenif hot thenbegin//处理ctrl kkhot := false;endelse hot := trueelsehot := false;end; 2:可以设置快捷键,也可以...

weixin_30481087的博客 519

设置全局快捷键 (转)

设置全局快捷键 (转)[@more@]type TForm1 = class(TForm) procedure FormCreate(Sender: Tobject); procedure FormDestroy(Sender:...

cuiji1279的博客 181

delphi设置全局快捷键

delphi设置全局快捷键

delphi设置全局快捷键判断鼠标按键

delphi设置全局快捷键判断鼠标按键 delphi设置全局快捷键判断鼠标按键

delphi 如何设置快捷键之2

设置全局快捷键type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); protected procedure hotykey(var msg:TMessage); message WM_HOTKEY; end; var Form1: TFo

123123121 1434

PythonStudio中THotKey控件的5个实用技巧(附菜单快捷键设置示例)

本文深入解析了PythonStudio中Delphi风格控件THotKey的5个核心使用技巧,包括理解其记录器机制、设置智能默认值与边界、动态验证、与菜单项深度集成以及实现配置持久化。通过一个完整的菜单快捷键设置示例,帮助开发者高效管理应用热键,提升桌面应用的交互体验与专业性。

mm9012的博客 827

历史上最全的delphi技巧集锦之1

历史上最全的delphi技巧集锦之1 分类:delphi2008-11-16 22:00 ------------------------------------------------删除dbgrid中选定数据的方法:beginadotable1.Delete;adotable1.first;若要追加和修改信息:adotable1.Append...

weixin_30750335的博客 170

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

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

weixin_34150830的博客 395

Delphi 开发系统托盘全局快捷键启动器

在日常工作中,我们经常需要快速启动各种应用程序。虽然 Windows 提供了任务栏固定和开始菜单,但对于需要频繁切换多个工具的用户来说,使用全局快捷键来启动程序会更加高效。本文将介绍如何使用 Delphi 11.3 开发一个功能完整的全局快捷键启动器。

Winfredzhang的博客 719

Delphi使用全局快捷键

Delphi使用全局快捷键 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm)     procedure FormCreate(Sender: T

gjtao1130的专栏 3816
上一篇: Microsoft.XMLHTTP对象
下一篇: String,CString,TCHAR,char之间区别和联系
sierllen
博客等级 码龄18年 48粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值