首页 > Windows开发 > 详细

WPF 窗口句柄获取和设置

时间:2019-04-10 11:52:45      阅读:133      评论:0      收藏:0      [点我收藏+]
原文:WPF 窗口句柄获取和设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BYH371256/article/details/83347163

WPF 窗口句柄设置和获取

1、句柄类

  WHwnd.cs    
    
    public class WHwnd
    {
        /// <summary>
        /// 主窗体句柄
        /// </summary>
        public static System.Windows.Interop.HwndSource Hwnd;
        /// <summary>
        /// 获取窗体句柄
        /// </summary>
        /// <param name="window">窗体</param>
        public static IntPtr GetWindowHwndSource(DependencyObject window, bool isHwnd = true)
        {
            var formDependency = System.Windows.Interop.HwndSource.FromDependencyObject(window);
            System.Windows.Interop.HwndSource winformWindow = (formDependency as System.Windows.Interop.HwndSource);
            if (isHwnd)
                Hwnd = winformWindow;
            return winformWindow.Handle;
        }

    }

2、窗口大小

WndSize.cs
    
    public class WndSize
    {
        /// <summary>
        /// 获取主窗体大小和状态
        /// </summary>
        /// <returns></returns>
        public static WindowSize GetWindowSize(IntPtr hwnd)
        {
            //是否最小化
            bool min = IsIconic(hwnd);
            //是否最大化
            bool max = IsZoomed(hwnd);

            RECT size = new RECT();
            GetWindowRect(hwnd, ref size);

            WindowSize wind = new WindowSize();
            wind.Left = size.Left;
            wind.Top = size.Top;
            wind.Width = size.Right - size.Left;
            wind.Height = size.Bottom - size.Top;
            //if (max == true)
            //    wind.Windowstatue = WindowState.Maximized;
            //else if (min == true)
            //    wind.Windowstatue = WindowState.Minimized;
            //else
            //    wind.Windowstatue = WindowState.Normal;

            return wind;
        }

        public static void CloseSoftware(IntPtr hwnd)
        {
            SendMessage(hwnd, SC_CLOSE, 0, 0);
        }
        public static int SC_CLOSE = 0X10;

        [DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
        [DllImport("user32.dll", EntryPoint = "SendMessageA")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool IsIconic(IntPtr hWnd);
        [DllImport("user32.dll")]
        public static extern bool IsZoomed(IntPtr hWnd);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int Left;//最左坐标
            public int Top;//最上坐标
            public int Right;//最右坐标
            public int Bottom;//最下坐标
        }

    }

    public struct WindowSize
    {
        public int Left;
        public int Top;
        public int Width;
        public int Height;
        //public WindowState Windowstatue;
    }

3、设置句柄和获取

在主函数Loaded事件中设置初始句柄:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    WHwnd.GetWindowHwndSource(this);
}

//自定义对话框弹出测试
ExMessageBox.ShowDialog(0, false, 3, tipStr, "", "", WHwnd.Hwnd.Handle);

?

WPF 窗口句柄获取和设置

原文:https://www.cnblogs.com/lonelyxmas/p/10682380.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!