Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to : Given HWND, discover if window is Modal or not
    text
    copied!<p>For any given window I handle, I need a way to find out whether or not the given window is Modal.</p> <p>Far as I can tell, there are no methods that do exactly that, which is why I need some clever workaround to work this out!</p> <p>Help is appreciated!</p> <p>EDIT : Why is my GetWindow(,GW_OWNER) failing? :(</p> <pre><code> [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] internal static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd); [DllImport("user32.dll", ExactSpelling = true)] internal static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestor_Flags gaFlags); [DllImport("user32.dll", SetLastError = false)] internal static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll", SetLastError = true)] internal static extern int GetWindowLong(IntPtr hWnd, int nIndex); const UInt32 WS_DISABLED = 0x8000000; internal enum GetAncestor_Flags { GetParent = 1, GetRoot = 2, GetRootOwner = 3 } internal enum GetWindow_Cmd : uint { GW_HWNDFIRST = 0, GW_HWNDLAST = 1, GW_HWNDNEXT = 2, GW_HWNDPREV = 3, GW_OWNER = 4, GW_CHILD = 5, GW_ENABLEDPOPUP = 6 } IntPtr _inspHwnd = FindWindow("rctrl_renwnd32", inspector.Caption); // searching for a window with this name if (_inspHwnd.ToInt32() != 0) // found window with this name { IntPtr _ownerHwnd = GetWindow(_inspHwnd, GetWindow_Cmd.GW_OWNER); if (_ownerHwnd.ToInt32() != 0) { IntPtr _ancestorHwnd = GetAncestor(_ownerHwnd, GetAncestor_Flags.GetParent); if (_ancestorHwnd == GetDesktopWindow()) { if (GetWindowLong(_ancestorHwnd, -16) == WS_DISABLED) { // inspector is probably modal if you got all the way here MessageBox.Show("modal flag tripped"); } } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload