| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1357 人关注过本帖
标题:應用程式敏感鍵的實現
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
结帖率:92.86%
收藏
 问题点数:0 回复次数:0 
應用程式敏感鍵的實現

----在一個應用程式內部功能表、部件都可以設置敏感鍵。如在功能表中一般用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);

----到這裏?止,你應當對敏感鍵技術有了全面的瞭解,以上的例子相當簡單同時也沒有提供必
要的調用成功檢測,可以根據具體情況加以完善,希望對你的開發過程會有所幫助.

搜索更多相关主题的帖子: 程式 敏感 
2006-03-27 12:52
快速回复:應用程式敏感鍵的實現
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024322 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved