在實際工作中遇到這樣的問題:模塊注入到某目標進程獲取某個窗口標題的時候失敗。工具探測:spy++無法獲取窗口標題,其它工具(勇芳窗口管理器、自己寫的demo)卻可以獲取到。
一般來說,獲取窗口標題的方法有兩個:
1)GetWindowText(hWnd)
2)SendMessage(hWnd,WM_GETTEXT)
另外,根據http://blogs.msdn.com/b/oldnewthing/archive/2003/08/21/54675.aspx知道下面2點:
1)如果是獲取本進程窗口標題的話,GetWindowText是發送WM_GETTEXT消息來拿標題內容的,這和主動調用SendMessage發送WM_GETTEXT沒區別。
2)如果是獲取其它進程窗口標題的話,GetWindowText是直接從窗口內部相關的數據結構中拿到標題內容的,不發送WM_GETTEXT消息。
所以,當窗口標題只能從窗口內部相關的數據結構中拿到,而我們又是獲取本進程的窗口標題的時候,通過GetWindowText和SendMessage都是無法獲取的。這時候要使用一個新的API:InternalGetWindowText,it obtains the window text directly from the window structure associated with the specified window's handle and then always provides the text as a unicode string。(比較舊的sdk中是沒有的)。