syntax = "proto3"; option csharp_namespace = "WinIPC.Models"; enum CommandType { UNKNOWN_COMMAND_TYPE = 0; GET_WINDOWS_INFO = 1; GET_SCREENSHOT = 2; GET_PIXEL_COLOR = 3; INPUT_ACTION = 4; } message Point { int32 X = 1; int32 Y = 2; } message AreaSize { int32 width = 1; int32 height = 2; } message WindowInfo { int32 hwnd = 1; string title = 2; int32 pid = 3; int32 thread_id = 4; bool is_active = 5; Point cursor_position = 6; AreaSize content_size = 7; Point window_position = 8; AreaSize window_size = 9; } message WindowsRequest { repeated int32 hwnds = 1; } message WindowsResponse { repeated WindowInfo data = 1; } message Request { uint32 id = 1; CommandType type = 2; bytes payload = 15; } message Response { uint32 id = 1; bool success = 2; string message = 3; bytes payload = 15; } message ScreenshotRequest { int32 hwnd = 1; Point crop_position = 2; AreaSize crop_size = 3; } message ScreenshotResponse { AreaSize size = 1; bytes data = 2; } message PixelRequest { int32 hwnd = 1; Point pixel_position = 2; } message PixelResponse { uint32 rgb_color = 1; } enum InputType { UNKNOWN_INPUT_TYPE = 0; KEY_UP = 1; KEY_DOWN = 2; MOUSE_SCROLL = 3; MOUSE_MOVE_TO = 4; } message InputAction { InputType type = 1; uint32 delay_ms = 2; bytes payload = 15; } message ButtonInput { Button button = 1; } message ScrollInput { int32 offset = 1; } message MouseMoveInput { Point position = 1; } message InputRequest { int32 hwnd = 1; repeated InputAction actions = 2; } message InputResponse { int32 count = 1; } enum Button { UNKNOWN_BUTTON = 0; EXTENDED_KEY_FLAG = 32768; // 0x8000 MOUSE_EXTRA_FLAG = 128; // 0x0080 MOUSE_KEY_FLAG = 16384; // 0x4000 MOUSE_LEFT = 16386; // MOUSE_KEY_FLAG | 0x0002 MOUSE_RIGHT = 16392; // MOUSE_KEY_FLAG | 0x0008 MOUSE_MIDDLE = 16416; // MOUSE_KEY_FLAG | 0x0020 MOUSE_EXTRA1 = 16513; // MOUSE_KEY_FLAG | MOUSE_EXTRA_FLAG | 0x01 MOUSE_EXTRA2 = 16514; // MOUSE_KEY_FLAG | MOUSE_EXTRA_FLAG | 0x02 // --- Toggle Keys --- CAPS_LOCK = 20; // 0x14 NUM_LOCK = 144; // 0x90 SCROLL_LOCK = 145; // 0x91 // --- Main Control Keys --- BACKSPACE = 8; // 0x08 TAB = 9; // 0x09 ENTER = 13; // 0x0D PAUSE = 19; // 0x13 ESCAPE = 27; // 0x1B SPACE = 32; // 0x20 // --- Navigation and Editing Keys --- PAGE_UP = 32793; // EXTENDED_KEY_FLAG | 0x21 PAGE_DOWN = 32794; // EXTENDED_KEY_FLAG | 0x22 END = 32795; // EXTENDED_KEY_FLAG | 0x23 HOME = 32796; // EXTENDED_KEY_FLAG | 0x24 LEFT = 32797; // EXTENDED_KEY_FLAG | 0x25 UP = 32798; // EXTENDED_KEY_FLAG | 0x26 RIGHT = 32799; // EXTENDED_KEY_FLAG | 0x27 DOWN = 32800; // EXTENDED_KEY_FLAG | 0x28 PRINT_SCREEN = 32808; // EXTENDED_KEY_FLAG | 0x2C INSERT = 32813; // EXTENDED_KEY_FLAG | 0x2D DELETE = 32814; // EXTENDED_KEY_FLAG | 0x2E // --- Main Alphanumeric Keys --- KEY_0 = 48; // 0x30 KEY_1 = 49; // 0x31 KEY_2 = 50; // 0x32 KEY_3 = 51; // 0x33 KEY_4 = 52; // 0x34 KEY_5 = 53; // 0x35 KEY_6 = 54; // 0x36 KEY_7 = 55; // 0x37 KEY_8 = 56; // 0x38 KEY_9 = 57; // 0x39 KEY_A = 65; // 0x41 KEY_B = 66; // 0x42 KEY_C = 67; // 0x43 KEY_D = 68; // 0x44 KEY_E = 69; // 0x45 KEY_F = 70; // 0x46 KEY_G = 71; // 0x47 KEY_H = 72; // 0x48 KEY_I = 73; // 0x49 KEY_J = 74; // 0x4A KEY_K = 75; // 0x4B KEY_L = 76; // 0x4C KEY_M = 77; // 0x4D KEY_N = 78; // 0x4E KEY_O = 79; // 0x4F KEY_P = 80; // 0x50 KEY_Q = 81; // 0x51 KEY_R = 82; // 0x52 KEY_S = 83; // 0x53 KEY_T = 84; // 0x54 KEY_U = 85; // 0x55 KEY_V = 86; // 0x56 KEY_W = 87; // 0x57 KEY_X = 88; // 0x58 KEY_Y = 89; // 0x59 KEY_Z = 90; // 0x5A // --- Windows Keys --- L_WIN = 32859; // EXTENDED_KEY_FLAG | 0x5B R_WIN = 32860; // EXTENDED_KEY_FLAG | 0x5C APPS = 32861; // EXTENDED_KEY_FLAG | 0x5D // --- Numeric Keypad (NumPad) --- NUM_0 = 32864; // EXTENDED_KEY_FLAG | 0x60 NUM_1 = 32865; // EXTENDED_KEY_FLAG | 0x61 NUM_2 = 32866; // EXTENDED_KEY_FLAG | 0x62 NUM_3 = 32867; // EXTENDED_KEY_FLAG | 0x63 NUM_4 = 32868; // EXTENDED_KEY_FLAG | 0x64 NUM_5 = 32869; // EXTENDED_KEY_FLAG | 0x65 NUM_6 = 32870; // EXTENDED_KEY_FLAG | 0x66 NUM_7 = 32871; // EXTENDED_KEY_FLAG | 0x67 NUM_8 = 32872; // EXTENDED_KEY_FLAG | 0x68 NUM_9 = 32873; // EXTENDED_KEY_FLAG | 0x69 NUM_MUL = 106; // 0x6A NUM_ADD = 107; // 0x6B NUM_SUB = 109; // 0x6D NUM_DEC = 32878; // EXTENDED_KEY_FLAG | 0x6E NUM_DIV = 32879; // EXTENDED_KEY_FLAG | 0x6F NUM_ENTER = 32781; // EXTENDED_KEY_FLAG | ENTER // --- Function Keys --- F1 = 112; // 0x70 F2 = 113; // 0x71 F3 = 114; // 0x72 F4 = 115; // 0x73 F5 = 116; // 0x74 F6 = 117; // 0x75 F7 = 118; // 0x76 F8 = 119; // 0x77 F9 = 120; // 0x78 F10 = 121; // 0x79 F11 = 122; // 0x7A F12 = 123; // 0x7B // --- Modifier Keys --- L_SHIFT = 160; // 0xA0 R_SHIFT = 161; // 0xA1 L_CTRL = 162; // 0xA2 R_CTRL = 32875; // EXTENDED_KEY_FLAG | 0xA3 L_ALT = 164; // 0xA4 R_ALT = 32877; // EXTENDED_KEY_FLAG | 0xA5 // --- OEM Keys --- SUB = 189; // 0xBD ADD = 187; // 0xBB TILDE = 192; // 0xC0 L_BRACKET = 219; // 0xDB R_BRACKET = 221; // 0xDD COMMA = 188; // 0xBC PERIOD = 190; // 0xBE QUOTE = 222; // 0xDE COLON = 186; // 0xBA SOL = 191; // 0xBF B_SOL = 220; // 0xDC }