Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9727457
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-03-17 17:47:57

下载本文示例代码
本文适合初学者

前言:

本人喜欢把winamp设置在托盘区,不过winamp不提供热键呼出,而我用惯OICQ的热键呼出,所以,每次想换歌时要用鼠标点击总觉得不爽。
于是萌发了给它作个热键的想法,基本思想就是注册一个系统级热键当然热键不能直接注册在winamp上的,所以我把热键注册在一个对话框上,然后通过获得的winamp的句柄将winamp显示出来,并且是显示到最前方。而且对话框最小化时对它进行隐藏,这样不至于占用任务栏,也让人觉得热键就是winamp自己带的,对话框也同样用热键呼出。

下载源代码 大小:11K


示例程序运行效果图

具体步骤:
首先创建一个对话框工程,添加edit控件,便于用户自己添加喜欢的热键,示例程序中默认的是"ctrl+某个键".
m_Wap是winamp的热键
m_Dlg是dialog的热键
利用::RegisterHotKey进行注册

BOOL RegisterHotKey(
  HWND hWnd,         // 接收hotkey窗口
  int id,            // hotkey的id 范围是0x0000到0xBFFF
  UINT fsModifiers,  // 可以是MOD_ALT MOD_CTRL MOD_WIN
  UINT vk            // 虚拟键值,就是m_Wap,m_Dlg的值
);


void CXXXDlg::OnOk() 
{        
 // TODO: Add your control notification handler code here
 UpdateData(TRUE);
 m_Wap.MakeUpper();//字母转化成大写
 m_Dlg.MakeUpper();
 if((!::RegisterHotKey(this->m_hWnd,0Xa002,MOD_CONTROL,(UINT)m_Wap[0]))
  &&(!::RegisterHotKey(this->m_hWnd,0Xa001,MOD_CONTROL,(UINT)m_Dlg[0])))
  
       AfxMessageBox("*^_^* 热键已经注册了 *^_^*");
        
}
在PreTranslateMessage中响应
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
{
 // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message==WM_HOTKEY && pMsg->wParam==0Xa002)
 {   
                //中文版
  HWND handle=FindWindowEx(NULL,NULL,NULL,"Winamp 播放清单编辑器");
                //英文版
  HWND handle2=FindWindowEx(NULL,NULL,NULL,"Winamp Playlist Editor");
  if(handle)
  {
   ::ShowWindow(handle,SW_SHOWNORMAL);
   ::SetForegroundWindow(handle);
  }
  if(handle2)
  {
   ::ShowWindow(handle2,SW_SHOWNORMAL);
          ::SetForegroundWindow(handle2);
  }
 }

    if (pMsg->message==WM_HOTKEY && pMsg->wParam==0Xa001)
 {
  ::ShowWindow(this->m_hWnd,SW_SHOWNORMAL);
  ::SetForegroundWindow(this->m_hWnd);
 }

 return CDialog::PreTranslateMessage(pMsg);
}
程序结束时候自然要把热键注销了
void CXXXDlg::OnClose() 
{
 // TODO: Add your message handler code here and/or call default
 UnregisterHotKey(this->m_hWnd,0Xa001);
 UnregisterHotKey(this->m_hWnd,0Xa002);
 CDialog::OnClose();
}
具体的例程可见本文提供的源代码(在WIN2K,VC6.0调试通过)

下载本文示例代码
阅读(1639) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~