在實(shí)際工作中遇到這樣的問題:模塊注入到某目標(biāo)進(jìn)程獲取某個(gè)窗口標(biāo)題的時(shí)候失敗。工具探測(cè):spy++無法獲取窗口標(biāo)題,其它工具(勇芳窗口管理器、自己寫的demo)卻可以獲取到。
一般來說,獲取窗口標(biāo)題的方法有兩個(gè):
1)GetWindowText(hWnd)
2)SendMessage(hWnd,WM_GETTEXT)
另外,根據(jù)http://blogs.msdn.com/b/oldnewthing/archive/2003/08/21/54675.aspx知道下面2點(diǎn):
1)如果是獲取本進(jìn)程窗口標(biāo)題的話,GetWindowText是發(fā)送WM_GETTEXT消息來拿標(biāo)題內(nèi)容的,這和主動(dòng)調(diào)用SendMessage發(fā)送WM_GETTEXT沒區(qū)別。
2)如果是獲取其它進(jìn)程窗口標(biāo)題的話,GetWindowText是直接從窗口內(nèi)部相關(guān)的數(shù)據(jù)結(jié)構(gòu)中拿到標(biāo)題內(nèi)容的,不發(fā)送WM_GETTEXT消息。
所以,當(dāng)窗口標(biāo)題只能從窗口內(nèi)部相關(guān)的數(shù)據(jù)結(jié)構(gòu)中拿到,而我們又是獲取本進(jìn)程的窗口標(biāo)題的時(shí)候,通過GetWindowText和SendMessage都是無法獲取的。這時(shí)候要使用一個(gè)新的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中是沒有的)。