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
}
}