我有一個類X從CWnd繼承和我想勾X來自外部的應用領域,即程序的有監視程序B. X對象實例創建有沒有辦法做到這個?鉤住MFC對象創建全球
0
A
回答
1
不能監視X的對象(X構造函數
X::X()
)的創建。你也不能監控到
X::Create
電話。但有可能是你的解決方案:
由於X::Create
電話CWnd::Create
,這將創建一個窗口,你可以連接到窗口創建,並創建一個X的窗口時,可能能夠檢測。但是,如果對創建窗口有一些特殊的看法,就像用於創建它們的已知窗口類一樣,只有這樣才能認識到這一點。如果是這樣的話,那麼:
你已經得到了你的前面的問題Hooking window creation in an MFC program正確的答案。
您可以使用SetWindowsHookEx(WH_CBT,lpfn,hMod,dwThreadId)在創建窗口時收到通知。
有些事情要記住:
- 鉤子函數必須駐留在一個DLL,而不是在調用
SetWindowsHookEx
的過程。這是因爲Windows會將DLL加載/注入到它監視窗口創建的每個進程中。 - 如果你想監視32位進程,你需要一個32位進程和DLL。
- 如果要監視64位進程,則需要64位進程和DLL。
- 如果你想監視32位和64位進程,你需要一個32位和64位進程和DLL。
- 你的過程必須是一個Windows應用程序,而不是一個控制檯應用程序,它必須保持抽水消息。
- 如果您知道線程ID,則可以將其傳遞給SetWindowsHookEx。如果不是,您可以傳遞0,並且您將在同一臺桌面上獲得所有窗口的通知。
- 請謹慎處理您在掛鉤功能中所做的事情,不要忘記撥打
CallNextHookEx
。 - 您將得到通知在不同的窗口不同的事件,你將不得不過濾掉NCODE ==
HCBT_CREATEWND
和窗口類(或其他),你是感興趣的
相關問題
- 1. 如何掛鉤MFC CWnd創建
- 2. 全球Java對象
- 3. 創建全球NSOperationQueue
- 4. 使JavaScript對象全球對
- 5. 在全球範圍內創建一個javascript對象
- 6. 創建一個全球可用的Javascript對象
- 7. 創建全局API對象
- 8. 創建全局對象?
- 9. Javascript外部對象全球?
- 10. 骨幹對象全球
- 11. 創建「全球方法」
- 12. 創建全球會話
- 13. 創建C(MFC)
- 14. 對象不能在全球範圍內創建,但可以在本地蟒蛇
- 15. 在Sinatra中全局創建對象
- 16. 創建新的jQuery全局對象
- 17. 在AngularJS中創建全局對象
- 18. 奇怪,IEnumerable.ToList()創建全新的對象
- 19. 創建全局列表對象Java
- 20. 創建Rails中全局對象自動
- 21. 全局創建對象實例
- 22. 如何創建全局參數對象
- 23. 跨類創建全局對象
- 24. Rails - 如何創建全局對象
- 25. Java:創建全局圖形對象
- 26. 使創建的對象全局[C++]
- 27. 在PHP中創建全局對象
- 28. 如何使JavaScript對象acessible全球
- 29. PHP化妝對象爲全球AJAX
- 30. 對象綁定到全球範圍內
什麼是X創建方法? ctor X:X?或者窗口相關的OnCreate()?爲什麼不使用/重載這兩個函數?或者你想達到什麼目的?您是否知道當子類化到位時,您的類X將不會看到控件的創建,而只會附加到已創建的控件上? –
我的意思是X創建方法是X :: Create procedure。我必須全局掛鉤到X類實例化。 – Katie
你提的問題是非常不具體,我沒有看到你前面的問題http://stackoverflow.com/questions/17653061/hooking-window-creation-in-an-mfc-program的差異。 –