VC系统热键的注册

2016-02-19 19:03 5 1 收藏

下面,图老师小编带您去了解一下VC系统热键的注册,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

今天在写程序时想用一个系统热键,就像QQ一样最小化以后也能照样响应指定的快捷键。尽管我知道VC中肯定有现成的方法,但我毕竟没有实现过,于是研究了一番,很快就找到了解决方法。

使用系统热键可以这么进行,假设我们在 CTestHotkeyDlg 这个类进行热键测试。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

A. 首先是注册系统热键 RegisterHotKey

BOOL RegisterHotKey(HWND hWnd, int id, UINT fsModifiers, UINT vk);

 hWnd : 指定响应该热键的窗体
 id : 指定响应该事件的 id
 fsModifiers : 指定组合键。这个值可以由 MOD_ALT MOD_CONTROL MOD_SHIFT MOD_WIN 中的一个或几个组成。
 vk : 指定热键的虚拟键值。如 'A'

例如在本例中注册一个 Ctrl+Alt+Q 的热键。在 CTestHotkeyDlg特定的地方中调用:
RegisterHotKey(this-m_hWnd, 0x1998, MOD_CTRL | MOD_ALT, 'Q');

B. 接着响应并实现系统热键消息 WM_HOTKEY

添加消息映射 ON_MESSAGE(WM_HOTKEY,OnHotKey) 并实现函数 OnHotKey

LRESULT CHotKeyTestDlg::OnHotKey(WPARAM wParam, LPARAM lParam)
{
   MessageBox("You press Ctrl+Alt+Q");
   return 0;
}

C. 最后,可别忘了在程序结束时撤销注册的热键 UnRegisterHotKey

void CHotKeyTestDlg::OnDestroy()
{
   CDialog::OnDestroy();
   UnregisterHotKey(this-m_hWnd,1000);
}

到此系统热键的工作全部完成。

 ——————————————————————————————————————————————————

最好不要直接用0x1998, 0x1220等数,以防止热键冲突
ATOM m_atom1,m_atom2;    //保存全局原子

ATOM TmpID=GlobalFindAtom("my first hotkey");
if TmpID=0 then //查找全局原子.如果返回值不为0,则说明这个全局原子已经被注册;


m_atom1 = GlobalAddAtom("my first hotkey");
m_atom2 = GlobalAddAtom("my second hotkey");
BOOL m_isKeyRegistered;
m_isKeyRegistered = RegisterHotKey(GetSafeHwnd(),m_atom1, MOD_CONTROL|MOD_SHIFT, 0x4e);
ASSERT(m_isKeyRegistered != FALSE);     //调试时用(当前热键已经被注册时会返回失败)
// 注册第二个始终不行
if(RegisterHotKey(GetSafeHwnd(), m_atom2, MOD_CONTROL, 0x4d) == FALSE)
{
MessageBox("error", NULL, MB_OK);
}

在不需要热键时,比如程序退出时
GlobalDeleteAtom(m_atom1);
GlobalDeleteAtom(m_atom2);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1619903.html

延伸阅读
标签: 电脑入门
  1、XP中让程序开机即运行的新方法 点击“开始”菜单中的“运行”,在打开的“运行”对话框中输入“Regedit”,打开注册表编辑器。顺次展开注册表到HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows下,在这里新建一个字符串值,方法是右击主键“Windows”,在弹出的菜单中选择“新建”→“串值”,把该字符串值...
标签: ASP
  <%@ Page Language="C#" % <%@ Import Namespace="System.Data" % <%@ Import Namespace="System.Data.SQL" % <html <head<titleASP+注册</title <link rel="stylesheet" type="text/css" href="main.css" <Script Language="C#" Ru...
Windows95/98/Me的注册表包含了Windows95/98/Me的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。     在实际编程工作中,我们遇到了如何在Visual C++中对Windows95/...
在市面上,有很多注册表管理方面的程序,如:魔法兔子,IE保护器等。但它们对注册表都进行固定的操作,对与windows的高级管理员来说是远远不够的,还经常用到Regedit,那它是如何设计的呢?经过分析它的主要分成以下几块①、注册表数据的显示与操作;②、注册表数据的导入与导出;③注册表数据的查找与替换。以下介绍在VC6中对注册表数据的...
标签: Web开发
    现在一个页面上用到的链接是越来越多,让人能一目了然地直接找到相应的链接却是越来越困难了,怎么样能方便地解决这个问题呢?现在有了用热键来导航的方法,相对来讲方便多了,其实它的原理是非常简单的,现在就来为大家介绍两种方法,有了它,就可以解决许多你原来没法解决的问题了。     你一定心动了吧,...

经验教程

580

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部