(高级)使用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。

不知道为什么,请大侠们指点一二。谢谢。
...全文
369 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxx 2007-08-21
  • 打赏
  • 举报
回复
to dyw(道不同不相为谋):
代码帖错了。是 for(int i=1; i<MyMaxParentWinCount; i++)

spy++能看到一定的信息,但是读出来的类名是有错误的。(实际上不是这样的)。Spy++能做的事情,我全都能做。

我另外通过别的方法能取到一些类名,(和Spy++得到的不同),能够完成一定的任务。
xiaoQ008 2007-08-21
  • 打赏
  • 举报
回复
关注
dyw 2007-08-21
  • 打赏
  • 举报
回复
for(int i=1; i<MyMaxParentWinCount-4; i++)
-------------
这个循环只循环一次,应该-1?
emptyness 2007-08-21
  • 打赏
  • 举报
回复
spy++能看见吗?
那就fang照spy++的原理咯...

如果spy++都看不见....真的要问一句 它有窗口么?
WuChenCan 2007-08-21
  • 打赏
  • 举报
回复
关注啊,我也碰到这种情况!!
真郁闷。
emptyness 2007-08-12
  • 打赏
  • 举报
回复
....
呵呵....
up..
hxx 2007-08-12
  • 打赏
  • 举报
回复
在线等待。。。
蒋晟 2007-08-12
  • 打赏
  • 举报
回复
你确定人家有用窗口?
hxx 2007-08-12
  • 打赏
  • 举报
回复
当然是用窗口。。。绝对没问题。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧