在应用程序中使用热键

发表于:2007-07-01来源:作者:点击数: 标签:
在应用程序中使用热键 摘要: 本文通过一个实例,详细讲述了Visual C++的Hot Key控件(CHotKeyCtrl类)的使用方法 关键词 :热键 CHotKeyCtrl RegisterHotKey UnregisterHotKey Windows 操作系统提供了许多热键,比如常用的热键:Win+E打开资源管理器,Win+F


在应用程序中使用热键

 

摘要:   本文通过一个实例,详细讲述了Visual C++的Hot Key控件(CHotKeyCtrl类)的使用方法

关键词:热键 CHotKeyCtrl  RegisterHotKey UnregisterHotKey

 

Windows操作系统提供了许多热键,比如常用的热键:Win+E打开资源管理器,Win+F打开查找对话框,F1打开帮助等等。使用这些热键可以使我们的操作更加方便。那么,怎样在自己的应用程序中添加和使用热键呢?下面以VC++为例来说明。

MFC提供了CHotKeyCtrl类,由 CHotKeyCtrl 类表示的热键控件是一个窗口,显示用户键入的组合键(如 CTRL +S)的文本表示形式。它还维护此键的内部表示形式和一组表示转换状态的标志。热键控件实际上并不设置热键,要靠程序员自己来实现。

 

应用程序可以按下列两种方法来使用CHotKeyCtrl控件设置热键:

1通过向将要激活的窗口发送 WM_SETHOTKEY 消息,设置一个用于激活非子窗口的全局热键。

全局热键与特定的非子窗口关联。它使用户得以从系统的任何部分激活窗口。应用程序通过向特定的窗口发送 WM_SETHOTKEY 消息来设置该窗口的全局热键。例如,假如 m_hotkey 是 CHotKeyCtrl 的对象,则可以使用下列代码将控件中指定的热键和主窗口关联起来。

WORD wKey = m_ hotkey.GetHotKey( );

 

AfxGetMainWnd()->SendMessage( WM_SETHOTKEY,

 

 

wKey);

这样,每当用户按全局热键时,指定的窗口就会接收 WM_SYSCOMMAND 消息,该消息将 SC_HOTKEY 指定为命令类型。该消息还激活接收它的窗口。由于该消息不包括按下的确切键的任何信息,使用此方法不能区分可能附加到同一窗口的不同热键。在发送 WM_SETHOTKEY 的应用程序退出之前,热键一直保持有效。

 

2通过调用 API 函数 RegisterHotKey() 来设置线程特定的热键。

应用程序使用 RegisterHotKey() 函数设置线程特定的热键。用户按线程特定的热键后,Windows 将 WM_HOTKEY 消息发送到特定线程的消息队列的开始处。WM_HOTKEY消息的结构如下:

idHotKey = (int) wParam;            

fuModifiers = (UINT) LOWORD(lParam);

uVirtKey = (UINT) HIWORD(lParam);    

下面是两个关键的函数:

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

该函数用于在系统中注册热键。参数hWnd用于指定注册热键的窗口,如果为NULL的话将使热键被注册到该函数的调用线程;id用于指定该热键的标识,在热键消息相应的时候,我们将通过该ID来对不同的热键消息作区分;fsModifiers用于指定修改键,它可以是下面值的组合:

描述

MOD_ALT

任一Alt键按下

MOD_CONTROL

任一Control键按下

MOD_SHIFT

任一Shift键按下

原文转自:http://www.ltesting.net