Tworzę zastępczy alt-tab dla Vista, ale mam problemy z listą wszystkich aktywnych programów.Wyliczanie okien, takich jak alt-tab ma
Używam EnumWindows, aby uzyskać listę systemów Windows, ale ta lista jest ogromna. Zawiera około 400 pozycji, gdy mam tylko 10 otwartych okien. Wygląda na to, że jest to hwnd dla każdej kontroli i wielu innych rzeczy.
Muszę więc jakoś filtrować tę listę, ale nie mogę tego zrobić dokładnie tak, jak robi to karta alt.
To jest kod, którego używam do filtrowania listy już teraz. Działa całkiem nieźle, ale dostaję niechciane okna, takie jak odłączone okna narzędzi w Visual Studio, a także brakuje mi okien takich jak iTunes i 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;
}
Zauważ, że ta realizacja nie czci '' WS_EX_APPWINDOW' WS_EX_TOOLWINDOW' i rozszerzony style mowa w Raymonda blogu. –
Oto bardziej kompletny i solidny przykład oparty na tej metodzie https://github.com/christianrondeau/GoToWindow/blob/e41b822e7254fdc40a40fbbeec251e6ffc1959f8/GoToWindow.Api/WindowsListFactory.cs#L45 Jest z alternatywnego narzędzia alt-tab, które wydaje się pokazywać dokładnie to, co robi regularne menu z kartami alt. – blade