zoukankan      html  css  js  c++  java
  • Windows 7下使用窗口实时缩略图的类

    Windows 7下使用窗口缩略图的类

        internal sealed class ThumbnailSafeHandle : SafeHandle
        {
            [DllImport("dwmapi.dll", SetLastError = true)]
            static extern int DwmQueryThumbnailSourceSize(ThumbnailSafeHandle hThumbnail, ref PSIZE pSize);
            [DllImport("dwmapi.dll", SetLastError = true)]
            static extern int DwmRegisterThumbnail(IntPtr hwndDestination, IntPtr hwndSource, out ThumbnailSafeHandle hThumbnailId);
            [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), DllImport("dwmapi.dll", SetLastError = true)]
            static extern int DwmUnregisterThumbnail(IntPtr hThumbmailId);
            [DllImport("dwmapi.dll", SetLastError = true)]
            static extern int DwmUpdateThumbnailProperties(ThumbnailSafeHandle hThumbmailId, ref DWM_THUMBNAIL_PROPERTIES ptnProperties);
            [DllImport("user32.dll")]
            static extern int GetWindowRect(IntPtr hwnd, ref RECT lpRect);
    
            [StructLayout(LayoutKind.Sequential)]
            struct PSIZE
            {
                public int cx;
                public int cy;
            }
    
            [Serializable, StructLayout(LayoutKind.Sequential)]
            struct RECT
            {
                public int left;
                public int top;
                public int right;
                public int bottom;
                internal RECT(int l, int t, int r, int b)
                {
                    this.left = l;
                    this.top = t;
                    this.right = r;
                    this.bottom = b;
                }
            }
    
            [StructLayout(LayoutKind.Sequential)]
            struct DWM_THUMBNAIL_PROPERTIES
            {
                public int dwFlags;
                public RECT rcDestination;
                public RECT rcSource;
                public byte opacity;
                public bool fVisible;
                public bool fSourceClientAreaOnly;
            }
    
            private ThumbnailSafeHandle()
                : base(IntPtr.Zero, true)
            {
            }
    
            //在目标窗口(HWND = hwndDestination)内显示源窗口(HWND = hwndSource)的实时缩略图
            public static ThumbnailSafeHandle Register(IntPtr hwndDestination, IntPtr hwndSource)
            {
                ThumbnailSafeHandle handle;
                DwmRegisterThumbnail(hwndDestination, hwndSource, out handle);
                Size size = handle.Size;
                DWM_THUMBNAIL_PROPERTIES m_ThumbnailProperties = new DWM_THUMBNAIL_PROPERTIES();
                m_ThumbnailProperties.dwFlags = 29;  
                m_ThumbnailProperties.opacity = 128; //透明度
                m_ThumbnailProperties.fVisible = true;
                m_ThumbnailProperties.fSourceClientAreaOnly = true; //只显示客户区
                m_ThumbnailProperties.rcDestination = new RECT(0, 0, (int)size.Width, (int)size.Height); //显示在目标窗口的哪个位置
                DwmUpdateThumbnailProperties(handle, ref m_ThumbnailProperties); 
                return handle;
            }
    
            public Size Size 
            {
                get 
                {
                    PSIZE size = new PSIZE();
                    DwmQueryThumbnailSourceSize(this, ref size);
                    return new Size(size.cx, size.cy);
                }
            }
    
            protected override bool ReleaseHandle()
            {
                if (this.IsInvalid)
                {
                    return true;
                }
                int num = DwmUnregisterThumbnail(base.handle);
                base.SetHandle(IntPtr.Zero);
                return (num == 0);
            }
    
            public override bool IsInvalid
            {
                get
                {
                    return (IntPtr.Zero == base.handle);
                }
            }
        }
  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/wmesci/p/2736005.html
Copyright © 2011-2022 走看看