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

wangtao_028 2015-09-09 04:03:22
找了好久,没找到如何通过句柄获取其它程序窗体的Windowstate,如MINIMIZED ,MAXIMIZED,NORMAL
最好不要通过窗体大小判断
...全文
161 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangtao_028 2015-09-09
  • 打赏
  • 举报
回复
非常的感谢帮助 
  • 打赏
  • 举报
回复
在它的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);
crystal_lz 2015-09-09
  • 打赏
  • 举报
回复

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

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧