在应用程序中使用热键 摘要: 本文通过一个实例,详细讲述了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 消息来设置该窗口的全局热键。例如,假如 WORD wKey = m_ 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用于指定修改键,它可以是下面值的组合: |