private static bool Filter(int hwnd, int lparam, out ApplicationWindow window) { window = null; var iHwnd = new IntPtr(hwnd); var title = new StringBuilder(256); User32.GetWindowText(hwnd, title, 256); var t = title.ToString(); //Skip if the window does not have a caption. if (t.Length == 0) { return(true); } //Skip if parent is not the desktop. var parentHwnd = User32.GetParent(iHwnd); if (!parentHwnd.Equals(new IntPtr(0))) { return(true); } if (!User32.KeepWindowHandleInAltTabList(iHwnd)) { return(true); } //Skip if the window is not visible but not minimized and has SW_HIDE (0) style. var placement = new WINDOWPLACEMENT(); User32.GetWindowPlacement(iHwnd, ref placement); if (!User32.IsWindowVisible(hwnd) && !User32.IsIconic(iHwnd) && placement.flags == 0) { return(true); } var info = new WINDOWINFO(); info.cbSize = (uint)Marshal.SizeOf(info); User32.GetWindowInfo(iHwnd, ref info); //skip window if it's really small (usually an indicator it's not a alt tab candidate window. if (info.rcWindow.Width <= 10 && info.rcWindow.Height <= 10) { return(true); } window = ApplicationWindows.GetApplicationWindow(hwnd, lparam); return(true); }
public static ApplicationWindow FindWindowByCaption(string caption) { ApplicationWindow window = null; var ewp = new User32.EnumWindowsProc((hwnd, lparam) => { var w = ApplicationWindows.GetApplicationWindow(hwnd, lparam); if (w != null && w.Title.Equals(caption, StringComparison.InvariantCulture)) { window = w; } return(window == null); //continue as long as window == null; }); User32.EnumWindows(ewp, 0); return(window); }
private static IEnumerable <ApplicationWindow> FindAltTabableWindows() { var windows = new List <ApplicationWindow>(); var ewp = new User32.EnumWindowsProc((hwnd, lparam) => { ApplicationWindow window = null; var shouldContinue = ApplicationWindows.Filter(hwnd, lparam, out window); if (window != null) { windows.Add(window); } return(shouldContinue); }); User32.EnumWindows(ewp, 0); return(windows.DistinctBy(w => w.hWnd)); }