using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace SystemX.Net.Platform.Common.Util
{
    public static class AppWinControl
    {
        public enum eShowType
        {
            SW_HIDE = 0, //Hides the window and activates another window.
            SW_MAXIMIZE = 3, //Maximizes the specified window.
            SW_MINIMIZE = 6, //Minimizes the specified window and activates the next top-level window in the Z order.
            SW_RESTORE = 9, //Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
            SW_SHOW = 5, //Activates the window and displays it in its current size and position.
            SW_SHOWDEFAULT = 10, //Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.
            SW_SHOWMAXIMIZED = 3, //Activates the window and displays it as a maximized window.
            SW_SHOWMINIMIZED = 2, //Activates the window and displays it as a minimized window.
            SW_SHOWMINNOACTIVE = 7, //Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except the window is not activated.
            SW_SHOWNA = 8, //Displays the window in its current size and position. This value is similar to SW_SHOW, except that the window is not activated.
            SW_SHOWNOACTIVATE = 4, //Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated.
            SW_SHOWNORMAL = 1
        }

        [DllImport("user32.dll")]
        public static extern IntPtr ExtGetWindowRect(IntPtr hWnd, out Rect lpRect);

        [DllImport("user32.dll")]
        public static extern bool ExtPrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

        [DllImport("user32.dll")]
        private static extern int ExtSetForegroundWindow(IntPtr hWnd);

        private const int SW_RESTORE = 9;

        [DllImport("user32.dll")]
        private static extern IntPtr ExtShowWindow(IntPtr hWnd, int nCmdShow);

        public static IntPtr GetWindowRect(IntPtr hWnd, out Rect lpRect) { return ExtGetWindowRect(hWnd, out lpRect); }
        public static bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags) { return ExtPrintWindow(hWnd, hdcBlt, nFlags); }
        public static int SetForegroundWindow(IntPtr hWnd) { return ExtSetForegroundWindow(hWnd); }
        public static IntPtr ShowWindow(IntPtr hWnd, int nCmdShow) { return ExtShowWindow(hWnd, nCmdShow); }

    }
}
