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 | Control-break processing |
| VK_MBUTTON | 04 | Middle mouse button (three-button mouse) |
| VK_BACK | 08 | BACKSPACE key |
| VK_TAB | 09 | TAB key |
| VK_CLEAR | 0C | CLEAR key |
| VK_RETURN | 0D | ENTER key |
| VK_SHIFT | 10 | SHIFT key |
| VK_CONTROL | 11 | CTRL key |
| VK_MENU | 12 | ALT key |
| VK_PAUSE | 13 | PAUSE key |
| VK_CAPITAL | 14 | CAPS LOCK key |
| VK_ESCAPE | 1B | ESC key |
| VK_SPACE | 20 | SPACEBAR |
| VK_PRIOR | 21 | PAGE UP key |
| VK_NEXT | 22 | PAGE DOWN key |
| VK_END | 23 | END key |
| VK_HOME | 24 | HOME key |
| VK_LEFT | 25 | LEFT ARROW key |
| VK_UP | 26 | UP ARROW key |
| VK_RIGHT | 27 | RIGHT ARROW key |
| VK_DOWN | 28 | DOWN ARROW key |
| VK_SELECT | 29 | SELECT key |
| VK_PRINT | 2A | PRINT key |
| VK_EXECUTE | 2B | EXECUTE key |
| VK_SNAPSHOT | 2C | PRINT SCREEN key |
| VK_INSERT | 2D | INS key |
| VK_DELETE | 2E | DEL key |
| VK_HELP | 2F | HELP key |
| 30 | 0 key | |
| 31 | 1 key | |
| 32 | 2 key | |
| 33 | 3 key | |
| 34 | 4 key | |
| 35 | 5 key | |
| 36 | 6 key | |
| 37 | 7 key | |
| 38 | 8 key | |
| 39 | 9 key | |
| 41 | A key | |
| 42 | B key | |
| 43 | C key | |
| 44 | D key | |
| 45 | E key | |
| 46 | F key | |
| 47 | G key | |
| 48 | H key | |
| 49 | I key | |
| 4A | J key | |
| 4B | K key | |
| 4C | L key | |
| 4D | M key | |
| 4E | N key | |
| 4F | O key | |
| 50 | P key | |
| 51 | Q key | |
| 52 | R key | |
| 53 | S key | |
| 54 | T key | |
| 55 | U key | |
| 56 | V key | |
| 57 | W key | |
| 58 | X key | |
| 59 | Y key | |
| 5A | Z key | |
| VK_NUMPAD0 | 60 | Numeric keypad 0 key |
| VK_NUMPAD1 | 61 | Numeric keypad 1 key |
| VK_NUMPAD2 | 62 | Numeric keypad 2 key |
| VK_NUMPAD3 | 63 | Numeric keypad 3 key |
| VK_NUMPAD4 | 64 | Numeric keypad 4 key |
| VK_NUMPAD5 | 65 | Numeric keypad 5 key |
| VK_NUMPAD6 | 66 | Numeric keypad 6 key |
| VK_NUMPAD7 | 67 | Numeric keypad 7 key |
| VK_NUMPAD8 | 68 | Numeric keypad 8 key |
| VK_NUMPAD9 | 69 | Numeric keypad 9 key |
| VK_SEPARATOR | 6C | Separator key |
| VK_SUBTRACT | 6D | Subtract key |
| VK_DECIMAL | 6E | Decimal key |
| VK_DIVIDE | 6F | Divide key |
| VK_F1 | 70 | F1 key |
| VK_F2 | 71 | F2 key |
| VK_F3 | 72 | F3 key |
| VK_F4 | 73 | F4 key |
| VK_F5 | 74 | F5 key |
| VK_F6 | 75 | F6 key |
| VK_F7 | 76 | F7 key |
| VK_F8 | 77 | F8 key |
| VK_F9 | 78 | F9 key |
| VK_F10 | 79 | F10 key |
| VK_F11 | 7A | F11 key |
| VK_F12 | 7B | F12 key |
| VK_F13 | 7C | F13 key |
| VK_F14 | 7D | F14 key |
| VK_F15 | 7E | F15 key |
| VK_F16 | 7F | F16 key |
| VK_F17 | 80H | F17 key |
| VK_F18 | 81H | F18 key |
| VK_F19 | 82H | F19 key |
| VK_F20 | 83H | F20 key |
| VK_F21 | 84H | F21 key |
| VK_F22 | 85H | F22 key |
| VK_F23 | 86H | F23 key |
| VK_F24 | 87H | F24 key |
| VK_NUMLOCK | 90 | NUM LOCK key |
| VK_SCROLL | 91 | SCROLL LOCK key |
| VK_LSHIFT | A0 | Left SHIFT key |
| VK_RSHIFT | A1 | Right SHIFT key |
| VK_LCONTROL | A2 | Left CONTROL key |
| VK_RCONTROL | A3 | Right CONTROL key |
| VK_LMENU | A4 | Left MENU key |
| VK_RMENU | A5 | Right MENU key |
| VK_PLAY | FA | Play key |
| VK_ZOOM | FB | Zoom key |
//定义全局变量
var
QuitId, ShowMe: Integer;
//热键响应函数
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
//注册热键
QuitId := GlobalAddAtom('MyQuitId') - $C000;
RegisterHotKey(Handle, QuitId, MOD_CONTROL, VK_F2);
//注册热键
ShowMe := GlobalAddAtom('MyShowMe') - $C000;
RegisterHotKey(Handle, ShowMe, MOD_CONTROL, VK_F1);
注:HotKeyId的合法取之范围是0x0000到0xBFFF之间,GlobalAddAtom函数得到的值在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。
热键的辅助按键包括Mod_Ctrl、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows键,即其键面上有Windows标志的那个键,其值为Mod_win。
注:handle是一个特殊的变量,它表示当前窗口的句柄。
这个函数你应该能句举一反三了吧。
原理:
一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消息的格式为:
idHotKey=(int)wParam;//该参数在设置系统级的热键有用,一般不予使用
fuModifiers=(UINT)LOWORD(lParam);//热键的辅助按键
uVirtKey=(UINT)HIWORD(lParam);//热键的键值
//释放热键
UnRegisterHotKey(handle, QuitId);
UnRegisterHotKey(handle, ShowMe);
procedure TfrmMain.HotKeyDown(var Msg: Tmessage);
begin
if (Msg.LparamLo = MOD_CONTROL) AND (Msg.LParamHi = VK_F2) then //退出
begin
Close;
end;
if (Msg.LparamLo = MOD_CONTROL) AND (Msg.LParamHi = VK_F1) then
begin
Close;
end;
end;
Delphi RegisterHotKey 设置系统热键的更多相关文章
- delphi中设置系统时间方法
procedure TMainFrm.Timer1Timer(Sender: TObject); var systemtime:Tsystemtime; dt:TDateTime; begin ...
- 用RegisterHotKey注册系统热键
函数功能:该函数定义一个系统范围的热键. 函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk): 参数: hWnd:接 ...
- C#实现全局快捷键(系统热键)响应(转)
转自http://www.cnblogs.com/Randy0528/archive/2013/02/04/2892062.html 在应用中,我们可能会需要实现像Ctrl+C复制.Ctrl+V粘贴这 ...
- DELPHI下读取与设置系统时钟
在DELPHI下读取与设置系统时钟 很多朋友都想在自己的程序中显示系统时间 这在DELPHI中十分容易 利用DateToStr(Date)及TimeToStr(Time)函数即可实现. 二者的函数原型 ...
- 第三方包jintellitype实现Java设置全局热键
Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...
- Java设置全局热键——第三方包jintellitype实现
Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C/C++的javaer来说,有点困难.不过幸好,国外有人已经实 ...
- 屏蔽系统热键钩子Hook程序
在winform时候,经常需要做屏蔽系统热键: 1.屏蔽左"WIN".右"Win" 2.屏蔽Ctrl+Esc 3.屏蔽Alt+f4 4.屏蔽Alt+Esc 5. ...
- delphi程序中定义热键
delphi程序中定义热键 用到3个API函数 BOOL RegisterHotKey ( HWND hWnd, //响应该热键的窗口句 ...
- C#使用API屏蔽系统热键和任务管理器
最近做的一个winform类型的项目中需要屏蔽系统热键,在网上搜索了一下,基本上都是调用api来进行hook操作,下面的代码就可以完成功能 using System; using System.IO; ...
随机推荐
- hdu 1451 Area in Triangle(计算几何 三角形)
Given a triangle field and a rope of a certain length (Figure-1), you are required to use the rope t ...
- Delphi界面篇之ListView控件
//增加项或列(字段) ListView1.Clear; ListView1.Columns.Clear; ListView1.Columns.Add; ListView1.Columns.Add; ...
- CocoaPods中pod search报错的解决办法
pod search报错的原因: 每次使用pod search命令的使用会在该目录下生成一个search_index.json文件,会逐渐的增大,文件达到一定大小后,ruby解析里面的json字符就会 ...
- php面试专题---6、正则表达式考点
php面试专题---6.正则表达式考点 一.总结 一句话总结: 正则匹配步骤:1.先写出一个要匹配的字符串:2.自左向右的顺序使用正则表达式的原子和元字符进行拼接:3.最终加入模式修正符: 1.写出一 ...
- ANTLR4在windows10下的安装
1.下载ANTLR ①.从官网下载到最新版本的antlr-4.7.1-complete.jar.我下载的时候最新版本是4.7.1. ②.选择路径保存,为方便之后修改环境变量.我的下载目录为E:\Ant ...
- 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
原文链接:https://blog.csdn.net/sea_snow/article/details/82498791 感谢原作者大大 提示:ERROR 1044 (42000): Access ...
- 【刷题笔记】LeetCode 48. Rotate Image
题意 原地顺时针翻转一个 n*n 的矩阵 图解 下面例子中用 5*5 矩阵做示例,如下图,我们要把该矩阵顺时针翻转90度,并且不能使用另外的矩阵空间来暂存数据,而是原地改变矩阵中数值. 我的想法是这样 ...
- lua脚本分解字符串
--local str = "文字45 文字 789 文们adsd45 文字 wowo 文字 文字 wowo我们 wowo456 wiwo 465我们 456sdf 45 45我们adsd4 ...
- 转 cpu高 问题分析定位
文章来源: http://www.blogjava.net/hankchen/archive/2012/08/09/377735.html 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原 ...
- v-cloakd的应用场景和使用方法
使用vue构建前端应用,加载应用后页面可能会出现闪烁: <div id="app" v-cloak> {{message}} </div> 例如上述场景,应 ...