using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Clipman { internal static class NativeMethods { public const int WM_HOTKEY = 0x0312; public const int WM_CLIPBOARDUPDATE = 0x031D; public const int SW_SHOWNORMAL = 1; public const int SW_RESTORE = 9; public const int VK_CONTROL = 0x11; public const int VK_SHIFT = 0x10; public const int VK_MENU = 0x12; public const int VK_LWIN = 0x5B; public const int VK_RWIN = 0x5C; public const int VK_V = 0x56; public const int KEYEVENTF_KEYUP = 0x0002; public const int INPUT_KEYBOARD = 1; [StructLayout(LayoutKind.Sequential)] public struct Input { public int Type; public InputUnion Data; public KeyboardInputData Keyboard { get { return Data.Keyboard; } } } [StructLayout(LayoutKind.Explicit)] public struct InputUnion { [FieldOffset(0)] public KeyboardInputData Keyboard; [FieldOffset(0)] public MouseInputData Mouse; } [StructLayout(LayoutKind.Sequential)] public struct KeyboardInputData { public ushort VirtualKey; public ushort ScanCode; public uint Flags; public uint Time; public UIntPtr ExtraInfo; } [StructLayout(LayoutKind.Sequential)] public struct MouseInputData { public int X; public int Y; public uint MouseData; public uint Flags; public uint Time; public UIntPtr ExtraInfo; } [Flags] public enum Modifiers : uint { None = 0, Alt = 0x0001, Control = 0x0002, Shift = 0x0004, Windows = 0x0008, NoRepeat = 0x4000 } [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] public static extern IntPtr GetClipboardOwner(); [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] public static extern bool IsWindow(IntPtr hWnd); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId); [DllImport("user32.dll", SetLastError = true)] public static extern bool RegisterHotKey(IntPtr hWnd, int id, Modifiers fsModifiers, Keys vk); [DllImport("user32.dll", SetLastError = true)] public static extern bool UnregisterHotKey(IntPtr hWnd, int id); [DllImport("user32.dll", SetLastError = true)] public static extern bool AddClipboardFormatListener(IntPtr hwnd); [DllImport("user32.dll", SetLastError = true)] public static extern bool RemoveClipboardFormatListener(IntPtr hwnd); [DllImport("user32.dll")] public static extern uint GetClipboardSequenceNumber(); [DllImport("user32.dll")] public static extern int GetMessageTime(); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern uint RegisterClipboardFormat(string lpszFormat); [DllImport("user32.dll")] public static extern bool IsClipboardFormatAvailable(uint format); [DllImport("user32.dll", SetLastError = true)] public static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("user32.dll", SetLastError = true)] public static extern bool CloseClipboard(); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetClipboardData(uint uFormat); [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr GlobalLock(IntPtr hMem); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool GlobalUnlock(IntPtr hMem); [DllImport("kernel32.dll", SetLastError = true)] public static extern UIntPtr GlobalSize(IntPtr hMem); [DllImport("user32.dll")] public static extern short GetAsyncKeyState(int vKey); [DllImport("user32.dll", SetLastError = true)] public static extern uint SendInput(uint inputCount, Input[] inputs, int inputSize); } }