2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

C#如何让WinForm嵌入桌面窗口最底层

时间:02-11来源:作者:点击数:63

本文介绍C#使用Windows API函数:SetParent、SetWindowPos和FindWindow实现让WinForm嵌入桌面窗口最底层,并提供详细的实现代码供参考。

此类将窗体永远置于窗口最底层。

首先, 调用一些User32.dll的WinAPI函数。

  • internal class User32
  • {
  • public const int SE_SHUTDOWN_PRIVILEGE = 0x13;
  • [DllImport("user32.dll")]
  • public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  • [DllImport("user32.dll")]
  • public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
  • [DllImport("user32.dll")]
  • public static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx,
  • int cy, uint uFlags);
  • }

然后, 在WinForm里面:

  • public MainForm()
  • {
  • InitializeComponent();
  • try
  • {
  • if (Environment.OSVersion.Version.Major < 6)
  • {
  • base.SendToBack();
  • IntPtr hWndNewParent = User32.FindWindow("Progman", null);
  • User32.SetParent(base.Handle, hWndNewParent);
  • }
  • else
  • {
  • User32.SetWindowPos(base.Handle, 1, 0, 0, 0, 0, User32.SE_SHUTDOWN_PRIVILEGE);
  • }
  • }
  • catch (ApplicationException exx)
  • {
  • MessageBox.Show(this, exx.Message, "Pin to Desktop");
  • }
  • }
  • private void MainForm_Activated(object sender, EventArgs e)
  • {
  • if (Environment.OSVersion.Version.Major >= 6)
  • {
  • User32.SetWindowPos(base.Handle, 1, 0, 0, 0, 0, User32.SE_SHUTDOWN_PRIVILEGE);
  • }
  • }
  • private void MainForm_Paint(object sender, PaintEventArgs e)
  • {
  • if (Environment.OSVersion.Version.Major >= 6)
  • {
  • User32.SetWindowPos(base.Handle, 1, 0, 0, 0, 0, User32.SE_SHUTDOWN_PRIVILEGE);
  • }
  • }

以上介绍的就是C#如何让WinForm嵌入桌面窗口最底层,希望对你有所帮助。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门