透过句柄获取其它程序窗体的Windowstate

通过句柄获取其它程序窗体的Windowstate
找了好久,没找到如何通过句柄获取其它程序窗体的Windowstate,如MINIMIZED ,MAXIMIZED,NORMAL
最好不要通过窗体大小判断
------解决思路----------------------

GetWindowLong(hWnd,GWL_STYLE) & WS_MINIMIZE == WS_MINIMIZE 就是 最小化的 同理 最大化 一样 两个都没有的就 正常的

------解决思路----------------------
在它的WindowStyles里面


[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);  

[DllImport("user32.dll")]
public static extern long GetWindowLong(IntPtr hWnd, int nIndex);

public enum WindowStyles : long
        {
            WS_BORDER = 0x00800000,

            WS_CAPTION = 0x00C00000,

            WS_CHILD = 0x40000000,

            WS_CHILDWINDOW = 0x40000000,

            WS_CLIPCHILDREN = 0x02000000,

            WS_CLIPSIBLINGS = 0x04000000,

            WS_DISABLED = 0x08000000,

            WS_DLGFRAME = 0x00400000,

            WS_GROUP = 0x00020000,

            WS_HSCROLL = 0x00100000,

            WS_ICONIC = 0x20000000,

            WS_MAXIMIZE = 0x01000000,

            WS_MAXIMIZEBOX = 0x00010000,

            WS_MINIMIZE = 0x20000000,

            WS_MINIMIZEBOX = 0x00020000,

            WS_OVERLAPPED = 0x00000000,

            WS_OVERLAPPEDWINDOW = WS_OVERLAPPED 
------解决思路----------------------
 WS_CAPTION 
------解决思路----------------------
 WS_SYSMENU 
------解决思路----------------------
 WS_THICKFRAME 
------解决思路----------------------
 WS_MINIMIZEBOX 
------解决思路----------------------
 WS_MAXIMIZEBOX,

            WS_POPUP = 0x80000000,

            WS_POPUPWINDOW = WS_POPUP 
------解决思路----------------------
 WS_BORDER 
------解决思路----------------------
 WS_SYSMENU,

            WS_SIZEBOX = 0x00040000,

            WS_SYSMENU = 0x00080000,

            WS_TABSTOP = 0x00010000,

            WS_THICKFRAME = 0x00040000,

            WS_TILED = 0x00000000,

            WS_TILEDWINDOW = WS_OVERLAPPED 
------解决思路----------------------
 WS_CAPTION 
------解决思路----------------------
 WS_SYSMENU 
------解决思路----------------------
 WS_THICKFRAME 
------解决思路----------------------
 WS_MINIMIZEBOX 
------解决思路----------------------
 WS_MAXIMIZEBOX,

            WS_VISIBLE = 0x10000000,

            WS_VSCROLL = 0x00200000
        }

        public static bool HasWindowStyle(IntPtr hwnd, long styles, bool fullMatch)
        {
            var result = GetWindowLong(hwnd, GWL_STYLE) & styles;
            return fullMatch ? result == styles : result != 0;
        }

是否最大/小化WS_MINIMIZE
HasWindowStyle(hwnd, WindowStyles.WS_MAXIMIZE, false);

是否正常
IsWindowVisible(hwnd) && !HasWindowStyle(hwnd, WindowStyles.WS_MAXIMIZE, false) && !HasWindowStyle(hwnd, WindowStyles.WS_MINIMIZE, false);