CnPack Forum » 技术板块灌水区 » [HELP]有沒有簡單的辦法監控窗口信息?


2008-11-10 16:06 jAmEs_
[HELP]有沒有簡單的辦法監控窗口信息?

比如我希望每個窗口關閉前,都執行某些代碼。
排除使用HOOK、繼承窗口、也不能代替事件觸發的方法等方法。因為程序已經開發好了,不想調整。
最好是Windows自己的機制,如在子窗口關閉前,能發送消息到主窗口?之類的。。。

2008-11-10 17:36 Passion
那就得你写个程序来设置消息钩子以避免修改原有程序?

2008-11-10 17:53 jAmEs_
怎么寫?我還想不到。。。

2008-11-10 18:02 Passion
SetWindowHook系列API以及使用例子查查?

2008-11-10 18:10 jAmEs_
暈,我剛才說了不用HOOK,以我自己的使用經驗,HOOK不太安全,很特別是全局HOOK,搞不好影響系統的穩定性。
另外,我HOOK過了,竟然不行,似乎跟代碼在BPL下有關係。。。但是具體還不知道。
如果用HOOK,我還不如直接設置WindowProc?因為都只是一個工程裡面。
其實還有RtlVclOptimize.pas這個在DelphiSpeedUp裡面的一個單元來處理,它可以替換函數,包括類的函數,算比較完美的做法,但是我還是擔心它的穩定性。

2008-11-11 21:49 jAmEs_
最终采用Hook实现了,开始我用WH_CBT来处理,存在问题。经过测试发现(自己推测,没有详细跟踪,因为在BCB下面,不方便调试Pas源码):
我在nCode=HCBT_CREATEWND时,通过Screen.Forms[x].Handle来检查创建的TForm,但是由于此时刚刚准备创建的TForm的Handle还没有产生,导致执行HandleNeeded,然后又触发nCode=HCBT_CREATEWND,然后又HandleNeeded。。。
后来改成监控其他nCode来实现。

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.