應用程式敏感鍵的實現
<P>----在一個應用程式內部功能表、部件都可以設置敏感鍵。如在功能表中一般用alt+f進<BR>入“文件”之類的子功能表。另外我們在桌面上設置的快捷方式裏的快捷鍵,無論你任何<BR>時候按下你所設置的快捷鍵就會?動相應的應用程式。在多個正在運行的應用程式中如<BR>何利用一個按鍵動作迅速地回到你所需要的應用程式呢?這就需要利用敏感鍵<BR>(hotkey)的技術來實現。本文利用delphi3.0開發工具來闡述該技術在應用程式的實<BR>現方法。</P><P>一、敏感鍵的設置</P>
<P>----在windowsapi中有一個函數registerhotkey用於設置敏感鍵,它的調用方式如下:</P>
<P>boolregisterhotkey(<BR>hwndhwnd,回應該敏感鍵的窗口控制碼<BR>intid,該敏感鍵的唯一標示符<BR>uintfsmodifiers,該敏感鍵的輔助按鍵<BR>uintvk該敏感鍵的鍵值<BR>);<BR>----其中敏感鍵的唯一標示符在window中規定應用程式的取值範圍?0x0000到0xbfff之<BR>間,動態連結程式庫的取值範圍?0xc000到0xffff之間。?了保證其唯一性建議使用<BR>globaladdatom函數來設置敏感鍵的唯一標示符。需要注意的是globaladdatom還回的值<BR>是在0xc000到0xffff範圍之間,?滿足registerhotkey的調用要求,如果是在應用程式<BR>中設置敏感鍵可以利用globaladdatom還回值減去0xc000。<BR>----敏感鍵的輔助按鍵包括mod_ctrl、mod_alt、mod_shift,對於windows相容鍵盤還<BR>支援windows鍵,即其鍵面上有windows標誌的那個鍵,其值?mod_win。</P>
<P>----在delphi中建立一個“newapplication”,在tform1中的private段中加入如下<BR>代碼</P>
<P>private<BR>{privatedeclarations}<BR>hotkeyid:integer;<BR>procedurewmhotkeyhandle(varmsg:tmessage);<BR>messagewm_hotkey;回應敏感鍵按鍵消息<BR>在formcreate事件中加入如下代碼<BR>…<BR>hotkeyid:=globaladdatom(pchar<BR>(“userdefinehotkey”))-$c000;<BR>減去$c000是?了保證取值範圍的限制<BR>registerhotkey(handle,hotkeyid,<BR>mod_controlormod_altt,$41);<BR>敏感鍵?ctrl+alt+a<BR>…<BR>二、敏感鍵的回應<BR>----一旦敏感鍵設置成功,在程式應用過程中如果有相應敏感鍵被按下,windows系統都會給<BR>你的應用程式發送一個消息wm_hotkey,不管你的應用程式是否?當前活動的。其中wm_hotkey<BR>消息的格式?:</P>
<P>idhotkey=(int)wparam;<BR>該參數在設置系統級的敏感鍵有用,一般不予使用<BR>fumodifiers=(uint)loword(lparam);<BR>敏感鍵的輔助按鍵<BR>uvirtkey=(uint)hiword(lparam);<BR>敏感鍵的鍵值<BR>----因?windows系統只是把一個wm_hotkey的消息發送給應用程式,要完成具體的事情需要一<BR>個消息處理程式,也就是上面private段裏的<BR>procedurewmhotkeyhandle(varmsg:tmessage);messagewm_hotkey;過程,它的代碼<BR>如下(這裏只是簡單地把視窗最前面顯示)<BR>proceduretform1.wmhotkeyhandle<BR>(varmsg:tmessage);<BR>begin<BR>if(msg.lparamhi=$41)and<BR>(msg.lparamlo=mod_controlormod_alt)then<BR>begin<BR>msg.result:=1;該消息已經處理<BR>application.bringtofront;<BR>把視窗最前面顯示<BR>end;<BR>end;<BR>三、敏感鍵的釋放<BR>----在應用程式退出來之前應當把你所設置的敏感鍵釋放掉,以釋放其所佔有的系統資源,這裏<BR>需要調用兩個windowsapi函數unregisterhotkey,它的調用格式如下:</P>
<P>boolunregisterhotkey(<BR>hwndhwnd,與敏感鍵關聯的窗口控制碼<BR>intid敏感鍵的標示符<BR>);<BR>也就是說只要在formclose事件中加入如下代碼<BR>…<BR>unregisterhotkey(handle,hotkeyid);<BR>deleteatom(hotkeyid);<BR>…<BR>----到這裏?止,你應當對敏感鍵技術有了全面的瞭解,以上的例子相當簡單同時也沒有提供必<BR>要的調用成功檢測,可以根據具體情況加以完善,希望對你的開發過程會有所幫助.</P>
页:
[1]
