在实际工作中遇到这样的问题:模块注入到某目标进程获取某个窗口标题的时候失败。工具探测: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中是没有的)。