在一個應用程序內部菜單、部件都可以設置敏感鍵。如在菜單中一般用Alt+F進
入“文件”之類的子菜單。另外我們在桌面上設置的快捷方式裡的快捷鍵,無論你任何
時候按下你所設置的快捷鍵就會啟動相應的應用程序。在多個正在運行的應用程序中如
何利用一個按鍵動作迅速地回到你所需要的應用程序呢?這就需要利用敏感鍵
(HOTKEY)的技術來實現。本文利用Delphi3.0開發工具來闡述該技術在應用程序的實
現方法。
一、敏感鍵的設置
----在WindowsApi中有一個函數RegisterHotKey用於設置敏感鍵,它的調用方式如下:
BOOLRegisterHotKey(
HWNDhWnd,響應該敏感鍵的窗口句柄
Intid,該敏感鍵的唯一標示符
UINTfsModifIErs,該敏感鍵的輔助按鍵
UINTvk該敏感鍵的鍵值
);
----其中敏感鍵的唯一標示符在Window中規定應用程序的取值范圍為0x0000到0xBFFF之
間,動態鏈接庫的取值范圍為0xC000到0xFFFF之間。為了保證其唯一性建議使用
GlobalAddAtom函數來設置敏感鍵的唯一標示符。需要注意的是GlobalAddAtom還回的值
是在0xC000到0xFFFF范圍之間,為滿足RegisterHotKey的調用要求,如果是在應用程序
中設置敏感鍵可以利用GlobalAddAtom還回值減去0xC000。
----敏感鍵的輔助按鍵包括Mod_Ctrl、Mod_Alt、Mod_Shift,對於Windows兼容鍵盤還
支持Windows鍵,即其鍵面上有Windows標志的那個鍵,其值為Mod_win。
----在Delphi中建立一個“NewApplication”,在Tform1中的Private段中加入如下
代碼
private
{Privatedeclarations}
hotkeyid:integer;
procedureWMhotkeyhandle(varmsg:Tmessage);
messagewm_hotkey;響應敏感鍵按鍵消息
在FormCreate事件中加入如下代碼
…
hotkeyid:=GlobalAddAtom(pchar
(“UserDefineHotKey”))-$C000;
減去$C000是為了保證取值范圍的限制
registerhotkey(handle,hotkeyid,
MOD_CONTROLormod_Altt,$41);
敏感鍵為ctrl+Alt+A
…
二、敏感鍵的響應
----一旦敏感鍵設置成功,在程序應用過程中如果有相應敏感鍵被按下,Windows系統都會給
你的應用程序發送一個消息WM_HOTKEY,不管你的應用程序是否為當前活動的。其中WM_HOTKEY
消息的格式為:
idHotKey=(int)wParam;
該參數在設置系統級的敏感鍵有用,一般不予使用
fuModifIErs=(UINT)LOWord(lParam);
敏感鍵的輔助按鍵
uVirtKey=(UINT)HIWord(lParam);
敏感鍵的鍵值
----因為Windows系統只是把一個WM_HotKey的消息發送給應用程序,要完成具體的事情需要一
個消息處理程序,也就是上面Private段裡的
procedureWMhotkeyhandle(varmsg:Tmessage);messagewm_hotkey;過程,它的代碼
如下(這裡只是簡單地把窗口最前面顯示)
procedureTForm1.Wmhotkeyhandle
(varmsg:Tmessage);
begin
if(msg.LParamHi=$41)and
(msg.lparamLo=MOD_CONTROLormod_Alt)then
begin
msg.Result:=1;該消息已經處理
application.BringToFront;
把窗口最前面顯示
end;
end;
三、敏感鍵的釋放
----在應用程序退出來之前應當把你所設置的敏感鍵釋放掉,以釋放其所占有的系統資源,這裡
需要調用兩個WindowsAPI函數UNREGISTERHOTKEY,它的調用格式如下:
BOOLUNREGISTERHOTKEY(
HWNDHWND,與敏感鍵關聯的窗口句柄
INTID敏感鍵的標示符
);
也就是說只要在FormClose事件中加入如下代碼
…
unregisterhotkey(handle,hotkeyid);
DeleteAtom(HotKeyID);
…
----到這裡為止,你應當對敏感鍵技術有了全面的了解,以上的例子相當簡單同時也沒有提供必
要的調用成功檢測,可以根據具體情況加以完善,希望對你的開發過程會有所幫助.