Created
October 6, 2012 07:22
-
-
Save renevo/3844307 to your computer and use it in GitHub Desktop.
NativeMethods
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class NativeMethods | |
{ | |
public static IntPtr GetAndSetWindowFullScreenWindowed(string windowTitle) | |
{ | |
var minecraftWindow = FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, windowTitle); | |
if (minecraftWindow == IntPtr.Zero) | |
{ | |
return IntPtr.Zero; | |
} | |
SetWindowFullScreenWindowed(minecraftWindow); | |
return minecraftWindow; | |
} | |
public static void SetWindowFullScreenWindowed(IntPtr minecraftWindow) | |
{ | |
var lStyle = GetWindowLong(minecraftWindow, WS.GWL_STYLE); | |
// remove the window crap | |
lStyle &= ~(WS.WS_CAPTION | WS.WS_BORDER | WS.WS_DLGFRAME | WS.WS_SIZEBOX | WS.WS_THICKFRAME); | |
SetWindowLong(minecraftWindow, WS.GWL_STYLE, lStyle); | |
var bounds = Screen.PrimaryScreen.Bounds; | |
SetWindowPos(minecraftWindow, new IntPtr(0), bounds.X, bounds.Y, bounds.Width, bounds.Height, SetWindowPosFlags.ShowWindow); | |
} | |
#region Native Methods and Types | |
[DllImport("user32.dll", SetLastError = true)] | |
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); | |
[DllImport("user32.dll", SetLastError = true)] | |
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); | |
[DllImport("user32.dll")] | |
public static extern UInt32 SetWindowLong(IntPtr hWnd, Int32 nIndex, UInt32 dwNewLong); | |
[DllImport("user32.dll", SetLastError = true)] | |
public static extern UInt32 GetWindowLong(IntPtr hWnd, Int32 nIndex); | |
[DllImport("user32.dll")] | |
[return: MarshalAs(UnmanagedType.Bool)] | |
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags); | |
public static class WS | |
{ | |
public const Int32 GWL_ID = (-12); | |
public const Int32 GWL_STYLE = (-16); | |
public const Int32 GWL_EXSTYLE = (-20); | |
// Window Styles | |
public const UInt32 WS_OVERLAPPED = 0; | |
public const UInt32 WS_POPUP = 0x80000000; | |
public const UInt32 WS_CHILD = 0x40000000; | |
public const UInt32 WS_MINIMIZE = 0x20000000; | |
public const UInt32 WS_VISIBLE = 0x10000000; | |
public const UInt32 WS_DISABLED = 0x8000000; | |
public const UInt32 WS_CLIPSIBLINGS = 0x4000000; | |
public const UInt32 WS_CLIPCHILDREN = 0x2000000; | |
public const UInt32 WS_MAXIMIZE = 0x1000000; | |
public const UInt32 WS_CAPTION = 0xC00000; // WS_BORDER or WS_DLGFRAME | |
public const UInt32 WS_BORDER = 0x800000; | |
public const UInt32 WS_DLGFRAME = 0x400000; | |
public const UInt32 WS_VSCROLL = 0x200000; | |
public const UInt32 WS_HSCROLL = 0x100000; | |
public const UInt32 WS_SYSMENU = 0x80000; | |
public const UInt32 WS_THICKFRAME = 0x40000; | |
public const UInt32 WS_GROUP = 0x20000; | |
public const UInt32 WS_TABSTOP = 0x10000; | |
public const UInt32 WS_MINIMIZEBOX = 0x20000; | |
public const UInt32 WS_MAXIMIZEBOX = 0x10000; | |
public const UInt32 WS_TILED = WS_OVERLAPPED; | |
public const UInt32 WS_ICONIC = WS_MINIMIZE; | |
public const UInt32 WS_SIZEBOX = WS_THICKFRAME; | |
// Extended Window Styles | |
public const UInt32 WS_EX_DLGMODALFRAME = 0x0001; | |
public const UInt32 WS_EX_NOPARENTNOTIFY = 0x0004; | |
public const UInt32 WS_EX_TOPMOST = 0x0008; | |
public const UInt32 WS_EX_ACCEPTFILES = 0x0010; | |
public const UInt32 WS_EX_TRANSPARENT = 0x0020; | |
public const UInt32 WS_EX_MDICHILD = 0x0040; | |
public const UInt32 WS_EX_TOOLWINDOW = 0x0080; | |
public const UInt32 WS_EX_WINDOWEDGE = 0x0100; | |
public const UInt32 WS_EX_CLIENTEDGE = 0x0200; | |
public const UInt32 WS_EX_CONTEXTHELP = 0x0400; | |
public const UInt32 WS_EX_RIGHT = 0x1000; | |
public const UInt32 WS_EX_LEFT = 0x0000; | |
public const UInt32 WS_EX_RTLREADING = 0x2000; | |
public const UInt32 WS_EX_LTRREADING = 0x0000; | |
public const UInt32 WS_EX_LEFTSCROLLBAR = 0x4000; | |
public const UInt32 WS_EX_RIGHTSCROLLBAR = 0x0000; | |
public const UInt32 WS_EX_CONTROLPARENT = 0x10000; | |
public const UInt32 WS_EX_STATICEDGE = 0x20000; | |
public const UInt32 WS_EX_APPWINDOW = 0x40000; | |
public const UInt32 WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE); | |
public const UInt32 WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST); | |
public const UInt32 WS_EX_LAYERED = 0x00080000; | |
public const UInt32 WS_EX_NOINHERITLAYOUT = 0x00100000; // Disable inheritence of mirroring by children | |
public const UInt32 WS_EX_LAYOUTRTL = 0x00400000; // Right to left mirroring | |
public const UInt32 WS_EX_COMPOSITED = 0x02000000; | |
public const UInt32 WS_EX_NOACTIVATE = 0x08000000; | |
} | |
[Flags()] | |
public enum SetWindowPosFlags : uint | |
{ | |
/// <summary>If the calling thread and the thread that owns the window are attached to different input queues, | |
/// the system posts the request to the thread that owns the window. This prevents the calling thread from | |
/// blocking its execution while other threads process the request.</summary> | |
/// <remarks>SWP_ASYNCWINDOWPOS</remarks> | |
SynchronousWindowPosition = 0x4000, | |
/// <summary>Prevents generation of the WM_SYNCPAINT message.</summary> | |
/// <remarks>SWP_DEFERERASE</remarks> | |
DeferErase = 0x2000, | |
/// <summary>Draws a frame (defined in the window's class description) around the window.</summary> | |
/// <remarks>SWP_DRAWFRAME</remarks> | |
DrawFrame = 0x0020, | |
/// <summary>Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to | |
/// the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE | |
/// is sent only when the window's size is being changed.</summary> | |
/// <remarks>SWP_FRAMECHANGED</remarks> | |
FrameChanged = 0x0020, | |
/// <summary>Hides the window.</summary> | |
/// <remarks>SWP_HIDEWINDOW</remarks> | |
HideWindow = 0x0080, | |
/// <summary>Does not activate the window. If this flag is not set, the window is activated and moved to the | |
/// top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter | |
/// parameter).</summary> | |
/// <remarks>SWP_NOACTIVATE</remarks> | |
DoNotActivate = 0x0010, | |
/// <summary>Discards the entire contents of the client area. If this flag is not specified, the valid | |
/// contents of the client area are saved and copied back into the client area after the window is sized or | |
/// repositioned.</summary> | |
/// <remarks>SWP_NOCOPYBITS</remarks> | |
DoNotCopyBits = 0x0100, | |
/// <summary>Retains the current position (ignores X and Y parameters).</summary> | |
/// <remarks>SWP_NOMOVE</remarks> | |
IgnoreMove = 0x0002, | |
/// <summary>Does not change the owner window's position in the Z order.</summary> | |
/// <remarks>SWP_NOOWNERZORDER</remarks> | |
DoNotChangeOwnerZOrder = 0x0200, | |
/// <summary>Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to | |
/// the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent | |
/// window uncovered as a result of the window being moved. When this flag is set, the application must | |
/// explicitly invalidate or redraw any parts of the window and parent window that need redrawing.</summary> | |
/// <remarks>SWP_NOREDRAW</remarks> | |
DoNotRedraw = 0x0008, | |
/// <summary>Same as the SWP_NOOWNERZORDER flag.</summary> | |
/// <remarks>SWP_NOREPOSITION</remarks> | |
DoNotReposition = 0x0200, | |
/// <summary>Prevents the window from receiving the WM_WINDOWPOSCHANGING message.</summary> | |
/// <remarks>SWP_NOSENDCHANGING</remarks> | |
DoNotSendChangingEvent = 0x0400, | |
/// <summary>Retains the current size (ignores the cx and cy parameters).</summary> | |
/// <remarks>SWP_NOSIZE</remarks> | |
IgnoreResize = 0x0001, | |
/// <summary>Retains the current Z order (ignores the hWndInsertAfter parameter).</summary> | |
/// <remarks>SWP_NOZORDER</remarks> | |
IgnoreZOrder = 0x0004, | |
/// <summary>Displays the window.</summary> | |
/// <remarks>SWP_SHOWWINDOW</remarks> | |
ShowWindow = 0x0040, | |
} | |
#endregion | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment