1. 程式人生 > >用DELPHI如何註冊系統熱鍵

用DELPHI如何註冊系統熱鍵

Shift          016                Ctrl           017
Alt            018                Pause          019
Caps Lock      020                Esc            027
 空格鍵         032                Page Up        033
Page Down      034                End            035
Home           036                方向左         037
方向上         038                方向右         039
方向下         040                Insert         045
Delete         046                0 - 9          048 - 57
A - Z          065 - 090          數字鍵盤0-9    096 - 105
數字鍵盤*      106                數字鍵盤+      107
數字鍵盤-      109                數字鍵盤.      110
數字鍵盤/      111                F1 - F12       112 - 123
Num Lock       144                Soroll Lock    145
;              186                =              187
 ,              188                -              189
 .              190                /              191
~              192                [              219
 /              220                ]              221
'              222

上面 的程式碼註冊了一個熱鍵: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
end;
end;

  最後一步:


在視窗的close事件中加入

UnRegisterHotKey(handle, HotKeyId); //登出HotKey, 釋放資源。