Alt+Tabに列挙されるウインドウの基準

検索しても中途半端なものしか見つかりません。自分であれこれ試行錯誤した結果、簡潔にまとまったので、公開しておきます。Windows XPで確認してます。Windowsのバージョンによって違うということは無いと信じたいところです。

基本の3条件

ウインドウが下記3つのうちのひとつでも満たす場合は列挙されません。

  • 無効(!IsWindowEnabled)
  • 非表示(!IsWindowVisible)
  • ツールウインドウ(WS_EX_TOOLWINDOW)

主従関係

そして、下記3つのうちのひとつでも満たす場合に列挙されます。

  • ラストアクティブウインドウ(GetLastActivePopup(GetWindow(hWnd GW_OWNER)||hWnd)である
  • ownedであり、ラストアクティブウインドウが無効である
  • ownerであり、ラストアクティブウインドウが有効かつ、非表示かツールウインドウである

ラストアクティブウインドウが非表示な場合にどうするか、というのが混乱の元のようです。最後の条件が蛇足に感じますが、アクティブなポップアップが無効のオーナーウインドウはとにかく表示しない、ということのようです。

ラストアクティブウインドウの状態の変化はWinCheatを使って確認しました。