private static void SetInternal(IntPtr handle, User32.AccentState accentState, bool showBorders = false, uint tintOpacity = 0)
        {
            var accent = new User32.AccentPolicy
            {
                AccentState   = accentState,
                AccentFlags   = (showBorders) ? User32.AccentFlags.DrawAllBorders : User32.AccentFlags.None,
                GradientColor = (_defaultTintOpacity << 24) | (_defaultTintBackgroundColor & 0xFFFFFF)
            };

            var accentStructSize = Marshal.SizeOf(accent);

            var accentPtr = Marshal.AllocHGlobal(accentStructSize);

            Marshal.StructureToPtr(accent, accentPtr, false);

            var data = new User32.WindowCompositionAttribData();

            data.Attribute  = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY;
            data.SizeOfData = accentStructSize;
            data.Data       = accentPtr;

            var ret = User32.SetWindowCompositionAttribute(handle, ref data);

            Debug.Assert(ret == 0 || ret == 1);

            Marshal.FreeHGlobal(accentPtr);
        }
        private static void SetAccentPolicy(IntPtr handle, User32.AccentPolicy policy)
        {
            var accentStructSize = Marshal.SizeOf(policy);
            var accentPtr        = Marshal.AllocHGlobal(accentStructSize);

            Marshal.StructureToPtr(policy, accentPtr, false);

            var data = new User32.WindowCompositionAttribData();

            data.Attribute  = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY;
            data.SizeOfData = accentStructSize;
            data.Data       = accentPtr;

            var ret = User32.SetWindowCompositionAttribute(handle, ref data);

            Debug.Assert(ret == 0 || ret == 1);

            Marshal.FreeHGlobal(accentPtr);
        }