给VC程序加上热键(快捷键)

转载 2012年08月10日 15:27:02
      在利用Windows Media Player ActiveX控件写了一个简单的媒体播放器,想让自己写的这个播放器实现彻底隐藏的功能:程序主窗体的隐藏、在任务栏上的隐藏、在Alt+Tab键在程序间切换时的隐藏。这样,程序在实施隐藏后其他人将意识不到程序的执行,可以达到非常好的隐身效果,并且再次按下该热键可以使程序隐藏后从后台呼出。 
注册热键

首先要在程序中注册一个热键,无论该程序在前台还是后台运行,只要用户按下这个热键,程序将立即执行在前、后台间的切换。通过对RegisterHotKey()的调用登记用于程序隐藏和呼出的热键Ctrl + P(或Ctrl + p),下面这段代码添加在要使用热键的类的xxx.cpp文件的初始化函数中,在程序初始运行时执行。

// 登记热键

HWND hWnd = GetSafeHwnd();

RegisterHotKey(hWnd, 1001, MOD_CONTROL, 'P'); 

RegisterHotKey(hWnd, 1002, MOD_CONTROL, 'p'); 

其中,1001、1002参数是这些热键对应的ID。在程序捕获到热键消息WM_HOTKEY后将通过这些ID来确认按下的是哪个键。


定义WM_HOTKEY消息响应函数

ClassWizard并没有对消息WM_HOTKEY进行封装,需要手工添加对该消息的映射及处理。消息处理函数的wParam参数包含有按键的ID,在类的头文件xxx.h中添加如下代码:

afx_msg long OnHotKey(WPARAM wParam,LPARAM lParam);

在相应类的.cpp文件的消息映射宏BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP之间加上同其他消息响应宏声明相同格式的自定义消息响应宏ON_MESSAGE(WM_HOTKEY,OnHotKey)

BEGIN_MESSAGE_MAP(类名, 父类名)

       //{{AFX_MSG_MAP(CMediaPlayDemoDlg)

       ……

      ON_MESSAGE(WM_HOTKEY, OnHotKey)

       ……

       //}}AFX_MSG_MAP

END_MESSAGE_MAP()


实现该消息处理函数:

HRESULT CMediaPlayDemoDlg::OnHotKey(WPARAM wParam,LPARAM lParam)

{

      switch(wParam) 

       {

              case 1001:

              case 1002:

                     {// 呼出程序

                            HWND hWnd = GetSafeHwnd();

                            LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);

                            lStyle &= ~WS_POPUP;

                            ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);

                            ::ShowWindow(m_hWnd,SW_SHOW);

                            CWnd::SetForegroundWindow();

                            m_Video.GetControls().play();

                            break;

                     }

              case 1003:

              case 1004:

                     {

                            if( m_hotSign == 0 )

                            {// 隐藏程序

                                   HWND hWnd = GetSafeHwnd();

                                   LONG lStyle = ::GetWindowLong(m_hWnd,GWL_STYLE);

                                   lStyle |= WS_POPUP;

                                   ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);

                                   ::ShowWindow(m_hWnd,SW_HIDE);

                                   m_Video.GetControls().pause();   //暂停播放

                                   m_hotSign = 1;

                                   break;

                            }

                            if( m_hotSign == 1 )

                            {// 呼出程序

                                   HWND hWnd = GetSafeHwnd();

                                   LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);

                                   lStyle &= ~WS_POPUP;

                                   ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);

                                   ::ShowWindow(m_hWnd,SW_SHOW);

                                   CWnd::SetForegroundWindow();

                                   m_Video.GetControls().play();

                                   m_hotSign = 0;

                                   break;

                            }

                     }

              

       }


       return TRUE;

}


注销注册的热键

在OnDestory(...)函数或OnCancel(...)中解除函数登记,释放系统资源。此时要调用函数 bool UnregisterHotKey(hWnd,VK(ID));

void CMediaPlayDemoDlg::OnDestroy()

{

       CDialog::OnDestroy();

       

      HWND hWnd = GetSafeHwnd();

       UnregisterHotKey(hWnd,1001);

       UnregisterHotKey(hWnd,1002);


}


编译链接后就可以使用Ctrl+P(’p’)来实现你自己程序的隐藏和呼出了。
 

VC++常用快捷键

“调试”快捷键       下列快捷组合键可在调试代码时使用。命令名   快捷键   说明   调试.应用代码更改   ALT + F10   开始一个“编辑”或“继续”生成,以应用对正在调试的代码所...
  • liranke
  • liranke
  • 2010年01月26日 08:03
  • 5048

VC编程增加快捷键的几种方式

对于这个问题,大家应该都不陌生,写于此只是进行了归纳总结,算是一个备忘吧 定义快捷方式有下面几种方法: 1.对于菜单(MENU)或者按钮(BUTTON) 直接在菜单或按钮的标题中,包含&X即可,...
  • pangshaohua
  • pangshaohua
  • 2011年11月22日 10:24
  • 3995

vc 全局注册热键范例(修订)

  • 2011年08月07日 18:14
  • 1.79MB
  • 下载

VC添加全局热键的方法

全局热键定义 VirtualKey.h /************************************************************************/ // Vi...
  • lujianfeiccie2009
  • lujianfeiccie2009
  • 2012年04月25日 17:09
  • 3992

VC编程增加快捷键的几种方式

对于这个问题,大家应该都不陌生,写于此只是进行了归纳总结,算是一个备忘吧 定义快捷方式有下面几种方法:1.对于菜单(MENU)或者按钮(BUTTON) 直接在菜单或按钮的标题中,包含&X即可,这里X是...
  • Augusdi
  • Augusdi
  • 2013年10月28日 09:55
  • 5722

VC如何注册、屏蔽全局键盘热键

      前段时间有两个朋友问我VC如何注册、屏蔽全局键盘热键,这是以前写过的一段代码。说实话,自己都感觉它比较“猥琐”,多的不说看源码吧!(哪位兄弟有其他思路,可以交流交流......) 1、定义...
  • wangningyu
  • wangningyu
  • 2009年08月22日 16:34
  • 5924

vc 如何注册系统热键

原文链接:http://www.cnblogs.com/VCdog/archive/2010/04/07/1706228.html 纵观整个搜索引擎,这个样的主题文章也很多,就是没有自己亲自...
  • zzstack
  • zzstack
  • 2016年01月12日 09:19
  • 500

VC注册屏蔽全局热键

  • 2009年08月22日 16:55
  • 112KB
  • 下载

VS-C++的一些实用快捷键(望大家一起来补充)

Ctrl + K + C 可以批量备注 Ctrl + K + U 可以批量删掉你批量备注的东西
  • Mr_Yaoxiansen
  • Mr_Yaoxiansen
  • 2017年12月08日 14:41
  • 10

VC实现系统热键激活后台服务程序

摘要: 本文给出了一种通过设置系统热键来呼出在系统后台隐藏运行的服务程序的一种方法,通过这种方法,可以实现后台服务程序在必要的时候同用户的交互设置。   引言   通常情况下,用于后台监控...
  • jacksonfan
  • jacksonfan
  • 2015年06月27日 14:31
  • 488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给VC程序加上热键(快捷键)
举报原因:
原因补充:

(最多只允许输入30个字)