Board logo

Subject: [HELP]有沒有簡單的辦法監控窗口信息? [Print This Page]

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

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

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

怎么寫?我還想不到。。。
Author: Passion    Time: 2008-11-10 18:02

SetWindowHook系列API以及使用例子查查?
Author: jAmEs_    Time: 2008-11-10 18:10

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

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




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0