線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2361
推到 Plurk!
推到 Facebook!

熱鍵的註冊與攔截無法發生作用

缺席
pcernet
初階會員


發表:68
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-03 09:52:13 IP:61.218.xxx.xxx 訂閱
各位先進,下面這一段熱鍵的設定與攔截程序,小弟研究了幾天,也認真的扒了不少文章,還是找不出問題, 完全沒有作用,不知您是否能看出問題所在,謝謝! <textarea class="delphi" rows="10" cols="60" name="code">unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } MyCoCoHotkeyid1, MyCoCoHotkeyid2, MyCoCoHotkeyid3, MyCoCoHotkeyid4:integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; // procedure HotKeyDown(var Msg:Tmessage);message WM_HOTKEY; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = MyCoCoHotkeyid1 then ShowMessage('Ctrl F10 pressed !'); if Msg.HotKey = MyCoCoHotkeyid2 then ShowMessage('Ctrl Alt R pressed !'); if Msg.HotKey = MyCoCoHotkeyid3 then ShowMessage('Win F4 pressed !'); if Msg.HotKey = MyCoCoHotkeyid4 then ShowMessage('Print Screen pressed !'); end; //procedure TForm1.HotKeyDown(var Msg: Tmessage); //begin //if (Msg.LparamLo=MOD_CONTROL) AND (Msg.LParamHi=VK_F10) then showmessage('Ctrl-F10!'); //if (Msg.LParamLo=MOD_CONTROL MOD_Alt) and (Msg.LParamHi=Ord('R')) then ShowMessage('Ctrl-Alt-R') //end; procedure TForm1.FormCreate(Sender: TObject); begin // Register Hotkey Ctrl F10 MyCoCoHotkeyid1 := GlobalAddAtom('MyCoCoHotkey1')- $C000; RegisterHotKey(Handle, MyCoCoHotkeyid1, MOD_CONTROL, VK_F10); // Register Hotkey Ctrl Alt R MyCoCoHotkeyid2 := GlobalAddAtom('MyCoCoHotkey2')- $C000; RegisterHotKey(Handle, MyCoCoHotkeyid2,MOD_CONTROL MOD_Alt, Ord('R')); // Register Hotkey Win F4 MyCoCoHotkeyid3 := GlobalAddAtom('MyCoCoHotkey3')- $C000; RegisterHotKey(Handle, MyCoCoHotkeyid3, MOD_WIN, VK_F4); // Globally trap the Windows system key "PrintScreen" MyCoCoHotkeyid4 := GlobalAddAtom('MyCoCoHotkey4')- $C000; RegisterHotKey(Handle, MyCoCoHotkeyid4, 0, VK_SNAPSHOT); end; // Unregister the Hotkeys procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Handle, MyCoCoHotkeyid1); GlobalDeleteAtom(MyCoCoHotkeyid1); UnRegisterHotKey(Handle, MyCoCoHotkeyid2); GlobalDeleteAtom(MyCoCoHotkeyid2); UnRegisterHotKey(Handle, MyCoCoHotkeyid3); GlobalDeleteAtom(MyCoCoHotkeyid3); UnRegisterHotKey(Handle, MyCoCoHotkeyid4); GlobalDeleteAtom(MyCoCoHotkeyid4); end; end.</textarea>
wameng
版主


發表:31
回覆:1336
積分:1183
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-03 11:02:19 IP:61.222.xxx.xxx 訂閱
我試是沒問題,但程式有問題。
GlobalAddAtom('MyCoCoHotkey1')- $C000;

減去 - $ C000 是沒意義的。然而要不在 GlobalDeleteAtom 在加回去
否則 這個 GlobalAtom 是不會被刪除的。

參考
pcernet
初階會員


發表:68
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-03 11:34:15 IP:61.218.xxx.xxx 訂閱
謝謝版主的熱心,我用的是D7,XP的環境,怎麼試都沒有作用!
至於要減去$C000
聽說是為了確保值是在0x0000~0xBFFF之間,是否有意義,我也不知道。
但釋放的時候是指定ID,應該無關乎內含的值吧?
感謝您。

歡迎有遇到同樣問題的同好集思廣益,
也請先進不吝指教!
系統時間:2017-12-13 13:35:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!