В том числе в MSDN описана структура INPUT_RECORD: Код (Text): typedef struct _INPUT_RECORD { WORD EventType; union { KEY_EVENT_RECORD KeyEvent; MOUSE_EVENT_RECORD MouseEvent; WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; MENU_EVENT_RECORD MenuEvent; FOCUS_EVENT_RECORD FocusEvent; } Event; } INPUT_RECORD; EventType может и имеет тип WORD, и значимая его часть располагается в двух байтах, но, видимо, для выравнивания членов перед объединением вставлены еще два байта. А где можно увидеть фактическое расположение членов для структур Windows? Я пока пользовался OllyDbg.
И посредством "cl /Fa /c ...", но тут приходится рассчитывать по смещениям при обращении к членам структуры.
cl -d1reportAllClassLayout /FAsc t.cpp >s Код (Text): class <unnamed-tag> size(2): +--- 0 | UnicodeChar 0 | AsciiChar +--- class _KEY_EVENT_RECORD size(16): +--- 0 | bKeyDown 4 | wRepeatCount 6 | wVirtualKeyCode 8 | wVirtualScanCode 10 | <unnamed-type-uChar> uChar 12 | dwControlKeyState +--- class _MOUSE_EVENT_RECORD size(16): +--- 0 | _COORD dwMousePosition 4 | dwButtonState 8 | dwControlKeyState 12 | dwEventFlags +--- class _WINDOW_BUFFER_SIZE_RECORD size(4): +--- 0 | _COORD dwSize +--- class _MENU_EVENT_RECORD size(4): +--- 0 | dwCommandId +--- class _FOCUS_EVENT_RECORD size(4): +--- 0 | bSetFocus +--- class <unnamed-tag> size(16): +--- 0 | _KEY_EVENT_RECORD KeyEvent 0 | _MOUSE_EVENT_RECORD MouseEvent 0 | _WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent 0 | _MENU_EVENT_RECORD MenuEvent 0 | _FOCUS_EVENT_RECORD FocusEvent +--- class _INPUT_RECORD size(20): +--- 0 | EventType | <alignment member> (size=2) 4 | <unnamed-type-Event> Event +---