Enumerare le windows come fa alt-tab

Sto creando un sostituto di alt-tab per Vista ma ho qualche problema elencando tutti i programmi attivi.

Sto usando EnumWindows per ottenere un elenco di Windows, ma questa lista è enorme. Contiene circa 400 oggetti quando ho solo 10 windows aperte. Sembra essere un hwnd per ogni singolo controllo e molte altre cose.

Quindi devo filtrare questa lista in qualche modo, ma non riesco a farlo esattamente come fa alt-tab.

Questo è il codice che uso per filtrare la lista in questo momento. Funziona abbastanza bene, ma ottengo alcune windows indesiderate come Windows Tool-Tool in Visual Studio e mi mancano anche windows come iTunes e Warcraft3.

private bool ShouldWindowBeDisplayed(IntPtr window) { uint windowStyles = Win32.GetWindowLong(window, GWL.GWL_STYLE); if (((uint)WindowStyles.WS_VISIBLE & windowStyles) != (uint)WindowStyles.WS_VISIBLE || ((uint)WindowExStyles.WS_EX_APPWINDOW & windowStyles) != (uint)WindowExStyles.WS_EX_APPWINDOW) { return true; } return false; }