EnumWindows
函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或回调函数返回FALSE为止函数原型:
BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
参数:
lpEnumFunc:指向一个应用程序定义的回调函数指针,请参看EnumWindowsProc。
lPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:EnumWindows函数不列举子窗口。
在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
代码VC++ MFC(列举所有桌面窗口,窗口标题放在全局变量string buf[]数组中,n是静态变量):
BOOL CALLBACK lpEnumFunc(HWND hwnd, LPARAM lParam)
{
char str[100];
::GetWindowText(hwnd,str,sizeof(str));
buf[n++]=str;
return 1;
}
void CEnumWindowsDlg::OnOK()
{
// TODO: Add extra validation here
n=0;
EnumWindows(lpEnumFunc,NULL);
int i;
for(i=0;i<n;i++)
{
if(buf!="")
m_list.AddString(buf.c_str());
}
//CDialog::OnOK();
}