現在開いているすべてのウィンドウの名前を表示するという問題を解決しようとしています。
私は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サポートからの引用