BOOL CALLBACK EnumWindowFunc(HWND hwnd, LPARAM lParam)
{
if (::GetWindowLong(hwnd, GWL_STYLE) & WS_VISIBLE)
{
//可见
if (::IsIconic(hwnd))
{
//过滤掉最小化
return 1;
}
//获得窗口标题
CString strWindowName = _T("");
::GetWindowText(hwnd, strWindowName.GetBuffer(256), 256);
//获取窗口类名
CString strWndClassName = _T("");
::GetClassName(hwnd, strWndClassName.GetBuffer(256), 256);
if ((strWindowName.IsEmpty() && _tcscmp(strWndClassName, _T("WorkerW")) == 0)
|| (_tcscmp(strWindowName, _T("Program Manager")) == 0 && _tcscmp(strWndClassName, _T("Progman")) == 0)
)
{
//过滤掉桌面
return 1;
}
//获取桌面任务栏以上的整个屏幕大小
CRect rc;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, sizeof(rc));
CRect rc_wnd;
::GetWindowRect(hwnd, &rc_wnd);
if (rc_wnd.Width() >= rc.Width() && rc_wnd.Height() >= rc.Height())
{
//比桌面工作区大的窗口
*(BOOL *)lParam = TRUE;
return 0;
}
}
return 1;
}
调用
BOOL bFullScreenWnd = FALSE;
::EnumWindows(EnumWindowFunc, (LPARAM)(&bFullScreenWnd));