Je crée un remplacement alt-tab pour Vista mais j'ai quelques problèmes énumérant tous les programmes actifs. J'utilise EnumWindows pour obtenir une liste de Windows, mais cette liste est énorme. Il contient environ 400 articles quand j'ai seulement 10 fenêtres ouvertes. Cela semble être un truc pour chaque contrôle et beaucoup d'autres choses.Enumerate windows comme alt-tab fait
Je dois donc filtrer cette liste, mais je n'arrive pas à la faire exactement comme le fait Alt Tab.
C'est le code que j'utilise pour filtrer la liste maintenant. Cela fonctionne plutôt bien, mais j'ai des fenêtres non désirées comme des fenêtres d'outils détachées dans Visual Studio et des fenêtres comme iTunes et Warcraft3 me manquent aussi.
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;
}
Notez que cette implémentation n'honore pas les styles étendus 'WS_EX_TOOLWINDOW' et' WS_EX_APPWINDOW' mentionnés dans l'article de Raymond. –
Voici un exemple plus complet et robuste basé sur cette méthode https://github.com/christianrondeau/GoToWindow/blob/e41b822e7254fdc40a40fbbeec251e6ffc1959f8/GoToWindow.Api/WindowsListFactory.cs#L45 Il s'agit d'un utilitaire alternatif alt-tab, qui semble montrer exactement ce que fait le menu alt-tab régulier. – blade