我经常想枚举一个父窗口的所有子窗口,网上搜索了很多都没有搞的太懂,经过多次实践,总算搞明白了,发一个最简单的实例,希望能给大家带来帮助
实例:枚举QQ登陆这个窗口所有的子窗口
#include <windows.h>
#include <stdio.h>
BOOL CALLBACK EnumChildProc(HWND,LPARAM);//回调函数原型
int num;
static HWND hwnd_find;//用于记录父窗口
int main()
{
hwnd_find=FindWindow(NULL,”QQ用户登录”);//寻找游戏窗口
if(!hwnd_find)
MessageBox(hwnd_find,”未发现QQ登陆窗口,请确认”,”Error”,MB_OK);//如果没有找到出现没有找到的提示信息
else
EnumChildWindows(hwnd_find,(WNDENUMPROC)EnumChildProc,(LPARAM)NULL);
//此处的上一句是重点 (WNDENUMPROC)EnumChildProc可以理解成是一个函数地址,只要还有子窗口
//它就会调用这个函数,也就是下面的回调函数
return 0;
}
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
if (hwnd) //如果子窗口存在
{
num++;//记录窗口数目的num自增
char chText[MAX_PATH];//用来储存窗口的Text
ZeroMemory(chText,MAX_PATH); // ZeroMemory宏用0来填充一块内存区域
GetWindowText(hwnd,chText,MAX_PATH);//获取窗口的标题
if(chText[0])//如果窗口标题非空的话
{
sprintf(chText,”找到标题为: %s 的窗口一个,共计%d个窗口”,chText,num);
//格式化chText
MessageBox(hwnd,chText,”找到子窗口”,MB_OK);//提示信息
}
else
{
sprintf(chText,”找到标题为空的窗口一个,共计%d个窗口”,num);
//格式化chText
MessageBox(hwnd,chText,”找到子窗口”,MB_OK);//提示信息
}
return TRUE;
}
return FALSE;
}