(高级)使用EnumChildWindows碰到的怪事,在线等待。
hxx 2007-08-12 12:29:36 兄弟我在弄程序的过程中,碰到一件怪事。我用魔兽助手(魔兽世界WOW的一个外挂),我先做一个外挂,来控制它的一些功能,但是我很奇怪,居然无法枚举它的子窗体。
在魔兽助手5.13以前的版本中,我能能枚举到它的子窗体。但是到5.15开始,就根本无法枚举了。
这个玩意弄了很多恶心的伎俩,比如用AutoIt Window Info看到的窗体的类名会比用Spy4Win v0.20b查看到的类名要长几个字符。用Spy4Win自动生成的代码将无法获得目标控件的句柄(HWND类型的句柄)。只能用枚举来获得。但是它升级到5.15后,无法枚举了。用Spy4Win自动生成的代码如下:
const int MyMaxParentWinCount = 5;
// 父窗口类名数组
char *A_szClassName[MyMaxParentWinCount] =
{
"WindowsForms10.Window.8.app3",
"WindowsForms10.MDICLIENT.app3",
"WindowsForms10.Window.8.app3",
"WindowsForms10.Window.8.app3",
"WindowsForms10.COMBOBOX.app3"
};
// 父窗口标题数组
char *A_szWinName[MyMaxParentWinCount] =
{
"ZS.No.1",
"",
"frmTravel",
"",
""
};
// 先求顶级父窗口
HWND hLastWin = ::FindWindow(A_szClassName[0], A_szWinName[0]);
// 逐次用FindWindowEx求各级子窗口
for(int i=1; i<MyMaxParentWinCount-4; i++)
{
hLastWin = ::FindWindowEx(hLastWin, NULL,
A_szClassName[i], A_szWinName[i]);
}
但是很显然,无法获得其子控件句柄。用Spy++看,类名和关系都符合上述思想。我跟踪发现
if(!EnumChildWindows(hLastWin, EnumChildProc, 0))
根本没有调用EnumChildProc函数。
通过int nCode = GetLastError();获得错误代码为0。
不知道为什么,请大侠们指点一二。谢谢。