如何给应用程序添加热键?
对于一个后台程序,常常需要添加一个热键,此时,由于此时应用程序不在桌面,所以那些标准的MFC中定义的消息以及相关处理函数也不再有用。一般的做法是:
在init中做完必要的操作后,先注册一个系统热键,程序退出后释放掉。
系统热键的注册
根据前面的介绍,不难写出为后台服务程序添加对系统热键响应的功能代码。首先通过函数GlobalFindAtom()查询本服务程序所对应的全局原子是否已存在于全局原子表中,如果发现,则说明系统中已经存在有此服务,程序退出。如果没有发现,则通过GlobalAddAtom()函数向全局原子表添加一个字串,并获取得到一个唯一标识此字串的原子。以上两函数原型分别为:ATOM GlobalFindAtom(LPCTSTR lpString); ATOM GlobalAddAtom(LPCTSTR lpString); |
BOOL RegisterHotKey(HWND hWnd, // 接收热键响应的窗口句柄 int id, // 热键的标识 UINT fsModifiers, // 控制键标志 UINT vk // 虚拟键值 ); |
// 获取当前窗口句柄 HWND handle = GetSafeHwnd(); // 寻找HotKey对应的原子是否存在于原子列表 if(GlobalFindAtom("Hotkey") == 0) { // 如果没有存在于原子列表,则创建一个原子 id = GlobalAddAtom("Hotkey"); //注册全局热键Ctrl + Alt + R RegisterHotKey(handle, id, CONTROL + ALT, R); } else // 如果HotKey已经存在于原子列表,则终止程序运行 PostQuitMessage(0); |