Estoy creando un reemplazo de alt-tab para Vista, pero tengo algunos problemas para enumerar todos los programas activos.Enumerar ventanas como alt-tab hace
Estoy usando EnumWindows para obtener una lista de Windows, pero esta lista es enorme. Contiene alrededor de 400 elementos cuando solo tengo 10 ventanas abiertas. Parece ser un hwnd para cada control y muchas otras cosas.
Así que tengo que filtrar esta lista de alguna manera, pero no puedo hacerlo exactamente como lo hace alt-tab.
Este es el código que uso para filtrar la lista en este momento. Funciona bastante bien, pero tengo algunas ventanas no deseadas, como ventanas de herramientas separadas en Visual Studio y también echo de menos ventanas como iTunes y 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;
}
Tenga en cuenta que esta implementación no respeta los estilos extendidos 'WS_EX_TOOLWINDOW' y' WS_EX_APPWINDOW' mencionados en la publicación de blog de Raymond. –
Aquí hay un ejemplo más completo y robusto basado en este método https://github.com/christianrondeau/GoToWindow/blob/e41b822e7254fdc40a40fbbeec251e6ffc1959f8/GoToWindow.Api/WindowsListFactory.cs#L45 Es de una utilidad alt-tab alternativa, que parece mostrar exactamente qué menú regular de alt-tab hace. – blade