zoukankan      html  css  js  c++  java
  • WPF将窗体设置为桌面背景【动态桌面】

    #region MyRegion
            private IntPtr programIntPtr = IntPtr.Zero;
            bool inited { get; set; }
            public void Init()
            {
                try
                {
                    if (inited) return;
                    // 通过类名查找一个窗口,返回窗口句柄。
                    programIntPtr = Win32.FindWindow("Progman", null);
    
                    // 窗口句柄有效
                    if (programIntPtr != IntPtr.Zero)
                    {
                        IntPtr result = IntPtr.Zero;
    
                        // 向 Program Manager 窗口发送 0x52c 的一个消息,超时设置为0x3e8(1秒)。
                        Win32.SendMessageTimeout(programIntPtr, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result);
    
                        // 遍历顶级窗口
                        Win32.EnumWindows((hwnd, lParam) =>
                        {
                            // 找到包含 SHELLDLL_DefView 这个窗口句柄的 WorkerW
                            if (Win32.FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero)
                            {
                                // 找到当前 WorkerW 窗口的,后一个 WorkerW 窗口。 
                                IntPtr tempHwnd = Win32.FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null);
    
                                // 隐藏这个窗口
                                Win32.ShowWindow(tempHwnd, 0);
                            }
                            return true;
                        }, IntPtr.Zero);
                    }
    
                    Win32.SetParent(new System.Windows.Interop.WindowInteropHelper(this).Handle, programIntPtr);
                    inited = true;
    
                }
                catch (Exception ex)
                {
                }
            }
            #endregion
    public static class Win32
        {
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string className, string winName);
    
            [DllImport("user32.dll")]
            public static extern IntPtr SendMessageTimeout(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam, uint fuFlage, uint timeout, IntPtr result);
    
            [DllImport("user32.dll")]
            public static extern bool EnumWindows(EnumWindowsProc proc, IntPtr lParam);
            public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam);
    
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string winName);
    
            [DllImport("user32.dll")]
            public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
    
            [DllImport("user32.dll")]
            public static extern IntPtr SetParent(IntPtr hwnd, IntPtr parentHwnd);
        }
  • 相关阅读:
    巧用系统命令看是否中毒
    从80年代初到2003年末中国出现的街头骗术
    万象数据库新密码世界```和原来的不同了
    换网关bat
    给自己的电脑做一个O盘 -隐藏自己私密的东
    一个小恶 搞 病 毒
    诊断卡常见代码
    路由跟踪命令的用法和技巧
    block,inline和inline-block的区别
    Jquery easyui开启行编辑模式增删改操作
  • 原文地址:https://www.cnblogs.com/RedSky/p/12880887.html
Copyright © 2011-2022 走看看