delphi 設定系統級的組合鍵

2021-05-27 22:08:03 字數 2640 閱讀 6084

1.全域性或者區域性的組合快捷鍵

如果是全域性和區域性的,那麼用主窗體上(或其他控制項上)(form)的keypress等屬性進行監控。

2. 如果是系統級的,那麼需要api了.

1>bool registerhotkey(hwnd hwnd, int id, uint fsmodifiers, uint vk  );

hwnd   //響應該熱鍵的視窗控制代碼

int       //該熱鍵的唯一標識

uint    //該熱鍵的輔助按鍵

uint     //該熱鍵的鍵值

熱鍵的輔助按鍵包括mod_ctrl 、mod_alt、mod_shift,對於windows相容鍵盤還支

持windows鍵,即其鍵面上有windows標誌的那個鍵,其值為mod_win。

2>為了得到唯一標識,我們還將用到另乙個api函式

atom globaladdatom( lpctstr lpstring);

lpctstr lpstring //自己設定的乙個字串

3>.登出熱鍵, 釋放資源。

unregisterhotkey(hwnd hwnd, int id); //登出hotkey, 釋放資源。

3.系統級快捷鍵設定的步驟:

1>.設定全域性變數:

因為我們還要在程式退出的時候,消除這個熱鍵, 所以需要宣告乙個全域性變數:

hotkeyid: integer;

2>. 在視窗的create事件中,加入以下**

hotkeyid := globaladdatom('myhotkey') - $c000;

注意: hotkeyid的合法取之範圍是0x0000到0xbfff之間, globaladdatom函式得到的值在

0xc000到0xffff之間,所以減掉0xc000來滿足呼叫要求。

registerhotkey(handle, hotkeyid, mod_alt, vk_f8); //註冊了乙個熱鍵:alt+f8。

注:handle是乙個特殊的變數,它表示當前視窗的控制代碼。只用f8, 就這麼寫:

registerhotkey(handle, hotkeyid, 0, vk_f8);

windows傳送訊息的原理:

一旦熱鍵設定成功,在程式應用過程中如果有相應的鍵被按下,windows系統都會給你的應用

程式傳送乙個訊息wm_hotkey,不管你的應用程式是否為當前活動的。其中

wm_hotkey訊息的格式為: 

idhotkey = (int) wparam; // 該引數在設定系統級的熱鍵有用,一般不予使用

fumodifiers = (uint) loword(lparam);  //熱鍵的輔助按鍵

uvirtkey = (uint) hiword(lparam); //熱鍵的鍵值

3>.響應**

宣告函式: 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;

4>.在視窗的close事件中加入

unregisterhotkey(handle, hotkeyid); //登出hotkey, 釋放資源。

4.相應的**

private:

procedure hotkeydown(var msg: tmessage); message wm_hotkey;

varhotkeyid: integer;

procedure tmainform.btn1click(sender: tobject);

begin

hotkeyid := globaladdatom('myhotkey') - $c000;

registerhotkey(handle, hotkeyid, 0, vk_f8);

end;

procedure tmainform.btn2click(sender: tobject);

begin

unregisterhotkey(handle, hotkeyid); //登出hotkey, 釋放資源。

end;

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;

delphi 怎樣設定組合鍵

delphi 怎樣設定組合鍵 2010 04 16 21 32 問題是你要全域性的.還是要系統級的,還是要區域性的。如果是全域性和區域性的,那麼在主窗體上 或其他控制項上 form 的keypress等屬性上監控就行了.如果是系統級的,那麼需要api了.簡單 用到3個api函式 bool regis...

delphi 怎樣設定組合鍵

delphi 怎樣設定組合鍵 2010 04 16 21 32 問題是你要全域性的.還是要系統級的,還是要區域性的。如果是全域性和區域性的,那麼在主窗體上 或其他控制項上 form 的keypress等屬性上監控就行了.如果是系統級的,那麼需要api了.簡單 用到3個api函式 bool regis...

qt設定組合鍵

ctrl enter傳送資訊的實現 在現在的即時聊天程式中,一般都設定有快捷鍵來實現一些常用的功能,類似qq可以用ctrl enter來實現資訊的傳送。在qt4中,所有的事件都繼承與qevent這個類,以下是用qevent來實現快捷鍵的功能。首先所有qt類的基類qobject有乙個成員函式insta...