RegisterHotKey的具體使用方使用方法如下:
BOOL RegisterHotKey(
HWND hWnd, //響應該熱鍵的窗口句柄
Int id, //該熱鍵的唯一標識
UINT fsModifiers, //該熱鍵的輔助按鍵
UINT vk //該熱鍵的鍵值
);
為了得到唯一標識,我們還將用到另一個API函數
ATOM GlobalAddAtom(
LPCTSTR lpString //自己設定的一個字符串
);
例如:
注冊熱鍵
m_HKId = ::GlobalAddAtom(_T("MyHotKey")) - 0xC000;
BOOL bl = ::RegisterHotKey(GetHWND(), m_HKId, MOD_SHIFT, VK_F1);
因為我們還要在程序退出的時候,消除這個熱鍵, 所以需要聲明一個全局變量:
HotKeyId: Integer;
第一步:
在窗口的create事件中,加入以下代碼
HotKeyId := GlobalAddAtom(‘MyHotKey’) - $C000;
注: HotKeyId的合法取之范圍是0x0000到0xBFFF之間, GlobalAddAtom函數得到的值
在0xC000到0xFFFF之間,所以減掉0xC000來滿足調用要求。
第二步:
在上面的代碼下面加入:
RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8);
熱鍵的輔助按鍵包括Mod_Ctrl 、Mod_Alt、Mod_Shift,對於Windows兼容鍵盤還支持Windows
鍵,即其鍵面上有Windows標志的那個鍵,其值為Mod_win。
上面 的代碼注冊了一個熱鍵:ALT+F8。當然如果你希望象TAKEIT那樣,只用F8, 就這么寫:
RegisterHotKey(Handle, hotkeyid, 0, VK_F8);
注:handle是一個特殊的變量,它表示當前窗口的句柄。
這個函數你應該能句舉一反三了吧。
原理:
一旦熱鍵設置成功,在程序應用過程中如果有相應的鍵被按下,Windows系統都會給你的應
用程序發送一個消息WM_HOTKEY,不管你的應用程序是否為當前活動的。其中WM_HOTKEY消
息的格式為:
idHotKey = (int) wParam; // 該參數在設置系統級的熱鍵有用,一般不予使用
fuModifiers = (UINT) LOWORD(lParam); //熱鍵的輔助按鍵
uVirtKey = (UINT) HIWORD(lParam); //熱鍵的鍵值
第三步:
注冊了熱鍵,就該寫下響應代碼了。
首先,在程序頭部分的private段中加入聲明 (作用是聲明這個過程,和聲明變量類似。
關於如何聲明函數、過程,請請參考各自的幫助文件或其它資料):
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
然后在程序中加入如下代碼:
消息處理函數中判斷消息是否為 WM_HOTKEY消息
case WM_HOTKEY:
{
//熱鍵要處理的操縱
}
break;
最后一步:
在窗口的close事件中加入
UnRegisterHotKey(handle, HotKeyId); //注銷HotKey, 釋放資源
