using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;

[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
    public MARGINS(Thickness thickness, float dpiX, float dpiY)
    {
        Left = (int)(thickness.Left * dpiX);
        Right = (int)(thickness.Right * dpiX);
        Top = (int)(thickness.Top * dpiY);
        Bottom = (int)(thickness.Bottom * dpiY);
    }
    public int Left;
    public int Right;
    public int Top;
    public int Bottom;
}

public class AeroGlass
{
    //deklaracja metod z biblikoteki dwmapi.dll
    [DllImport("dwmapi.dll", PreserveSig = false)]
    static extern void DwmExtendFrameIntoClientArea(
        IntPtr handle, ref MARGINS margins);
    [DllImport("dwmapi.dll", PreserveSig = false)]
    static extern bool DwmIsCompositionEnabled();

    public static void ExtendGlass(Window window, Thickness margin)
    {
        //jeżeli kompozycja jest nieustawiona lub system jest w starszej wersji nic nie robimy
        if (DwmIsCompositionEnabled() && Environment.OSVersion.Version.Major > 5)
        {
            //uchwyt dla okna
            WindowInteropHelper helper = new WindowInteropHelper(window);
            HwndSource mainWindowSrc = (HwndSource)HwndSource.
                FromHwnd(helper.Handle);

            // ustawienie tła okna na przezroczysty
            window.Background = Brushes.Transparent;
            mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;
            //pobieramy rozdzieloczość
            System.Drawing.Graphics desktop =
               System.Drawing.Graphics.FromHwnd(mainWindowSrc.Handle);
            float dpiX = desktop.DpiX / 96;
            float dpiY = desktop.DpiY / 96;
            //ustawiamy marginesy
            MARGINS margins = new MARGINS(margin, dpiX, dpiY);
            //zwiększamy przezroczystą ramkę o stosowny rozmiar
            DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
        }
        else
        {
            window.Background = SystemColors.WindowBrush;
        }
    }
}

