問題是你要全域性的.還是要系統級的,還是要區域性的。
如果是全域性和區域性的,那麼在主窗體上(或其他控制項上)(form)的keypress等屬性上監控就行了..
如果是系統級的,那麼需要api了.
簡單**:
用到3個api函式
bool registerhotkey(
hwnd hwnd, //響應該熱鍵的視窗控制代碼
int id, //該熱鍵的唯一標識
uint fsmodifiers, //該熱鍵的輔助按鍵
uint vk //該熱鍵的鍵值
); 為了得到唯一標識,我們還將用到另乙個api函式
atom globaladdatom(
lpctstr lpstring //自己設定的乙個字串
); 因為我們還要在程式退出的時候,消除這個熱鍵, 所以需要宣告乙個全域性變數:
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;
然後在程式中加入如下**:
procedure tfmain.hotkeydown(var msg: tmessage);
begin
if (msg.lparamlo = mod_alt) and (msg.lparamhi = vk_f8 then) // 假設熱鍵為alt+f8
begin
showmessage('f8');
end;
end;
最後一步:
在視窗的close事件中加入
unregisterhotkey(handle, hotkeyid); //登出hotkey, 釋放資源。
atomid = globaladdatom(ls_atomid)
//得到id,保證不和其他應用程式發生衝突
ll_rc = registerhotkey(handle(this), atomid, mod_alt + mod_control, 65)
//註冊的熱鍵為ctrl+alt+a ,65為'a'
delphi程式熱鍵
要定義乙個全域性熱鍵,通常有三個步驟 1 定義windows的訊息wm hotkey的hook鏈,即 procedure myshortcut var message tmessage message wm hotkey 2 向windows加入乙個全域性原子hotkey globaladdatom...
Delphi全域性熱鍵的註冊
1.在窗啟動時建立atom aatom atom 定義在private中 1 if findatom zwxhotkey 0 then 2begin 3 aatom globaladdatom zwxhotkey 4end 5 if registerhotkey handle,aatom,mod a...
Delphi 全域性熱鍵註冊 使用
rad studio 10.2.3 測試 全域性變數 var mhotkey01,mhotkey02 integer 1 在程式建立的時候或者窗體顯示的時候註冊熱鍵 begin 原子 mhotkey01 mhotkey01 globaladdatom xiaoyin hotkey ctrl f1 c...