Click here to Skip to main content
15,891,423 members
Articles / Desktop Programming / WPF

ScanX - A Registry Cleaner

Rate me:
Please Sign up or sign in to vote.
4.95/5 (92 votes)
29 Jan 2012CPOL11 min read 173.8K   12.5K   208  
C#/WPF - ScanX: Creating a commercial quality Registry cleaner.
using System;
using System.Windows;
using System.Windows.Interop;
using System.Runtime.InteropServices;
using System.Windows.Media;

namespace ScanX.Implementation
{
    public class GlassHelper
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct MARGINS
        {
            public MARGINS(int left, int right, int top, int bottom)
            {
                cxLeftWidth = left;
                cxRightWidth = right;
                cyTopHeight = top;
                cyBottomHeight = bottom;
            }
            public int cxLeftWidth;
            public int cxRightWidth;
            public int cyTopHeight;
            public int cyBottomHeight;
        }

        [DllImport("DwmApi.dll")]
        private static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS pMarInset);

        [DllImport("dwmapi.dll")]
        extern static int DwmIsCompositionEnabled(ref int en);


        public static bool ExtendGlass(Window win, int left, int right, int top, int bottom)
        {
            try
            {
                int ret = 0;
                DwmIsCompositionEnabled(ref ret);

                if (System.Environment.OSVersion.Version.Major > 5 && ret > 0)
                {
                    IntPtr hwnd = new WindowInteropHelper(win).Handle;
                    if (hwnd != IntPtr.Zero)
                    {
                        // Set the background to transparent from both the WPF and Win32 perspectives
                        win.Background = Brushes.Transparent;
                        HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

                        // Adjust the margins to take the system DPI into account.
                        MARGINS margins = new MARGINS(left, right, top, bottom);

                        // Extend the glass frame.
                        if (DwmExtendFrameIntoClientArea(hwnd, ref margins) < 0)
                        {
                            win.Background = SystemColors.WindowBrush;

                        }
                        else
                        {
                            return true;
                        }
                    }
                }
                else
                {
                    win.Background = Brushes.White;
                }
                return false;
            }
            catch (DllNotFoundException)
            {
                return false;
            }
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Network Administrator vtdev.com
Canada Canada
Network and programming specialist. Started in C, and have learned about 14 languages since then. Cisco programmer, and lately writing a lot of C# and WPF code, (learning Java too). If I can dream it up, I can probably put it to code. My software company, (VTDev), is on the verge of releasing a couple of very cool things.. keep you posted.

Comments and Discussions