分类: C/C++
2008-03-17 17:47:57
本文适合初学者 前言: 本人喜欢把winamp设置在托盘区,不过winamp不提供热键呼出,而我用惯OICQ的热键呼出,所以,每次想换歌时要用鼠标点击总觉得不爽。 于是萌发了给它作个热键的想法,基本思想就是注册一个系统级热键当然热键不能直接注册在winamp上的,所以我把热键注册在一个对话框上,然后通过获得的winamp的句柄将winamp显示出来,并且是显示到最前方。而且对话框最小化时对它进行隐藏,这样不至于占用任务栏,也让人觉得热键就是winamp自己带的,对话框也同样用热键呼出。 下载源代码 大小:11K 示例程序运行效果图 具体步骤: 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调试通过) |