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注册快捷键的更多相关文章

  1. 【转】C#注册快捷键

    转自:http://blog.csdn.net/xiahn1a/article/details/42561015 这里需要引用到“user32.dll”.对于Win32的API,调用起来还是需要dll ...

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

    MSDN中的一个示例代码,步骤就是RegisterHotKey注册热键,然后响应WM_HOTKEY消息 @1:这个是系统热键 #include "stdafx.h" int _cd ...

  3. listbox鼠标拖动数据和为button注册快捷键

    将listbox1中的数据用鼠标拖动至listbox2,即有左至右. 分别对应控件注册如下事件DragEnter,MouseDown,DragDrop 代码如下: //P128 DataGridVie ...

  4. 用RegisterHotKey注册系统热键

    函数功能:该函数定义一个系统范围的热键. 函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk): 参数: hWnd:接 ...

  5. 【Delphi】注册快捷键

    ShortCutToText , TextToShortCut 需 uses Menus; type TForm1 = class(TForm) HotKey1: THotKey; Button1: ...

  6. nw 注册快捷键

    var option = { key : "Escape", }; var shortcut = new gui.Shortcut(option); gui.App.registe ...

  7. C#利用WIN32实现按键注册

    using System.Runtime.InteropServices; using System.Collections.Generic; using System; using System.W ...

  8. c# 注册全局热键

    //引入系统API [DllImport("user32.dll")] static extern bool RegisterHotKey(IntPtr hWnd, int id, ...

  9. WPF之全局快捷键

    目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...

随机推荐

  1. VBA学习笔记(3)--文件夹操作

    说明(2017.3.22): 1. 根据兰色幻想VBA80集视频教学,总结 2. 大部分可以用自带函数处理,不过复制文件夹需要用到FileSystemObject对象,打开文件夹用到shell Pub ...

  2. jsp c标签不遍历的方法

    生产中遇到过不需要遍历的事情. 一般遍历必须要 <c:forEach items="${resultObj.xxx}" var="data" varSta ...

  3. Redis学习之(一)

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将其数据库完全保存在内存中, ...

  4. C语言 · 芯片测试

    基础练习 芯片测试   时间限制:1.0s   内存限制:512.0MB    问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯 ...

  5. Smack 广播

    格式 Message message = new Message("all@broadcast.192.168.1.253"); 使用openfire的广播功能首先需要在插件的页面 ...

  6. SpringMVC 多视图解析器配置以及问题

    在SpringMVC模式当中可以通过如下配置来支持多视图解析 <!-- jsp jstl --> <bean id="JSPViewResolver" class ...

  7. Java NIO使用及原理分析(三)(转)

    在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等.在本文中我们来看一下缓冲区一些更细节的内容. 缓冲区的分 ...

  8. 开源图形数据库Neo4j使用 php开发

    先看看它的示例数据 打开 Neo4j Browser :play movie graph 写代码,然后点play执行 Cypher, the graph query language.Neo4j提供了 ...

  9. 05 Oracle process

    本章提要----------------------------------------------所有的 process 都是在 PGA 内(memory)server process: 与 cli ...

  10. C#程序运行流程

    我们写好的C#代码操作系统是如何能识别呢,我们都知道操作系统只能认识二进制 机器代码,下面用图来表示 因为C#是安全的托管代码 同时CLR会在内存中创建应用程序域 托管代码:被CLR管理的代码 非托管 ...