using System;
using System.Runtime.InteropServices;
namespace Transformers2_Launcher
{
public static class Win32API
{
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool ReadProcessMemory(IntPtr hProcess, UInt32 lpBaseAddress, byte[] lpBuffer, UInt32 dwSize, ref UInt32 lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool WriteProcessMemory(IntPtr hProcess, UInt32 lpBaseAddress, byte[] lpBuffer, UInt32 dwSize, ref UInt32 lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, UInt32 dwSize, MemoryAllocType flAllocationType, MemoryPageProtect flProtect);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);
public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
public static extern uint MapVirtualKeyEx(uint uCode, uint uMapType, IntPtr dwhkl);
}
public static class Win32Define
{
//Mouse and Keyboard Hook
public const int WH_MOUSE_LL = 14;
public const int WH_KEYBOARD_LL = 13;
//Windows messages
public const UInt32 WM_COPYDATA = 0x004A;
public const UInt32 WM_KEYDOWN = 0x0100;
public const UInt32 WM_KEYUP = 0x0101;
public const UInt32 WM_MOUSEMOVE = 0x0200;
public const UInt32 WM_LBUTTONDOWN = 0x0201;
public const UInt32 WM_LBUTTONUP = 0x0202;
public const UInt32 WM_INPUT = 0x00FF;
public const UInt32 WM_RBUTTONDOWN = 0x0204;
public const UInt32 WM_RBUTTONUP = 0x0205;
public const UInt32 WM_MBUTTONDOWN = 0x0207;
public const UInt32 WM_MBUTTONUP = 0x0208;
public const UInt32 WM_MOUSEWHEEL = 0x020A;
public const UInt32 WM_SYSKEYDOWN = 0x0104;
public const uint MAPVK_VK_TO_VSC = 0x00;
public const uint MAPVK_VSC_TO_VK = 0x01;
public const uint MAPVK_VK_TO_CHAR = 0x02;
public const uint MAPVK_VSC_TO_VK_EX = 0x03;
public const uint MAPVK_VK_TO_VSC_EX = 0x04;
}
[Flags]
public enum MemoryAllocType
{
MEM_COMMIT = 0x1000,
MEM_RESERVE = 0x2000,
MEM_RESET = 0x8000,
MEM_RESET_UNDO = 0x1000000,
}
[Flags]
public enum MemoryPageProtect
{
PAGE_EXECUTE = 0x10,
PAGE_EXECUTE_READ = 0x20,
PAGE_EXECUTE_READWRITE = 0x40,
PAGE_EXECUTE_WRITECOPY = 0x80,
PAGE_NOACCESS = 0x01,
PAGE_READONLY = 0x02,
PAGE_READWRITE = 0x04,
PAGE_WRITECOPY = 0x08,
PAGE_TARGETS_INVALID = 0x40000000,
PAGE_TARGETS_NO_UPDATE = 0x40000000
}
public enum HardwareScanCode : byte
{
DIK_ESCAPE = 0x01,
DIK_1 = 0x02,
DIK_2 = 0x03,
DIK_3 = 0x04,
DIK_4 = 0x05,
DIK_5 = 0x06,
DIK_6 = 0x07,
DIK_7 = 0x08,
DIK_8 = 0x09,
DIK_9 = 0x0A,
DIK_0 = 0x0B,
DIK_MINUS = 0x0C,
DIK_EQUALS = 0x0D,
DIK_BACK = 0x0E,
DIK_TAB = 0x0F,
DIK_Q = 0x10,
DIK_W = 0x11,
DIK_E = 0x12,
DIK_R = 0x13,
DIK_T = 0x14,
DIK_Y = 0x15,
DIK_U = 0x16,
DIK_I = 0x17,
DIK_O = 0x18,
DIK_P = 0x19,
DIK_LBRACKET = 0x1A,
DIK_RBRACKET = 0x1B,
DIK_RETURN = 0x1C,
DIK_LCONTROL = 0x1D,
DIK_A = 0x1E,
DIK_S = 0x1F,
DIK_D = 0x20,
DIK_F = 0x21,
DIK_G = 0x22,
DIK_H = 0x23,
DIK_J = 0x24,
DIK_K = 0x25,
DIK_L = 0x26,
DIK_SEMICOLON = 0x27,
DIK_APOSTROPHE = 0x28,
DIK_GRAVE = 0x29,
DIK_LSHIFT = 0x2A,
DIK_BACKSLASH = 0x2B,
DIK_Z = 0x2C,
DIK_X = 0x2D,
DIK_C = 0x2E,
DIK_V = 0x2F,
DIK_B = 0x30,
DIK_N = 0x31,
DIK_M = 0x32,
DIK_COMMA = 0x33,
DIK_PERIOD = 0x34,
DIK_SLASH = 0x35,
DIK_RSHIFT = 0x36,
DIK_MULTIPLY = 0x37,
DIK_LMENU = 0x38,
DIK_SPACE = 0x39,
DIK_CAPITAL = 0x3A,
DIK_F1 = 0x3B,
DIK_F2 = 0x3C,
DIK_F3 = 0x3D,
DIK_F4 = 0x3E,
DIK_F5 = 0x3F,
DIK_F6 = 0x40,
DIK_F7 = 0x41,
DIK_F8 = 0x42,
DIK_F9 = 0x43,
DIK_F10 = 0x44,
DIK_NUMLOCK = 0x45,
DIK_SCROLL = 0x46,
DIK_NUMPAD7 = 0x47,
DIK_NUMPAD8 = 0x48,
DIK_NUMPAD9 = 0x49,
DIK_SUBTRACT = 0x4A,
DIK_NUMPAD4 = 0x4B,
DIK_NUMPAD5 = 0x4C,
DIK_NUMPAD6 = 0x4D,
DIK_ADD = 0x4E,
DIK_NUMPAD1 = 0x4F,
DIK_NUMPAD2 = 0x50,
DIK_NUMPAD3 = 0x51,
DIK_NUMPAD0 = 0x52,
DIK_DECIMAL = 0x53,
DIK_F11 = 0x57,
DIK_F12 = 0x58,
DIK_F13 = 0x64,
DIK_F14 = 0x65,
DIK_F15 = 0x66,
DIK_KANA = 0x70,
DIK_CONVERT = 0x79,
DIK_NOCONVERT = 0x7B,
DIK_YEN = 0x7D,
DIK_NUMPADEQUALS = 0x8D,
DIK_CIRCUMFLEX = 0x90,
DIK_AT = 0x91,
DIK_COLON = 0x92,
DIK_UNDERLINE = 0x93,
DIK_KANJI = 0x94,
DIK_STOP = 0x95,
DIK_AX = 0x96,
DIK_UNLABELED = 0x97,
DIK_NUMPADENTER = 0x9C,
DIK_RCONTROL = 0x9D,
DIK_NUMPADCOMMA = 0xB3,
DIK_DIVIDE = 0xB5,
DIK_SYSRQ = 0xB7,
DIK_RMENU = 0xB8,
DIK_HOME = 0xC7,
DIK_UP = 0xC8,
DIK_PRIOR = 0xC9,
DIK_LEFT = 0xCB,
DIK_RIGHT = 0xCD,
DIK_END = 0xCF,
DIK_DOWN = 0xD0,
DIK_NEXT = 0xD1,
DIK_INSERT = 0xD2,
DIK_DELETE = 0xD3,
DIK_LWIN = 0xDB,
DIK_RWIN = 0xDC,
DIK_APPS = 0xDD,
}
///
/// Contains information about a low-level keyboard input event.
///
[StructLayout(LayoutKind.Sequential)]
public struct KBDLLHOOKSTRUCT
{
///
/// A virtual-key code. The code must be a value in the range 1 to 254.
///
public int vkCode;
///
/// A hardware scan code for the key.
///
public HardwareScanCode scanCode;
///
/// The extended-key flag, event-injected flags, context code, and transition-state flag.
///
public int flags;
///
/// The time stamp for this message, equivalent to what GetMessageTime would return for this message.
///
public int time;
///
/// Additional information associated with the message.
///
public UIntPtr dwExtraInfo;
public override string ToString()
{
return string.Format("vkCode=0x{0:X}, scanCode=0x{1:X}, flags={2}, time={3}, dwextrainfo={4:X}",
vkCode, scanCode, flags, time, dwExtraInfo);
}
}
}