我的是用vc写的一个后台程序,怎么设计系统热键,需要的时候把它呼叫出来? 我的是用vc写的一个后台程序,怎么设计系统热键,需要的时候把它呼叫出来?而且,当焦点不落在这个程序的时候,也可以呼出来吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般的做法是:在init中做完必要的操作后,先注册一个系统热键,程序退出后释放掉。系统热键的注册 根据前面的介绍,不难写出为后台服务程序添加对系统热键响应的功能代码。首先通过函数GlobalFindAtom()查询本服务程序所对应的全局原子是否已存在于全局原子表中,如果发现,则说明系统中已经存在有此服务,程序退出。如果没有发现,则通过GlobalAddAtom()函数向全局原子表添加一个字串,并获取得到一个唯一标识此字串的原子。以上两函数原型分别为:ATOM GlobalFindAtom(LPCTSTR lpString);ATOM GlobalAddAtom(LPCTSTR lpString); 其中,输入参数为一个描述原子的字符串,如果GlobalFindAtom()从全局原子表中找到了指定的字串,那么将返回此字串对应的原子,否则返回0。GlobalAddAtom()如果创建成功,将返回一个新创建的原子。接下来,为了能在程序运行期间捕获到系统热键,需要通过RegisterHotKey()定义一个系统范围的热键。该函数原形如下:BOOL RegisterHotKey(HWND hWnd, // 接收热键响应的窗口句柄int id, // 热键的标识UINT fsModifiers, // 控制键标志UINT vk // 虚拟键值); 其中,热键标识id必须是一个范围在0xC000到0xFFFF之间的全局唯一的值,为了避免可能引起的热键冲突,通常把GlobalAddAtom()返回的原子作为参数传入,而且GlobalAddAtom()返回值的范围同id参数的允许范围是完全一致的。参数fsModifiers定义了同虚拟键值vk同时按下而产生出系统热键消息WM_HOTKEY的控制键组合,如MOD_ALT、MOD_CONTROL、MOD_SHIFT和MOD_WIN等。在本例中将要设定的系统热键为Alt+Ctrl+R,因此,参数fsModifiers和vk分别设置为MOD_ALT| MOD_CONTROL和VK_R。有关系统热键的注册实现方法可以整理如下:// 获取当前窗口句柄HWND handle = GetSafeHwnd();// 寻找HotKey对应的原子是否存在于原子列表if(GlobalFindAtom("Hotkey") == 0){// 如果没有存在于原子列表,则创建一个原子id = GlobalAddAtom("Hotkey"); //注册全局热键Ctrl + Alt + RRegisterHotKey(handle, id, CONTROL + ALT, R); }else // 如果HotKey已经存在于原子列表,则终止程序运行PostQuitMessage(0); 运用函数BOOL RegisterHotKey(HWND hWnd, // 接收热键响应的窗口句柄int id, // 热键的标识UINT fsModifiers, // 控制键标志UINT vk // 虚拟键值); 注册热键,然后自己定义热键处理的消息,绑定到处理该消息的函数即可。 RegisterHotKey()就搞定了,至于第二个函数,一般来说你可以随意指定,比如直接指定为17,3,都可以。 用如下方法进行对话框背景贴图出现问题 关于VC6.0调用MATLAB问题,请高手指点一下,急!!! 如何在对话框中实现类似于设置断点调试程序时的演示效果? 请问一下这个软件用什么数据库比较好呢 在Vc中用什么控件显示文字比较好? 再加100分总共300分,高手请来看看。 那里可以找到串行通讯的代码和资料? 用VC如何画类似电梯移动箭头的效果? 将二维图形转化为三维图形 CRect IID_IXMLDOMNode 的未定一错误是怎么回事 19992003接分!
ATOM GlobalAddAtom(LPCTSTR lpString); 其中,输入参数为一个描述原子的字符串,如果GlobalFindAtom()从全局原子表中找到了指定的字串,那么将返回此字串对应的原子,否则返回0。GlobalAddAtom()如果创建成功,将返回一个新创建的原子。
接下来,为了能在程序运行期间捕获到系统热键,需要通过RegisterHotKey()定义一个系统范围的热键。该函数原形如下:BOOL RegisterHotKey(HWND hWnd, // 接收热键响应的窗口句柄
int id, // 热键的标识
UINT fsModifiers, // 控制键标志
UINT vk // 虚拟键值
); 其中,热键标识id必须是一个范围在0xC000到0xFFFF之间的全局唯一的值,为了避免可能引起的热键冲突,通常把GlobalAddAtom()返回的原子作为参数传入,而且GlobalAddAtom()返回值的范围同id参数的允许范围是完全一致的。参数fsModifiers定义了同虚拟键值vk同时按下而产生出系统热键消息WM_HOTKEY的控制键组合,如MOD_ALT、MOD_CONTROL、MOD_SHIFT和MOD_WIN等。在本例中将要设定的系统热键为Alt+Ctrl+R,因此,参数fsModifiers和vk分别设置为MOD_ALT| MOD_CONTROL和VK_R。有关系统热键的注册实现方法可以整理如下:// 获取当前窗口句柄
HWND handle = GetSafeHwnd();
// 寻找HotKey对应的原子是否存在于原子列表
if(GlobalFindAtom("Hotkey") == 0)
{
// 如果没有存在于原子列表,则创建一个原子
id = GlobalAddAtom("Hotkey");
//注册全局热键Ctrl + Alt + R
RegisterHotKey(handle, id, CONTROL + ALT, R);
}
else // 如果HotKey已经存在于原子列表,则终止程序运行
PostQuitMessage(0);
BOOL RegisterHotKey(HWND hWnd, // 接收热键响应的窗口句柄
int id, // 热键的标识
UINT fsModifiers, // 控制键标志
UINT vk // 虚拟键值
);
注册热键,然后自己定义热键处理的消息,绑定到处理该消息的函数即可。