首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

為 Winamp 打造全域熱鍵呼出工具

     編輯:關於VC++

前言

Winamp 預設最小化至系統托盤,但缺乏熱鍵喚出功能。習慣 QQ 風格熱鍵的使用者每次換歌都要滑鼠點擊托盤圖示,頗為不便。本文示範如何編寫一個常駐系統托盤的小工具,註冊全域熱鍵,透過 FindWindowEx 尋找 Winamp 視窗並呼叫 ShowWindow/SetForegroundWindow 實現一鍵喚出,同時工具本身也支援熱鍵顯示/隱藏設定視窗。

核心 API

BOOL RegisterHotKey(
    HWND hWnd,        // 接收 WM_HOTKEY 的視窗
    int  id,          // 熱鍵 ID (0x0000~0xBFFF)
    UINT fsModifiers, // MOD_ALT | MOD_CONTROL | MOD_SHIFT | MOD_WIN
    UINT vk           // 虛擬鍵碼 (如 'A', VK_F1)
);

BOOL UnregisterHotKey(HWND hWnd, int id);

實作步驟

1. 對話框初始化與熱鍵註冊 (OnOK)

void CHotkeyDlg::OnOK()
{
    UpdateData(TRUE);
    m_Wap.MakeUpper(); // Winamp 熱鍵鍵碼
    m_Dlg.MakeUpper(); // 設定視窗熱鍵鍵碼

    // 預設使用 Ctrl + 字母
    if (!RegisterHotKey(m_hWnd, 0xA002, MOD_CONTROL, (UINT)m_Wap[0]) ||
        !RegisterHotKey(m_hWnd, 0xA001, MOD_CONTROL, (UINT)m_Dlg[0]))
    {
        AfxMessageBox(_T("熱鍵已被佔用!"));
    }
}

2. 訊息迴圈攔截 WM_HOTKEY (PreTranslateMessage)

BOOL CHotkeyDlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_HOTKEY)
    {
        if (pMsg->wParam == 0xA002) // Winamp 熱鍵
        {
            // 中文版視窗標題
            HWND hWinamp = FindWindowEx(NULL, NULL, NULL, _T("Winamp 播放清單編輯器"));
            // 英文版視窗標題
            HWND hWinamp2 = FindWindowEx(NULL, NULL, NULL, _T("Winamp Playlist Editor"));

            if (hWinamp) {
                ShowWindow(hWinamp, SW_SHOWNORMAL);
                SetForegroundWindow(hWinamp);
            }
            if (hWinamp2) {
                ShowWindow(hWinamp2, SW_SHOWNORMAL);
                SetForegroundWindow(hWinamp2);
            }
        }
        else if (pMsg->wParam == 0xA001) // 設定視窗熱鍵
        {
            ShowWindow(m_hWnd, SW_SHOWNORMAL);
            SetForegroundWindow(m_hWnd);
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

3. 程式結束時註銷熱鍵 (OnClose)

void CHotkeyDlg::OnClose()
{
    UnregisterHotKey(m_hWnd, 0xA001);
    UnregisterHotKey(m_hWnd, 0xA002);
    CDialog::OnClose();
}

執行效果

工具最小化時隱藏至托盤 (需自行實作 Shell_NotifyIcon),不佔用工作列空間。按 Ctrl+設定鍵 喚出設定視窗,按 Ctrl+Winamp鍵 直接喚出 Winamp 播放清單。

擴充建議

  • 支援 MOD_WIN (Win 鍵) 組合,避免與其他軟體衝突。
  • 熱鍵衝突時提示使用者更換,而非單純 MessageBox。
  • 增加「開機自動啟動」登錄寫入功能。
  • 支援 Winamp 現代版皮膚視窗類別名稱 (Winamp v1.x) 以相容更多版本。

完整原始碼 (VC6.0 / Win2K 測試通過) 可下載參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved