void C枚举窗口Dlg::OnBnClickedOk()
{
//GetDesktopWindow获取桌面的窗口句柄
//GW_CHILD 获取他的第一个子句柄
HWND h = ::GetWindow(::GetDesktopWindow(),GW_CHILD);//
while(h!=NULL){//NULL == 0,如果不等于NULL,就继续执行
char buff[250]= {0};//全部填充为0
::GetWindowTextA(h,(LPSTR)buff,sizeof(buff));
CString c;
c.Format("窗口句柄为%d,标题为%s\r\n",h,buff);
handles+=c;
h = ::GetWindow(h,GW_HWNDNEXT);//GW_HWNDNEXT 获取他的下一个,也就是邻居,就是他的下一个窗口的句柄
}
UpdateData(FALSE);//把变量更新到窗口上,TRUE的意思是把窗口的变量更新到变量上
}
void C枚举窗口Dlg::OnBnClickedCancel()
{
HWND h = ::FindWindow(NULL,NULL);//类名,标题名,为NULL意思为遍历所有的,他是针对桌面窗口查找的,返回值为第一个窗口的句柄
while(h!=NULL){
char buff[250]= {0};//全部填充为0
::GetWindowTextA(h,(LPSTR)buff,sizeof(buff));
CString c;
c.Format("窗口句柄为%d,标题为%s\r\n",h,buff);
handles+=c;
h = ::FindWindowEx(0,h,NULL,NULL);
//针对桌面窗口,查找h窗口句柄后面的一个子窗口,后面的NULL就不解释了
}
UpdateData(FALSE);//把变量更新到窗口上,TRUE的意思是把窗口的变量更新到变量上
}
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam){//#define CALLBACK __stdcall
CString* s = (CString*)lParam;//把指针引向给s
char buff[250]= {0};//全部填充为0
::GetWindowTextA(hwnd,(LPSTR)buff,sizeof(buff));//获取windows窗口标题
CString c;
c.Format("窗口句柄为%d,标题为%s\r\n",hwnd,buff);
*s+=c;//*s可以理解为变量吧
return TRUE;//如果返回FALSE的话,则回调函数会停止
}
void C枚举窗口Dlg::OnBnClickedButton1()//推荐使用这个,不推荐使用GetWindow
{
::EnumWindows(EnumWindowsProc,(LPARAM)&handles);//第一个参数为回调函数,他是针对顶级的窗口进行回调,后面的参数为传递给回调函数的值
UpdateData(FALSE);//把变量更新到窗口上,TRUE的意思是把窗口的变量更新到变量上
}