using System; using System.Collections.Generic; using System.Drawing; using System.Security; using System.Runtime.InteropServices; namespace Nuclex { internal sealed class NativeMethods { // Methods private NativeMethods() { } [return: MarshalAs(UnmanagedType.Bool)] [SuppressUnmanagedCodeSecurity, DllImport("user32.dll")] internal static extern bool ClientToScreen(IntPtr hWnd, out POINT point); [return: MarshalAs(UnmanagedType.Bool)] [SuppressUnmanagedCodeSecurity, DllImport("user32.dll")] internal static extern bool GetClientRect(IntPtr hWnd, out RECT rect); [return: MarshalAs(UnmanagedType.Bool)] [SuppressUnmanagedCodeSecurity, DllImport("user32.dll")] internal static extern bool GetWindowRect(IntPtr hWnd, out RECT rect); [SuppressUnmanagedCodeSecurity, DllImport("user32.dll")] internal static extern IntPtr MonitorFromWindow(IntPtr hWnd, uint flags); [return: MarshalAs(UnmanagedType.Bool)] [SuppressUnmanagedCodeSecurity, DllImport("user32.dll", CharSet = CharSet.Auto)] internal static extern bool PeekMessage(out Message msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags); [return: MarshalAs(UnmanagedType.Bool)] [SuppressUnmanagedCodeSecurity, DllImport("kernel32")] internal static extern bool QueryPerformanceCounter(ref long PerformanceCount); [return: MarshalAs(UnmanagedType.Bool)] [SuppressUnmanagedCodeSecurity, DllImport("kernel32")] internal static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); // Nested Types [StructLayout(LayoutKind.Sequential)] public struct Message { public IntPtr hWnd; public NativeMethods.WindowMessage msg; public IntPtr wParam; public IntPtr lParam; public uint time; public Point p; } [StructLayout(LayoutKind.Sequential)] public struct MinMaxInformation { public Point reserved; public Point MaxSize; public Point MaxPosition; public Point MinTrackSize; public Point MaxTrackSize; } [StructLayout(LayoutKind.Sequential)] public struct MonitorInformation { public uint Size; public Rectangle MonitorRectangle; public Rectangle WorkRectangle; public uint Flags; } public enum MouseButtons { Left = 1, Middle = 0x10, Right = 2, Side1 = 0x20, Side2 = 0x40 } [StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; } [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } internal enum WindowMessage : uint { ActivateApplication = 0x1c, Character = 0x102, Close = 0x10, Destroy = 2, EnterMenuLoop = 0x211, EnterSizeMove = 0x231, ExitMenuLoop = 530, ExitSizeMove = 0x232, GetMinMax = 0x24, KeyDown = 0x100, KeyUp = 0x101, LeftButtonDoubleClick = 0x203, LeftButtonDown = 0x201, LeftButtonUp = 0x202, MiddleButtonDoubleClick = 0x209, MiddleButtonDown = 0x207, MiddleButtonUp = 520, MouseFirst = 0x201, MouseLast = 0x20d, MouseMove = 0x200, MouseWheel = 0x20a, NonClientHitTest = 0x84, Paint = 15, PowerBroadcast = 0x218, Quit = 0x12, RightButtonDoubleClick = 0x206, RightButtonDown = 0x204, RightButtonUp = 0x205, SetCursor = 0x20, Size = 5, SystemCharacter = 0x106, SystemCommand = 0x112, SystemKeyDown = 260, SystemKeyUp = 0x105, XButtonDoubleClick = 0x20d, XButtonDown = 0x20b, XButtonUp = 0x20c } } } // namespace Nuclex