using System; using System.Runtime.InteropServices; namespace RenderHookAPI { [System.Security.SuppressUnmanagedCodeSecurity()] internal sealed class NativeMethods { private NativeMethods() { } internal static bool IsWindowInForeground(IntPtr hWnd) { return hWnd == GetForegroundWindow(); } #region kernel32 [DllImport("kernel32.dll")] public static extern IntPtr GetModuleHandle(string lpModuleName); #endregion #region user32 #region ShowWindow /// Shows a Window /// /// To perform certain special effects when showing or hiding a /// window, use AnimateWindow. ///The first time an application calls ShowWindow, it should use ///the WinMain function's nCmdShow parameter as its nCmdShow parameter. ///Subsequent calls to ShowWindow must use one of the values in the ///given list, instead of the one specified by the WinMain function's ///nCmdShow parameter. ///As noted in the discussion of the nCmdShow parameter, the ///nCmdShow value is ignored in the first call to ShowWindow if the ///program that launched the application specifies startup information ///in the structure. In this case, ShowWindow uses the information ///specified in the STARTUPINFO structure to show the window. On ///subsequent calls, the application must call ShowWindow with nCmdShow ///set to SW_SHOWDEFAULT to use the startup information provided by the ///program that launched the application. This behavior is designed for ///the following situations: /// /// Applications create their main window by calling CreateWindow /// with the WS_VISIBLE flag set. /// Applications create their main window by calling CreateWindow /// with the WS_VISIBLE flag cleared, and later call ShowWindow with the /// SW_SHOW flag set to make it visible. /// /// Handle to the window. /// Specifies how the window is to be shown. /// This parameter is ignored the first time an application calls /// ShowWindow, if the program that launched the application provides a /// STARTUPINFO structure. Otherwise, the first time ShowWindow is called, /// the value should be the value obtained by the WinMain function in its /// nCmdShow parameter. In subsequent calls, this parameter can be one of /// the WindowShowStyle members. /// /// If the window was previously visible, the return value is nonzero. /// If the window was previously hidden, the return value is zero. /// [DllImport("user32.dll")] internal static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow); /// Enumeration of the different ways of showing a window using /// ShowWindow internal enum WindowShowStyle : uint { /// Hides the window and activates another window. /// See SW_HIDE Hide = 0, /// Activates and displays a 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 displaying /// the window for the first time. /// See SW_SHOWNORMAL ShowNormal = 1, /// Activates the window and displays it as a minimized window. /// See SW_SHOWMINIMIZED ShowMinimized = 2, /// Activates the window and displays it as a maximized window. /// See SW_SHOWMAXIMIZED ShowMaximized = 3, /// Maximizes the specified window. /// See SW_MAXIMIZE Maximize = 3, /// Displays a window in its most recent size and position. /// This value is similar to "ShowNormal", except the window is not /// actived. /// See SW_SHOWNOACTIVATE ShowNormalNoActivate = 4, /// Activates the window and displays it in its current size /// and position. /// See SW_SHOW Show = 5, /// Minimizes the specified window and activates the next /// top-level window in the Z order. /// See SW_MINIMIZE Minimize = 6, /// Displays the window as a minimized window. This value is /// similar to "ShowMinimized", except the window is not activated. /// See SW_SHOWMINNOACTIVE ShowMinNoActivate = 7, /// Displays the window in its current size and position. This /// value is similar to "Show", except the window is not activated. /// See SW_SHOWNA ShowNoActivate = 8, /// 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. /// See SW_RESTORE Restore = 9, /// 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. /// See SW_SHOWDEFAULT ShowDefault = 10, /// Windows 2000/XP: Minimizes a window, even if the thread /// that owns the window is hung. This flag should only be used when /// minimizing windows from a different thread. /// See SW_FORCEMINIMIZE ForceMinimized = 11 } #endregion /// /// The GetForegroundWindow function returns a handle to the foreground window. /// [DllImport("user32.dll")] internal static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool IsIconic(IntPtr hWnd); //Get window position [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle); public struct Rect { public int Left { get; set; } public int Top { get; set; } public int Right { get; set; } public int Bottom { get; set; } } #endregion } }