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