Repository navigation
Dapplo.Windows 3.8.2
Found while replacing Greenshot's WindowDetails with IInteropWindow, InteropWindowQuery and WindowsEnumerator.
Changed
GetVisibleApplicationWindows,IsVisibleApplicationWindowandIsVisiblePopupnow include Chromium based browsers (Chrome, Edge, Brave and other windows which render with DirectComposition): windows withWS_EX_NOREDIRECTIONBITMAPwere rejected, so they were also missing fromGetLinkedWindows.GetVisibleApplicationWindows,IsVisibleApplicationWindowandIsVisiblePopupnow exclude cloaked windows (on another virtual desktop, suspended UWP apps): they useIsVisible()(IsWindowVisibleand not cloaked) instead of only theWS_VISIBLEstyle.IsVisibleApplicationWindowandIsVisiblePopupcheckIsVisible()right after the ignored classes, beforeGetInfo(): most top-level windows are invisible and are rejected without the DWM,IsZoomedandFindWindowExcalls.GetInfo()skips the DWM extended frame bounds and theIsApp()/IsMaximized()checks for child windows (WS_CHILD), DWM only answers for top-level windows; child windows are still clipped to their parents.IconExtensions.GetIconForWindowHandle(and soGetIcon) reads the class icon whenWM_GETICONreturns no icon, not only when the message fails: windows which never gotWM_SETICONgot the icon of the executable instead of their class icon. The order is unchanged, the preferred size first.
Added
includeMinimizedforIsVisibleApplicationWindowandGetVisibleApplicationWindows, e.g. for a "capture this window" menu which restores the window first. The overloads without it are kept for binary compatibility.GetChildren(forceUpdate, allLevels): withallLevelsthe whole tree below the window is filled from oneEnumChildWindows, withChildren(empty for leaf windows),ParentandParentWindowof every window, instead of one enumeration per level.FindChildAt(point): the deepest visible child window at a screen point, on the cached tree andGetInfo()values (works on a snapshot, e.g. under a full-screen overlay).