win32 获取 HotKey 控件中的内容(HKM_GETHOTKEY)
windows给我们提供了一个对话框控件HotKey非常好用,在设置热键的时候用起来很爽,但是一直百度就是没找到在win32下怎样通过消息获取这个控件里面的内容,找到的都是用MFC封装好的控件类来操作的,终于在MSDN找到了答案…
翻译过来就是要给控件发送这个消息 HKM_GETHOTKEY 头文件:Commctrl.h
// IDC_HOTKEY_SETTING 这个是热键控件的ID
SendMessage(GetDlgItem(hDlg, IDC_HOTKEY_SETTING), HKM_GETHOTKEY, 0, 0);
返回值是得到的组合键值
Returns the virtual key code and modifier flags. The LOBYTE of the LOWORD is the virtual key code of the hot key. The HIBYTE of the LOWORD is the key modifier that specifies the keys that define a hot key combination. The modifier flags can be a combination of the following values.
翻译过来就是得到的数低16位有效,然后在这低16位中,低8位存的是虚拟键值(virtual key ),高8位是修饰键值(modifier)
virtual key 就是宏定义为VK_SPACE 等等这些,字母就是它的ASC码
modifier 看下面
Value Meaning
HOTKEYF_ALT ALT key
HOTKEYF_CONTROL CONTROL key
HOTKEYF_EXT Extended key
HOTKEYF_SHIFT SHIFT key
即这样使用
DWORD dwVal;
dwVal = SendMessage(GetDlgItem(hDlg, IDC_HOTKEY_SETTING), HKM_GETHOTKEY, , );
UINT uVk = LOBYTE(LOWORD(dwVal));
UINT uMod = HIBYTE(LOWORD(dwVal));
可以直接发送 HKM_SETHOTKEY 消息把得到的值传给 wParam 就可以设置控件框的内容了
如果要用得到的值注册热键,则需要进行转换,因为 HOTKEYF_ALT 和 RegisterHotKey 的参数 MOD_ALT 值是不一样的
#define MOD_ALT 0x0001
#define MOD_CONTROL 0x0002
#define MOD_SHIFT 0x0004
//-------------------------------------
#define HOTKEYF_SHIFT 0x01
#define HOTKEYF_CONTROL 0x02
#define HOTKEYF_ALT 0x04
需要进行转换
UINT HotkeyToMod(UINT fsModifiers)
{
if ((fsModifiers & HOTKEYF_SHIFT) && !(fsModifiers & HOTKEYF_ALT)) // shift转alt
{
fsModifiers &= ~HOTKEYF_SHIFT;
fsModifiers |= MOD_SHIFT;
}
else if (!(fsModifiers & HOTKEYF_SHIFT) && (fsModifiers & HOTKEYF_ALT)) // alt转shift
{
fsModifiers &= ~HOTKEYF_ALT;
fsModifiers |= MOD_ALT;
}
return fsModifiers;
} UINT ModToHotkey(UINT fsModifiers)
{
if ((fsModifiers & MOD_SHIFT) && !(fsModifiers & MOD_ALT)) // shift转alt
{
fsModifiers &= ~MOD_SHIFT;
fsModifiers |= HOTKEYF_SHIFT;
}
else if (!(fsModifiers & MOD_SHIFT) && (fsModifiers & MOD_ALT)) // alt转shift
{
fsModifiers &= ~MOD_ALT;
fsModifiers |= HOTKEYF_ALT;
}
return fsModifiers;
} uMod = HotkeyToMod(uMod);
if (!RegisterHotKey(g_hWnd, HOTKEY_SHOT, uMod, uVk))
{
MessageBox(hDlg, L"注册热键失败,可能发生冲突", L"Error", MB_OK);
break;
}
上面转换的代码来自http://blog.csdn.net/wwkaven/article/details/44119059
win32 获取 HotKey 控件中的内容(HKM_GETHOTKEY)的更多相关文章
- .net获取select控件中的文本内容
.net获取select控件中的文本内容 2009-11-28 21:19小V古 | 分类:C#/.NET | 浏览1374次 <select id="SecType" st ...
- 【VC版】如何获取其他进程中ListView控件中的内容
如果需要C#版的,可以看下我之前写的:C#如何获取其他程序ListView控件中的内容 获取其他进程的数据需要使用到以下几个函数: VirtualAllocEx() VirtualFreeEx() W ...
- delphi Components[i]清除所有edit控件中的内容
(* 一般的清空combobox方法 combobox1.clear; ... combobox9.clear; *) procedure TForm1.Button1Click(Sender: ...
- WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条)
原文:WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) 对于TreeView而言: TreeViewAut ...
- C# 清除当前窗体中TextBox控件中的内容
//当有多个窗体时,对顶层的窗口进行操作,例如:我们开发具有录入功能的界面的时候,为了防止提交后的二次(重复)录入,希望点击提交按钮并提示成功后,界面的所有文本框内容能够自动清空.NET Framew ...
- 02、获取 WebView 控件中,加载的 HTML 网页内容
在开发 app 的时候,WebView 是经常使用的控件.而且有时需要向 WebView 中的 html 内容 注入额外的 js 进行操作.这里记录一下在当前 WebView 控件中,获取 html ...
- JS获取用户控件中的子控件Id
用户控件 <asp:HiddenField ID="hfGradeId" runat="server" /> <asp:HiddenField ...
- 获取Repeater控件中的每一项数据
var items = rptList.Items;//获取Repeater控件的所有项 foreach (RepeaterItem item in items)//遍历每一项内容 { var t ...
- wpf 保存控件中的内容为图片格式
黄色的是wpf控件的名称! //保存到特定路径 FileStream fs = new FileStream(@"C:\image.png", FileMod ...
随机推荐
- 九度OJ 1255:骰子点数概率 (递归、DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:316 解决:29 题目描述: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S.输入n,打印出S的所有可能的值出现的概率. 输入: 输入包 ...
- height为auto, 滚动条出现时, 使页面不跳动
<style> html { margin-left: calc(100vw - 100%); } </style> ;
- isinstance/issubclass/type的区别?
type() 判断某个对象是否是该类创建的,只看一层,如果是继承类,也不会考虑继承类的类型.. Issubclass() 判断该类是否是另一个类的派生类,也就是子类,参数为类. isinstance( ...
- 淘宝开放平台php-sdk测试 获取淘宝商品信息(转)
今天想使用淘宝开放平台的API获取商品详情,可是以前一直没使用过,看起来有点高深莫测,后然看开发入门,一步一步,还真有点感觉了,然后看示例,还真行了,记下来以后参考.其中遇到问题,后然解决了.因为我已 ...
- Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库
导入 jar 包 导入 jar 包的方式非常简单,就是在项目中的 libs 中放入你需要导入的 jar 包,然后右键你的 jar 文件,选择“add as a library”即可在你的项目中使用这个 ...
- BAPI_SALESORDER_CREATEFROMDAT2 创建退货SO
BAPI_SALESORDER_CREATEFROMDAT2创建退货订单时,会出现以下错误:不允许业务对象 BUS2032 和销售凭证类别 H 的组合. 解决办法: 采用/原BAPI的内嵌BAPI: ...
- VS2015 下载 破解
Visual Studio Professional 2015简体中文版(专业版): http://download.microsoft.com/download/B/8/9/B898E46E-CBA ...
- mysql查询当天,本周,本月,上一个月的数据(转)
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- Python基础(3)_可变对象与不可变对象、列表、元祖和字典
可变对象与不可变对象 实例被创建后,身份和类型是不可变的, 如果值是不可以被修改的,则是不可变对象 如果值是可以被修改的,则是可变对象 #在id不动,type也不动,value被修改了,则称为可变 # ...
- 图片加载Picasso
https://github.com/square/picasso 基本用法 // 基本用法 // 普通加载图片 Picasso.with(PicassoActivity.this) .load(&q ...