WPF 窗口句柄获取和设置
2024-08-22 16:47:15
版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
最新文章
- 2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)
- inline-boock的默认间距
- js判断当前的访问是手机/电脑
- JAVA_用Java来获取访问者真实的IP地址
- 【转】iOS websocket 及时通讯实现
- 开源DBCP、C3P0、Proxool 、 BoneCP连接池的比较
- [04] SQL语句优化之索引
- Android获取系统cpu信息,内存,版本,电量等信息
- android账号与同步之同步实现
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
- linux ss 命令
- Base64简单原理
- HTML5 <;li>; <;ol>; <;ul>; 用法
- Python安装及运行中可能遇到的问题。
- [学习笔记]SiftGPU入门
- weiwo.wxmmd.com将您重定向的次数过多。尝试清除 Cookie.
- c# 之 unsafe
- 020.2.5 Calender对象
- SpringMVC的数据回现
- Zigbee安全基础篇Part.1
热门文章
- jQueryeasyUI+Hibernate+struts2实现商城后台管理之添加操作时的unique验证
- Java虚拟机11:内存分配原则
- angularjs select下拉搜索框
- Kali-linux使用Aircrack-ng工具破解无线网络
- SDN测量论文粗读(二)9.21
- cocos2d-x3.0 用CCDictionary写文件
- Java中的集合框架-Collections和Arrays
- [iOS]UIFont的lineHeight与pointSize
- MySQL慢日志查询实践
- Hbase(2)-HBase简介