我正在尝试解决一个问题,以显示当前打开的所有窗口的名称。
我正在使用 vc++(基于对话框的应用程序)。
尝试使用此GetWindow
API 遍历显示的窗口句柄。使用GetWindowText
API 获取标题标题(如果有的话)。
HWND wnd = ::GetWindow( this->GetSafeHWND(), GW_HWNDFIRST );
if( !wnd )
{
return;
}
CString csWindows = "";
do
{
CString csText;
::GetWindowText( wnd, csText.GetBuffer(MAX_PATH), MAX_PATH );
csText.ReleaseBuffer();
if( !csText.IsEmpty())
{
csWindows += csText + "\n";
}
}while( wnd = ::GetWindow( wnd, GW_HWNDNEXT ));
AfxMessageBox( csWindows );
上面的代码应该可以工作。如果您只想要可见的窗口,请使用::IsWindowVisible
API 进行检查。
更新:
调用 GetWindow 来执行此任务的应用程序可能会陷入无限循环或引用已销毁窗口的句柄。将 EnumWindows 用于顶级窗口,将 EnumChildWindows 用于子窗口,或将 EnumThreadWindows 用于与线程关联的所有非子窗口是首选方法。
引用自Microsoft 支持