vc-api-枚举所有子窗口实例

我经常想枚举一个父窗口的所有子窗口,网上搜索了很多都没有搞的太懂,经过多次实践,总算搞明白了,发一个最简单的实例,希望能给大家带来帮助

实例:枚举QQ登陆这个窗口所有的子窗口

#include 
#include 
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;
}

转载于:https://www.cnblogs.com/rogee/archive/2011/02/15/1954938.html

你可能感兴趣的:(vc-api-枚举所有子窗口实例)