| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Interop;
- namespace GeekDesk.Util
- {
- public class BlurGlassUtil
- {
- internal enum AccentState
- {
- ACCENT_DISABLED = 1,
- ACCENT_ENABLE_GRADIENT = 0,
- ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
- ACCENT_ENABLE_BLURBEHIND = 3,
- ACCENT_INVALID_STATE = 4
- }
- [StructLayout(LayoutKind.Sequential)]
- internal struct AccentPolicy
- {
- public AccentState AccentState;
- public int AccentFlags;
- public int GradientColor;
- public int AnimationId;
- }
- [StructLayout(LayoutKind.Sequential)]
- internal struct WindowCompositionAttributeData
- {
- public WindowCompositionAttribute Attribute;
- public IntPtr Data;
- public int SizeOfData;
- }
- internal enum WindowCompositionAttribute
- {
- // ...
- WCA_ACCENT_POLICY = 19
- // ...
- }
- [DllImport("user32.dll")]
- internal static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttributeData data);
- public static void EnableBlur(Window window)
- {
- WindowInteropHelper windowHelper = new WindowInteropHelper(window);
- AccentPolicy accent = new AccentPolicy
- {
- AccentState = AccentState.ACCENT_ENABLE_BLURBEHIND
- };
- int accentStructSize = Marshal.SizeOf(accent);
- IntPtr accentPtr = Marshal.AllocHGlobal(accentStructSize);
- Marshal.StructureToPtr(accent, accentPtr, false);
- WindowCompositionAttributeData data = new WindowCompositionAttributeData
- {
- Attribute = WindowCompositionAttribute.WCA_ACCENT_POLICY,
- SizeOfData = accentStructSize,
- Data = accentPtr
- };
- SetWindowCompositionAttribute(windowHelper.Handle, ref data);
- Marshal.FreeHGlobal(accentPtr);
- }
- }
- }
|