VC++/MFC 查找多个同类无标题子窗口

假设用Spy++查到一个程序标题为"XXX",下面有3个同类名的子窗口(类名假设都为"AAA"),并且都没有标题名称。如何获得第2个子窗口的句柄? hwnd=:... 假设 用Spy++查到一个程序标题为"XXX",下面有3个同类名的子窗口(类名假设都为"AAA"),并且都没有标题名称。 如何获得第2个子窗口的句柄? hwnd = ::FindWindow(NULL,"XXX");hwnd2=::FindWindowEx(hwnd,NULL,"AAA",NULL);自己试了下,连第1个子窗口都没找到,别说第2个子窗口了。。。 展开
 我来答
qiujiejia
2011-10-21 · TA获得超过500个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:250万
展开全部
参考以下:用HWND hChild = ::GetWindow(ParentWnd, GW_CHILD);

/****************************************************************************
寻找指定类名的子窗口句柄 方法一
****************************************************************************/
static
HWND FindWithClassName(HWND ParentWnd,const TCHAR* FindClassName)
{
HWND hChild = ::GetWindow(ParentWnd, GW_CHILD);

TCHAR ClassName[100];
for(; hChild!=NULL ; hChild=::GetWindow(hChild,GW_HWNDNEXT))
{
::GetClassName(hChild,ClassName,sizeof(ClassName)/sizeof(TCHAR));

if (_tcscmp(ClassName,FindClassName)==0)
return hChild;

HWND FindWnd=FindWithClassName(hChild,FindClassName);
if (FindWnd)
return FindWnd;
}
return NULL;
}

/****************************************************************************
获取主窗口下某个子窗口的窗口句柄
参数1:最顶层父窗口
参数2:控件ID,可使用spy++(VS2008版本) 查看
****************************************************************************/
static
HWND FindControlWnd(HWND ParentWnd,DWORD ControlID)
{
HWND hChild = ::GetWindow(ParentWnd, GW_CHILD);

for(; hChild!=NULL ; hChild=::GetWindow(hChild,GW_HWNDNEXT))
{
//判断是否为需要的控件
if ( GetDlgCtrlID(hChild) == ControlID )
return hChild;

HWND FindWnd=FindControlWnd(hChild,ControlID);
if (FindWnd)
return FindWnd;
}
return NULL;
}
ACracker
2011-10-22
知道答主
回答量:16
采纳率:0%
帮助的人:5.6万
展开全部
EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAMlParam );
//用这个可以枚举所有子窗体。下面这个是回调函数。

BOOL CALLBACK EnumFunc( HWND hwnd, LPARAM lParam )//参数hwnd就是枚举进来的子窗口句柄
{
char str[100];
GetWindowText(hwnd, str, 100);
AfxMessageBox(str);
return TRUE;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
耐心还委婉灬财宝2470
2011-10-22 · TA获得超过6.8万个赞
知道小有建树答主
回答量:2.4万
采纳率:0%
帮助的人:3187万
展开全部
EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAMlParam );

BOOL CALLBACK EnumFunc( HWND hwnd, LPARAM lParam )//参数hwnd就是枚举进来的子窗口句柄
{
char str[100];
GetWindowText(hwnd, str, 100);
AfxMessageBox(str);
return TRUE;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式