熱鍵和捕獲系統菜單消息

熱鍵和捕獲系統菜單消息

作者:wuhran
日期:2006-12-19

註冊熱鍵,函數原型:
BOOL RegisterHotKey(
  HWND hWnd,         // 接收hotkey窗口
  int id,            // hotkey的id 範圍是0x0000到0xBFFF
  UINT fsModifiers,  // 可以是MOD_ALT MOD_CTRL MOD_WIN
  UINT vk            // 虛擬鍵值
);

本文適合初學者

前言:
本人喜歡把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的值
);

#ifndef ID_MYHOTKEY
#define ID_MYHOTKEY 0x5554
#endif

在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 == ID_MYHOTKEY)
 {  
 
 }

 return CDialog::PreTranslateMessage(pMsg);
}
 
捕捉窗口最小化消息
重載WindowProc
LRESULT CXXXDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if(message == WM_SYSCOMMAND && wParam == SC_MINIMIZE)
    {
        this->ShowWindow(SW_HIDE);
        return 0;
    }

    return CDialog::WindowProc(message, wParam, lParam);
   
}

 

本文來自CSDN博客,轉載請標明出處http://blog.csdn.net/wuhuiran/archive/2006/12/19/1448714.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章