在一個應用程序內部菜單部件都可以設置敏感鍵如在菜單中一般用Alt+F進入文件之類的子菜單另外我們在桌面上設置的快捷方式裡的快捷鍵無論你任何時候按下你所設置的快捷鍵就會啟動相應的應用程序在多個正在運行的應用程序中如何利用一個按鍵動作迅速地回到你所需要的應用程序呢?這就需要利用敏感鍵(HOTKEY)的技術來實現本文利用Delphi開發工具來闡述該技術在應用程序的實
現方法
一敏感鍵的設置
在windowsApi中有一個函數RegisterHotKey用於設置敏感鍵它的調用方式如下
BOOLRegisterHotKey(
HWNDhWnd響應該敏感鍵的窗口句柄
Intid該敏感鍵的唯一標示符
UINTfsModifiers該敏感鍵的輔助按鍵
UINTvk該敏感鍵的鍵值
);
其中敏感鍵的唯一標示符在Window中規定應用程序的取值范圍為x到xBFFF之間動態鏈接庫的取值范圍為xC到xFFFF之間為了保證其唯一性建議使用GlobalAddAtom函數來設置敏感鍵的唯一標示符需要注意的是GlobalAddAtom還回的值是在xC到xFFFF范圍之間為滿足RegisterHotKey的調用要求如果是在應用程序中設置敏感鍵可以利用GlobalAddAtom還回值減去xC
敏感鍵的輔助按鍵包括Mod_CtrlMod_AltMod_Shift對於Windows兼容鍵盤還支持Windows鍵即其鍵面上有Windows標志的那個鍵其值為Mod_win
在Delphi中建立一個NewApplication在Tform中的Private段中加入如下代碼
private
{Privatedeclarations}
hotkeyid:integer;
procedureWMhotkeyhandle(varmsg:Tmessage);
messagewm_hotkey;響應敏感鍵按鍵消息
在FormCreate事件中加入如下代碼
…
hotkeyid:=GlobalAddAtom(pchar
(UserDefineHotKey))$C;
減去$C是為了保證取值范圍的限制
registerhotkey(handlehotkeyid
MOD_CONTROLormod_Altt$);
敏感鍵為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;過程它的代碼
應用程序敏感鍵的實現() 如下(這裡只是簡單地把窗口最前面顯示)
procedureTFormWmhotkeyhandle
(varmsg:Tmessage);
begin
if(msgLParamHi=$)and
(msglparamLo=MOD_CONTROLormod_Alt)then
begin
msgResult:=;該消息已經處理
applicationBringToFront;
把窗口最前面顯示
end;
end;
三敏感鍵的釋放
在應用程序退出來之前應當把你所設置的敏感鍵釋放掉以釋放其所占有的系統資源這裡需要調用兩個WindowsAPI函數UNREGISTERHOTKEY它的調用格式如下:
BOOLUNREGISTERHOTKEY(
HWNDHWND與敏感鍵關聯的窗口句柄
INTID敏感鍵的標示符
);
也就是說只要在FormClose事件中加入如下代碼
…
unregisterhotkey(handlehotkeyid);
DeleteAtom(HotKeyID);
…
到這裡為止你應當對敏感鍵技術有了全面的了解以上的例子相當簡單同時也沒有提供必要的調用成功檢測可以根據具體情況加以完善希望對你的開發過程會有所幫助
From:http://tw.wingwit.com/Article/program/Delphi/201311/24835.html