Esempio n. 1
0
// ReSharper restore RedundantAssignment
        /// <summary>
        /// Locates Windows system windows, like TaskBar and locates Power8 MainButton inside it.
        /// Starts location update thread. Subscribes to Settings Manager events and registers HotKey.
        /// </summary>
        private void WindowLoaded(object sender, RoutedEventArgs e)
        {
            _taskBar = API.FindWindow(API.WndIds.TRAY_WND_CLASS, null);
            CheckWnd(_taskBar, API.WndIds.TRAY_WND_CLASS);
            SystemScale = 1f / 96;
            using (var g = Graphics.FromHwnd(_taskBar))
            {
                SystemScale *= g.DpiX;
            }

            if (Util.OsIs.SevenOrMore && !Util.OsIs.TenOrMore) //7 --> 8.1
            {
                _midPanel = API.FindWindowEx(_taskBar, IntPtr.Zero, API.WndIds.TRAY_REBAR_WND_CLASS, null);
                CheckWnd(_midPanel, API.WndIds.TRAY_REBAR_WND_CLASS);
                if (Util.OsIs.EightBlueOrMore)
                {
                    _startBtn = API.FindWindowEx(_taskBar, IntPtr.Zero, API.WndIds.SH_W8_1_START_CLASS, null);
                    CheckWnd(_startBtn, API.WndIds.SH_W8_1_START_CLASS);
                }
                _showDesktopBtn = API.FindWindowEx(_taskBar, IntPtr.Zero, API.WndIds.TRAY_NTF_WND_CLASS, null);
                CheckWnd(_showDesktopBtn, API.WndIds.TRAY_NTF_WND_CLASS);
                _showDesktopBtn = API.FindWindowEx(_showDesktopBtn, IntPtr.Zero, API.WndIds.SH_DSKTP_WND_CLASS, null);
                CheckWnd(_showDesktopBtn, API.WndIds.SH_DSKTP_WND_CLASS);
            }
            else //XP, 10
            {
                var hostClass = Util.OsIs.TenOrMore ? API.WndIds.SH_W8_1_START_CLASS : API.WndIds.SH_DSKTP_START_CLASS;
                _showDesktopBtn = API.FindWindowEx(_taskBar, IntPtr.Zero, hostClass, null);
                CheckWnd(_showDesktopBtn, hostClass);
            }

            Left = 0;
            Top  = 0;
            SetParent(this.MakeGlassWpfWindow());
            Util.ForkStart(WatchDesktopBtn, "ShowDesktop button watcher");

            //Register as a HWND that will be used as device notification processor proxy by DriveManager
            DriveManager.SetReporter(this.GetHandle());

            SettingsManager.WarnMayHaveChanged += SettingsManagerOnWarnMayHaveChanged;
            SettingsManager.ImageChanged       += SettingsManagerOnImageChanged;
            SettingsManager.PicStretchChanged  += SettingsManagerOnImageStretchChanged;
            SettingsManager.BgrThreadLock.Set();

            API.RegisterHotKey(this.GetHandle(), 0, API.fsModifiers.MOD_ALT, Keys.Z);
            this.RegisterHook(WndProc);
        }