WEB开发网
开发学院软件开发VC 为winamp定做热键 阅读

为winamp定做热键

 2010-07-15 20:45:20 来源:WEB开发网   
核心提示:前言:本人喜欢把winamp设置在托盘区,不过winamp不提供热键呼出,而我用惯OICQ的热键呼出,为winamp定做热键,所以,每次想换歌时要用鼠标点击总觉得不爽,便于用户自己添加喜欢的热键,示例程序中默认的是"ctrl+某个键".m_Wap是winamp的热键m_Dlg是dialog的热键利用

前言:

本人喜欢把winamp设置在托盘区,不过winamp不提供热键呼出,而我用惯OICQ的热键呼出,所以,每次想换歌时要用鼠标点击总觉得不爽。

于是萌发了给它作个热键的想法,基本思想就是注册一个系统级热键当然热键不能直接注册在winamp上的,所以我把热键注册在一个对话框上,然后通过获得的winamp的句柄将winamp显示出来,并且是显示到最前方。而且对话框最小化时对它进行隐藏,这样不至于占用任务栏,也让人觉得热键就是winamp自己带的,对话框也同样用热键呼出。

示例程序运行效果图

具体步骤:

首先创建一个对话框工程,添加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调试通过)

本文配套源码

Tags:winamp 定做 热键

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接