关于subclassing和hookmainwindow的问题(100分)

  • 主题发起人 主题发起人 tian
  • 开始时间 开始时间
T

tian

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi提供了几种截取消息的机制
其中subclassing是用一个窗口截取消息
处理后还可以把这个消息返回给原窗口

而hook是先于winproc截取消息
按返回值(boolean)决定winproc是否再处理本消息

但我编程都实现不了
即只能截取,但不能返回让再处理

请给个简单例子
 
使用Subclassing你需要在自已的窗口过程中调用CallWindowProc,以便在你对
自已感兴趣的消息进行处理后,原来的窗口过程还有机会对消息进行默认处理。
写个简单的框架

Var:
OldProc: Pointer;

function MyProc(hwnd: HWND;msg,wparam,lparam: LongInt): LongInt;stdcall
begin
if msg = .....then
begin
.......
end
Result :=CallWindowProc(hwnd,msg,wparam,lparam);
end;

procedure Form1.FormCreate(Sender: TObject);
begin
OldProc :=Pointer(SetWindowLong(Applicatino.Handle,GWL_WNDPROC,Integer(@myproc)))
end;

HookMainWindow我一直没太搞明白,我以前写过一个HookMainWindow的程序,但
只能捕获WM_ACTIVTEEAPP,WM_WM_WINDOWPOSCHANGED,WM_WINDOWPOSCHANGING等几
个有限的消息。帮助上说HookMainWindow是允许一个非Delphi的对话框截获应用
程序的消息,不明白,哪位大侠讲讲?
 
正如你所说
我的HookMainWindow就是只能扑获有限的几个消息。

根据某些文献
而对于subclassing,对你的程序中的
Result :=CallWindowProc(hwnd,msg,wparam,lparam);
hwnd参数用OldProc即可以实现消息的再处理
但我试过,好象不行。
请你写个能演示的程序,ok?

//thank
 
呵呵, 以前有许多hook的写法和例子, 自己查一下把:-)
 
用CallWindowProc是将消息传递给原来的窗口程,进行默认的消息处理,如果
你需要对某个感兴趣的消息进行额外处理,在你自已定义的窗口过程中进行即可。
至于HookMainWindow,从帮助上来看,并不同于一般的Hook程序,请各位大侠继
续指教。
 
Subclassing只能处理属于本进程的窗口,要是弄别的进程的窗口就出事了
 
多人接受答案了。
 

Similar threads

后退
顶部