• C# 设置桌面为父窗口


    #region 设置桌面为父窗口
    IntPtr hDesktop;
    public const int GW_CHILD = 5;
    
    public IntPtr GetDesktopHandle(DesktopLayer layer)
    {
    //hWnd = new HandleRef();
    HandleRef hWnd;
    IntPtr hDesktop = new IntPtr();
    switch (layer)
    {
    case DesktopLayer.Progman:
    hDesktop = Win32Support.FindWindow("Progman", null);//第一层桌面
    break;
    case DesktopLayer.SHELLDLL:
    hDesktop = Win32Support.FindWindow("Progman", null);//第一层桌面
    hWnd = new HandleRef(this, hDesktop);
    hDesktop = Win32Support.GetWindow(hWnd, GW_CHILD);//第2层桌面
    break;
    case DesktopLayer.FolderView:
    hDesktop = Win32Support.FindWindow("Progman", null);//第一层桌面
    hWnd = new HandleRef(this, hDesktop);
    hDesktop = Win32Support.GetWindow(hWnd, GW_CHILD);//第2层桌面
    hWnd = new HandleRef(this, hDesktop);
    hDesktop = Win32Support.GetWindow(hWnd, GW_CHILD);//第3层桌面
    break;
    }
    return hDesktop;
    }
    
    public void EmbedDesktop(Object embeddedWindow, IntPtr childWindow, IntPtr parentWindow)
    {
    Form window = (Form)embeddedWindow;
    HandleRef HWND_BOTTOM = new HandleRef(embeddedWindow, new IntPtr(1));
    const int SWP_FRAMECHANGED = 0x0020;//发送窗口大小改变消息
    Win32Support.SetParent(childWindow, parentWindow);
    Win32Support.SetWindowPos(new HandleRef(window, childWindow), HWND_BOTTOM, 300, 300, window.Width, window.Height, SWP_FRAMECHANGED);
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
    
    }
    
    class Win32Support
    {
    
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr FindWindow(string className, string windowName);
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetWindow(HandleRef hWnd, int nCmd);
    [DllImport("user32.dll")]
    public static extern IntPtr SetParent(IntPtr child, IntPtr parent);
    [DllImport("user32.dll", EntryPoint = "GetDCEx", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hrgnClip, int flags);
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern bool SetWindowPos(HandleRef hWnd, HandleRef hWndInsertAfter, int x, int y, int cx, int cy, int flags);
    [DllImport("user32.dll")]
    public static extern int ReleaseDC(IntPtr window, IntPtr handle);
    }
    
    public enum DesktopLayer
    {
    Progman = 0,
    SHELLDLL = 1,
    FolderView = 2
    }
    #endregion


    public Form1()
    {
    InitializeComponent();
    this.hDesktop = GetDesktopHandle(DesktopLayer.Progman);
    EmbedDesktop(this, this.Handle, this.hDesktop);
    }

     

    本人承接嵌入式软硬件项目开发,物联网项目开发。有意请加QQ295936912(注明来意)

  • 相关阅读:
    docker-compose 使用
    mysql UNIX时间戳与日期的相互转换 查询表信息
    mysql查看表结构命令
    PostgreSQL新手入门
    ibdata1是?
    ubuntu 12.04 安装 nginx+php+mysql web服务器
    读懂IL代码就这么简单(二)
    读懂IL代码就这么简单(一)
    在Ubuntu Linux下怎样安装QQ
    jQuery 选择器
  • 原文地址:https://www.cnblogs.com/huanjun/p/14716748.html
Copyright © 2020-2023  润新知