原文: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);

 

最新文章

  1. 2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)
  2. inline-boock的默认间距
  3. js判断当前的访问是手机/电脑
  4. JAVA_用Java来获取访问者真实的IP地址
  5. 【转】iOS websocket 及时通讯实现
  6. 开源DBCP、C3P0、Proxool 、 BoneCP连接池的比较
  7. [04] SQL语句优化之索引
  8. Android获取系统cpu信息,内存,版本,电量等信息
  9. android账号与同步之同步实现
  10. Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
  11. linux ss 命令
  12. Base64简单原理
  13. HTML5 &lt;li&gt; &lt;ol&gt; &lt;ul&gt; 用法
  14. Python安装及运行中可能遇到的问题。
  15. [学习笔记]SiftGPU入门
  16. weiwo.wxmmd.com将您重定向的次数过多。尝试清除 Cookie.
  17. c# 之 unsafe
  18. 020.2.5 Calender对象
  19. SpringMVC的数据回现
  20. Zigbee安全基础篇Part.1

热门文章

  1. jQueryeasyUI+Hibernate+struts2实现商城后台管理之添加操作时的unique验证
  2. Java虚拟机11:内存分配原则
  3. angularjs select下拉搜索框
  4. Kali-linux使用Aircrack-ng工具破解无线网络
  5. SDN测量论文粗读(二)9.21
  6. cocos2d-x3.0 用CCDictionary写文件
  7. Java中的集合框架-Collections和Arrays
  8. [iOS]UIFont的lineHeight与pointSize
  9. MySQL慢日志查询实践
  10. Hbase(2)-HBase简介