RegisterHotKey注册快捷键

RegisterHotKey的具体使用方使用方法如下:

BOOL  
RegisterHotKey( 
HWND   hWnd,
        //响应该热键的窗口句柄 
Int
  id,                    
  //该热键的唯一标识 
UINT  
fsModifiers,   //该热键的辅助按键 
UINT   vk          
      //该热键的键值 
);
  

为了得到唯一标识,我们还将用到另一个API函数   
ATOM   GlobalAddAtom( 
LPCTSTR
  lpString   //自己设定的一个字符串 
);

例如:

注册热键

m_HKId = ::GlobalAddAtom(_T("MyHotKey")) - 0xC000;
BOOL bl =
::RegisterHotKey(GetHWND(), m_HKId, MOD_SHIFT, VK_F1);

因为我们还要在程序退出的时候,消除这个热键,  
所以需要声明一个全局变量:   
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;
  

然后在程序中加入如下代码:
  

消息处理函数中判断消息是否为 WM_HOTKEY消息

case WM_HOTKEY:

{

//热键要处理的操纵
}

break;

最后一步:   
在窗口的close事件中加入
  

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

RegisterHotKey注册快捷键,码迷,mamicode.com

时间: 2024-08-08 17:47:49

RegisterHotKey注册快捷键的相关文章

Delphi 注册快捷键

ShortCutToText , TextToShortCut 需 uses Menus; ? type TForm1 = class(TForm) HotKey1: THotKey; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } procedure WMHotKey(var Ms

RegisterHotKey注册热键,然后响应WM_HOTKEY消息

MSDN中的一个示例代码,步骤就是RegisterHotKey注册热键,然后响应WM_HOTKEY消息 @1:这个是系统热键 [cpp] view plain copy #include "stdafx.h" int _cdecl _tmain ( int argc, TCHAR *argv[]) { if (RegisterHotKey( NULL, 1, MOD_ALT | MOD_NOREPEAT, 0x42))  //0x42 is 'b' { _tprintf(_T(&quo

C#利用WIN32实现按键注册

using System.Runtime.InteropServices; using System.Collections.Generic; using System; using System.Windows.Forms; namespace Phoenix { //注册系统按键消息 class HotKeys { [DllImport("user32.dll")] private static extern bool RegisterHotKey(IntPtr hWnd, int

加上快捷键,让你的网站酷起来

伟大的程序员都懒. 这话是我从<PHP 与 MySQL 程序设计>中看来的,来自于 Larry Wall 的一句话: Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris. 懒的程序员的特征是:能花一步完成的事绝不花两步,即便花一步那一步的时间也是越少越好.所以他们做了很多工具来快捷完成一些繁琐耗时长的任务:放

WPF之全局快捷键

目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种方式. 自定义快捷键命令方式是通过KeyBinding为命令绑定快捷键,按键组合可使用“+”进行连接.可以通过Modifiers+Key和Gesture两种方式定义快捷键组合.可以任选其一进行使用,MSDN中建议使用Gesture方式定义以免发生混淆. <Window.InputBindings>

黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键

1.新建一个类 HotkeyHelper  using System; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Collections; namespace 黄聪 { public delegate void HotkeyEventHandler(int hotKeyID); public class HotkeyHelper : IMessageFilter { public

VC/MFC中为程序定义全局快捷键

VC 2010-05-01 18:01:34 阅读287 评论0 字号:大中小 订阅 1.注册快捷键 在初始化函数,如OnInitDialog() 注册快捷键,代码如下: #define HotKeyID1 200 BOOL CDlgCloseProSetup::OnInitDialog() { CDialog::OnInitDialog(); ::RegisterHotKey(m_hWnd, HotKeyID1, NULL, VK_HOME); return TRUE; } RegisterH

禁用 全局快捷键

在给软件添加快捷键时,经常遇到其它软件或者系统已设置的快捷键,导致功能冲突. HotKey函数 下面介绍一个user32.dll的RegisterHotKey以及UnregisterHotKey热键处理的函数 注册热键 RegisterHotKey function BOOL RegisterHotKey(  HWND hWnd, //响应热键的窗口句柄,如果为空,则注册到调用线程上  Int id, //热键的唯一标识  UINT fsModifiers, //热键的辅助按键  UINT vk

Winform,Wpf快捷键

基类 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows.Forms; 6 using System.Windows.Input; 7 using WUtilitiesV01.Controls; 8 9 namespace WUtilitiesV01.Services 10 { 11 public abstract