我的一个程序是获取另外一个程序的窗口句柄,我想请教一个问题就是:
如何只通过父窗口A句柄获取弹出窗口B的的句柄,窗口B可能是模态的也有可能是非模态的。
通过SPY++可以看到该弹出的窗口B的父句柄就是指向窗口A的。
我通过FindwindowEx用hwndChildAfter这个参数进行了遍历,无法遍历到弹出的窗口B,但是该窗口A下的子窗口都可以遍历出来,只要不是弹出的窗口。
然后我又用EnumChildWindows进行了一次遍历,发现还是没有遍历到窗口B。我不想使用如下办法:遍历桌面窗口下的所有子窗口然后再去比对他们的父窗口是否是A窗口
所以请教各位大侠,有没有好的快速的有效的解决办法,小弟我没招了
如何只通过父窗口A句柄获取弹出窗口B的的句柄,窗口B可能是模态的也有可能是非模态的。
通过SPY++可以看到该弹出的窗口B的父句柄就是指向窗口A的。
我通过FindwindowEx用hwndChildAfter这个参数进行了遍历,无法遍历到弹出的窗口B,但是该窗口A下的子窗口都可以遍历出来,只要不是弹出的窗口。
然后我又用EnumChildWindows进行了一次遍历,发现还是没有遍历到窗口B。我不想使用如下办法:遍历桌面窗口下的所有子窗口然后再去比对他们的父窗口是否是A窗口
所以请教各位大侠,有没有好的快速的有效的解决办法,小弟我没招了
不同程序,先把要接收消息的窗口句柄保留待用,创建子框时发消息
FindWindowEx(hParent, NULL, _T("class"), _T("title"));仔细 类名和窗口标题。
这种方法是不行的,因为有时候可能没有父窗口,即父窗口=NULL(桌面)。
HWND hWnd = CreateWindowEx(0, _T("MyClass"), _T("MyPopupWindow"), WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL/*parent*/, NULL, NULL, NULL);
这是可以的。
这样应该是可行的,楼主Checked一下你使用FindWindowEx中的参数问题.
因为如果比较父窗口使用的时间可能就比较长,这个不符合我的要求。。如果能用父窗口比较我就不上CSDN问了不过还是要谢谢你的回答