• 摘要:本文介绍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嵌入桌面窗口最底层,希望对你有所帮助。
    作者:zfrong

    相关文章: