RegisterHotKey
来源:互联网 发布:Java诺基亚 编辑:程序博客网 时间:2024/04/28 22:47
RegisterHotKey实现Alt+E的快捷键组合功能
问题提出
有的程序需要自定义组合键完成一定功能,如何实现?
解决方法
RegisterHotKey函数原型及说明:
BOOL RegisterHotKey(
HWND hWnd, //响应该热键的窗口句柄
Int id, //该热键的唯一标识
UINT fsModifiers, //该热键的辅助按键
UINT vk //该热键的键值
);
其中,
(1)id的说明:
id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 - 0xBFFF范围之内,对DLL来讲其值必需在0xC000 - 0xFFFF 范围之内,在同一进程内该值必须唯一.
为了得到唯一标识,我们还将用到另一个API函数
ATOM GlobalAddAtom(
LPCTSTR lpString //自己设定的一个字符串
);
(2)fsModefiers的取值如下:
MOD_ALT
MOD_CONTROL
MOD_SHIFT
MOD_WIN
程序实现:
建立名为My的对话框工程.本例要用到RegisterHotKey 实现Alt+E的快捷键组合功能.在调用该函数后你的进程会在ALT+E按下时比系统先得到通知.你需要处理的消息是WM_HOTKEY.
如下:
在MyDlg.h中:
class CMyDlg : public CDialog
{
// Construction
public:
int m_nHotKeyID;//为你自己定义的一个hot key的ID值,在整个程序唯一.
........
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CMyDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
在MyDlg.cpp中:
#define VK_D 68
..............
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CHotKey1Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, OnRegisterHotKey)
ON_BN_CLICKED(IDCANCEL, OnUnregisterHotKey)
ON_MESSAGE(WM_HOTKEY,OnHotKey) //手动加入.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
m_nHotKeyID=0;
BOOL m_isKeyRegistered = RegisterHotKey(GetSafeHwnd(),m_nHotKeyID,MOD_ALT,VK_E);//向系统注册ATL+E这个热键
ASSERT(m_isKeyRegistered != FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
在取消按钮的事件函数中加入:
void CMyDlg::OnCancel()
{
BOOL m_iskeyUnregistered = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID);//释放ATL+E这个热键
ASSERT(m_iskeyUnregistered != FALSE);
CDialog::OnCancel();
}
处理截到的组合键,并处理:
LONG CMyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("你按下了组合键:Alt+E");
//加入相关代码.
return 0;
}
- RegisterHotKey
- RegisterHotKey
- RegisterHotKey
- RegisterHotKey 详解
- RegisterHotKey函数
- RegisterHotKey设置系统热键
- RegisterHotKey实现热键
- 注册系统热键 RegisterHotKey()
- 注册热键 RegisterHotKey
- RegisterHotKey的具体使用方法
- 【C++】注册热键-RegisterHotKey
- RegisterHotKey 热键的使用
- Delphi RegisterHotKey 设置系统热键
- delphi RegisterHotKey注册快键
- 注册热键——RegisterHotKey
- 关于wxWidgets中的RegisterHotKey不得不说的故事
- RegisterHotKey不认CHotKeyCtrl的帐
- MFC注册热键的方法(RegisterHotKey)
- iPhone开发中关于Xib文件创建UITableViewCell方法
- 黑马程序员_银行调度系统
- mount
- 数据结构之线性表——数组循环左移
- OpenSCManager
- RegisterHotKey
- SSH分页处理
- 关于Emacs 24用purcell配制的color-theme问题
- Marr-Hildreth边缘检测器
- 黑马程序员_java多线程上
- HDU2084(数塔)
- 生活工作之 感冒预防与治疗篇
- ibatis动态SQL文的使用
- 黑马程序员--其 它 常 用 类