我是靠谱客的博主 缥缈山水,最近开发中收集的这篇文章主要介绍delphi 设置全局快捷键,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 设置全局快捷键的全部内容,希望文章能够帮你解决delphi 设置全局快捷键所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部