VC系统热键的注册
来源:互联网 发布:怎样添加网络共享硬盘 编辑:程序博客网 时间:2024/05/16 19:22
今天在写程序时想用一个系统热键,就像QQ一样最小化以后也能照样响应指定的快捷键。尽管我知道VC中肯定有现成的方法,但我毕竟没有实现过,于是研究了一番,很快就找到了解决方法。
使用系统热键可以这么进行,假设我们在 CTestHotkeyDlg 这个类进行热键测试。
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);
- VC系统热键的注册
- VC系统热键的注册
- VC系统热键的注册(转载)
- vc 如何注册系统热键
- vc 如何注册多个系统热键
- 关于VC注册热键的笔记
- VC++热键注册
- VC++热键注册
- 如何注册系统热键
- 注册系统热键
- 注册系统热键
- C#注册系统热键
- 注册系统热键
- 注册系统热键
- C# 注册系统热键
- 注册系统热键
- 注册系统热键 RegisterHotKey()
- C# 注册系统热键
- 毕业
- 在sql server里怎么用二进制存图片?包括office文件等等
- 【原创】Hibernateonetomany
- 指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针
- 有感于最长的/最大的......
- VC系统热键的注册
- 回顾一年来的理财历程
- WebWork深入浅出
- 【原创】Hibernateonetoone
- 平衡记分卡(BSC)初探
- 又开始写blog了......
- 如何结合hibernate进行复杂的查询功能设计
- 中国各种资格认证考试一览表
- 烦恼的一天