关于CBT钩子和Shell钩子的问题(20分)

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
我用这段代码来实现当某个窗口关闭时发送消息给我的主程序,可是根本就没用,而用CBT钩子HCBT_DESTROYWND时虽然可以收到消息,但是不知是不是此时窗体是否已经Destroy了,我的GetTitle过程的作用是保存窗体某个控件的Caption的标题到注册表中,可是此时注册表中没有得到正确数据:<br>function ShellProc(ncode,wparam,lparam:Integer):LRESULT;stdcall;<br>begin<br> &nbsp;if ncode=HSHELL_WINDOWDESTROYED then<br> &nbsp;begin<br> &nbsp; &nbsp;GetTitle;<br> &nbsp; &nbsp;SendMessage(FindWindow(nil,'form1'),My_Msg,120,0);<br> &nbsp;end;<br> &nbsp;Result:=CallNextHookEx(ShellHook,ncode,wparam,lparam);<br>end;
 
还有一个问题:Windows SDK中对HCBT_ACTIVATE的解释是这样的:the system is about to activate a window.<br>但我发现,如果一个窗口不是一个顶层窗口(用Spy++查看Parent Window值不为0),那么这个窗口Create时我的CBT钩子子程就会有反应(向我的主程序发消息),但如果这个窗口是一个Parent Window值为None的窗口则它Create时我的CBT钩子子程不会有任何反应,要先转移焦点到另外一个程序然后再用鼠标点一下这个窗口激活它钩子子程才会有反应。请问这是什么原因?
 
又是了一下用Shell钩子,当HSHELL_WINDOWDESTROYED 时来保存数据但是发现此时已经无法得到控件的句柄了,这是不是说明此时只有窗体还存在,而它上面的控件都已经没有了?如果是这样应该怎样才能实现我想要的功能呢?
 
&quot;当某个窗口关闭时发送消息给我的主程序&quot;,一般都是拦截窗体WM_CLOSE消息
 
接受答案了.
 
后退
顶部