應用程式需在背景執行時,透過全域熱鍵 (如 Ctrl+F12) 呼叫主視窗顯示/隱藏,無須點選工作列圖示。
class TMainForm : public TForm {
__published:
// IDE 管理元件...
private:
// 使用者宣告...
protected:
// 訊息對應巨集
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_HOTKEY, TMessage, OnHotKey)
END_MESSAGE_MAP(TForm)
void __fastcall OnHotKey(TMessage &Message); // 熱鍵訊息處理
public:
__fastcall TMainForm(TComponent* Owner);
};
void __fastcall TMainForm::FormCreate(TObject *Sender) {
// 註冊系統熱鍵:ID=2000, Ctrl+F12
if (!RegisterHotKey(Handle, 2000, MOD_CONTROL, VK_F12)) {
ShowMessage("熱鍵註冊失敗");
}
}
void __fastcall TMainForm::OnHotKey(TMessage &Message) {
// 傳遞給預設處理器
TForm::Dispatch(&Message);
// 切換視窗顯示/隱藏
if (!Visible) {
Show();
BringToFront();
} else {
Hide();
}
}
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action) {
// 程式結束時註銷熱鍵
UnregisterHotKey(Handle, 2000);
}
| API | 用途 | 關鍵參數 |
|---|---|---|
| RegisterHotKey | 註冊全域熱鍵 | hWnd, id, fsModifiers (MOD_CONTROL/MOD_ALT/MOD_SHIFT), vk (虛擬鍵碼) |
| UnregisterHotKey | 註銷熱鍵 | hWnd, id |
| WM_HOTKEY | 熱鍵觸發訊息 | wParam = 熱鍵 ID, lParam 低字=修飾鍵, 高字=虛擬鍵碼 |
MOD_ALT (0x0001):AltMOD_CONTROL (0x0002):CtrlMOD_SHIFT (0x0004):ShiftMOD_WIN (0x0008):Win 鍵 (Windows 2000+) FormClose 中務必呼叫 UnregisterHotKey,否則系統保留熱鍵導致資源洩漏RegisterHotKey 返回 FALSE,需更換組合鍵protected 區段使用 BEGIN_MESSAGE_MAP 巨集