public override IEnumerable <Tuple <IntPtr, object> > AllForms(IntPtr display, Xwt.Backends.IWindowFrameBackend window) { var found = new List <IntPtr>(); Win32.EnumWindowsProc func = (hwnd, lparam) => { if ((Win32.GetWindowLongPtr(hwnd, -16) & 0x10000000L) != 0) // WS_STYLE&WS_VISIBLE { found.Add(hwnd); } return(true); }; Win32.EnumWindows(func, IntPtr.Zero); if (Xwt.Toolkit.CurrentEngine.Type == ToolkitType.Wpf) { return(found.Select(_h => { var obj = Win32.swi_hwndsource.InvokeStatic("FromHwnd", _h); obj = obj?.GetType().GetPropertyValue(obj, "RootVisual"); return new Tuple <IntPtr, object>(_h, obj ?? _h); })); } else if (Xwt.Toolkit.CurrentEngine.Type == ToolkitType.Gtk) { var d = CreateGtkLookup(); return(found.Select(_h => { d.TryGetValue(_h, out object obj); // var obj = Win32.swi_hwndsource.InvokeStatic("FromHwnd", _h); // obj = obj?.GetType().GetPropertyValue(obj, "RootVisual"); return new Tuple <IntPtr, object>(_h, obj ?? _h); })); } else { return(found.Select(_h => new Tuple <IntPtr, object>(_h, _h))); } }
public override IEnumerable <Tuple <IntPtr, object> > AllForms(IntPtr xdisp, Xwt.Backends.IWindowFrameBackend window) { var gtkkwin = window.Window; var gdkscr = gtkkwin.GetType().GetPropertyValue(gtkkwin, "Screen"); var rw = gdkscr.GetType().GetPropertyValue(gdkscr, "RootWindow"); var rwh = (IntPtr)rw.GetType().GetPropertyValue(rw, "Handle"); var rootWindow = getxid(rwh); try { var d = CreateGdkLookup(); return(_AllWindows(xdisp, rootWindow, d)); } finally { } }
public abstract IEnumerable <Tuple <IntPtr, object> > AllForms(IntPtr display, Xwt.Backends.IWindowFrameBackend window);