程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 為winamp定做熱鍵

為winamp定做熱鍵

編輯:關於VC++

前言:

本人喜歡把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調試通過)

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved