delphi熱鍵設定的方法

2021-06-03 08:17:03 字數 2039 閱讀 8089

問題是你要全域性的.還是要系統級的,還是要區域性的。

如果是全域性和區域性的,那麼在主窗體上(或其他控制項上)(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...