public void OnWndProc(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam,
                              bool restorePlacement, bool activate)
        {
            if (msg != SingleInstanceMessage)
            {
                return;
            }

            if (restorePlacement)
            {
                WindowPlacement placement = WindowPlacement.GetPlacement(hwnd, false);

                if (placement.IsValid && placement.IsMinimized)
                {
                    placement.ShowCmd = WindowNative.SwShowNormal;

                    placement.SetPlacement(hwnd);
                }
            }

            if (!activate)
            {
                return;
            }

            WindowNative.SetForegroundWindow(hwnd);
            WindowUtils.ActivateWindow(WindowUtils.GetModalWindow(hwnd));
        }
        public static void ActivateWindow(IntPtr hwnd)
        {
            if (hwnd == IntPtr.Zero)
            {
                return;
            }

            WindowUtils.ActivateWindow(WindowUtils.GetModalWindow(hwnd));
        }
        public void OnWndProc(System.Windows.Window window, IntPtr hwnd, uint msg,
                              IntPtr wParam, IntPtr lParam, bool restorePlacement, bool activate)
        {
            if (!(window is INativeRestorableWindow restorableWindow))
            {
                OnWndProc(hwnd, msg, wParam, lParam, restorePlacement, activate);

                return;
            }

            if (msg != SingleInstanceMessage)
            {
                return;
            }

            if (restorePlacement)
            {
                WindowPlacement placement = WindowPlacement.GetPlacement(hwnd, false);

                if (placement.IsValid && placement.IsMinimized)
                {
                    placement.Flags |= WindowNative.WpfAsyncWindowPlacement;

                    placement.ShowCmd = restorableWindow.DuringRestoreToMaximized
                        ? WindowNative.SwShowMaximized
                        : WindowNative.SwShowNormal;

                    placement.SetPlacement(hwnd);
                }
            }

            if (!activate)
            {
                return;
            }

            WindowNative.SetForegroundWindow(hwnd);
            WindowUtils.ActivateWindow(WindowUtils.GetModalWindow(hwnd));
        }