让一不可见窗体捕捉一键盘事件?(50分)

  • 主题发起人 主题发起人 freddyzhu
  • 开始时间 开始时间
F

freddyzhu

Unregistered / Unconfirmed
GUEST, unregistred user!
小生欲让一不可见窗体捕捉一键盘事件,如击键Ctrl+Enter让我的窗体隐藏/显示<br>(类似与万能五笔的隐藏/显示),遇到了难道,特请教各位。<br>有关书籍上解说delphi的消息机制时,都提到过delphi能拦截所有windows消息,但我<br>编了一拦截windows KeyDown消息的过程,但只能在本窗体被激活的情况下有效。<br>这使小生十分疑惑。<br>过程头如下,不知是否有错?<br>&nbsp; &nbsp; procedure mWMKEYDOWN(Var Msg: TWMKeyDown);message WM_KeyDown;<br><br>windows将某一特定消息Dispatch给每一窗体,当这消息未被别处理过时,我的窗体<br>应能捕捉到,但事实上却不然。why?<br><br>望不吝赐教。
 
使用APPLICATION的ONMESSAGE事件<br>type TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object;<br>property OnMessage: TMessageEvent;<br>具体见DELPHI的TAPPLICATION帮助
 
你需要注册全局热键<br>使用<br>RegisterHotKey<br>The RegisterHotKey function defines a system-wide hot key. <br><br>BOOL RegisterHotKey(<br>&nbsp; HWND hWnd, &nbsp; &nbsp; &nbsp; &nbsp; // handle to window<br>&nbsp; int id, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// hot key identifier<br>&nbsp; UINT fsModifiers, &nbsp;// key-modifier options<br>&nbsp; UINT vk &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// virtual-key code<br>);<br>API函数就可以了,在不使用热键时使用 UnregisterHotKey API来注销<br>关于函数的具体用法请参考MSDN<br>你自己再写热键消息 WM_HOTKEY 处理就可以了.<br>在很长时间以前,我用Delphi写过,不过不知道塞哪去了.<br><br>
 
建议看看680169上面有详细的讨论,也有源程序
 
接受答案了.
 

Similar threads

I
回复
0
查看
628
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
585
import
I
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部