• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

关于替代窗口进程,截获窗口消息

laozhongcheng 2003-01-28 01:06:02
目前有两种方法
1.GetWindowLong and SetWindowLong
优点:不用修改Form的属性,可以使用Form.WindowProc := NewWindowProc
在此基础上再挂接新的窗口进程
缺点:好像只能截获Win32消息,无法截获VCL的消息

2.Form.WindowProc
优点:可截获VCL的消息
缺点:需要修改Form的属性,使用Form.WindowProc := NewWindowProc
将会使窗口进程替代无效

有什么方法可以解决吗?
...全文
50 点赞 收藏 11
写回复
11 条回复
stanely 2003年05月27日
只有重载能够解决的原因是:
vcl内部的所谓“消息”,根本就不是消息!

他通过perform分发的“消息”,这跟windows消息不是一个概念,它是通过tcontrol的dispatch找到相应的处理函数,根本不是twincontrol,没有句柄,怎么会有窗口呢?
没有窗口怎么向系统注册消息处理含数?

没有注册消息处理含数getwindowlong和setwindowlong怎么能够好使呢?

这是我的浅薄理解。
回复 点赞
laozhongcheng 2003年05月18日
给分了,只有WindowProc可以解决,其他的都没有办法。
回复 点赞
snake_eye 2003年02月02日
用他GetWindowLong and SetWindowLong
我写过一个form的进度条,就是主要用上面的二个api,不过参数的类型一定要注意。窗口过程我喜欢!
回复 点赞
johnmack 2003年01月30日
用钩子吧!
回复 点赞
RobertLee 2003年01月30日
第一位仁兄说得不错!
回复 点赞
laozhongcheng 2003年01月30日
的确无法截获VCL消息,在Borland新闻组上得到的结论。
某些消息是通过Broadcast传递的,这些没有办法获得。
所以应该钩子也不行。
回复 点赞
stanely 2003年01月30日
只要做一件事情可以解决你的两个问题:
重载Form.WindowProc
回复 点赞
cgh1970 2003年01月28日
up
回复 点赞
Randy_Mic 2003年01月28日
无法截获VCL消息?不会吧,VCL在Win32之上啊
回复 点赞
Billy_Chen28 2003年01月28日
用全局API HOOK
回复 点赞
bluemeteor 2003年01月28日
好像只能截获Win32消息,无法截获VCL的消息?????

可以截获的阿
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1478

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告