//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (2408)
//--------------------------------------------------------------------------------
pub const DIRECTINPUT_VERSION = @as(u32, 2048);
pub const JOY_HW_NONE = @as(u32, 0);
pub const JOY_HW_CUSTOM = @as(u32, 1);
pub const JOY_HW_2A_2B_GENERIC = @as(u32, 2);
pub const JOY_HW_2A_4B_GENERIC = @as(u32, 3);
pub const JOY_HW_2B_GAMEPAD = @as(u32, 4);
pub const JOY_HW_2B_FLIGHTYOKE = @as(u32, 5);
pub const JOY_HW_2B_FLIGHTYOKETHROTTLE = @as(u32, 6);
pub const JOY_HW_3A_2B_GENERIC = @as(u32, 7);
pub const JOY_HW_3A_4B_GENERIC = @as(u32, 8);
pub const JOY_HW_4B_GAMEPAD = @as(u32, 9);
pub const JOY_HW_4B_FLIGHTYOKE = @as(u32, 10);
pub const JOY_HW_4B_FLIGHTYOKETHROTTLE = @as(u32, 11);
pub const JOY_HW_TWO_2A_2B_WITH_Y = @as(u32, 12);
pub const JOY_HW_LASTENTRY = @as(u32, 13);
pub const JOY_ISCAL_XY = @as(i32, 1);
pub const JOY_ISCAL_Z = @as(i32, 2);
pub const JOY_ISCAL_R = @as(i32, 4);
pub const JOY_ISCAL_U = @as(i32, 8);
pub const JOY_ISCAL_V = @as(i32, 16);
pub const JOY_ISCAL_POV = @as(i32, 32);
pub const JOY_POV_NUMDIRS = @as(u32, 4);
pub const JOY_POVVAL_FORWARD = @as(u32, 0);
pub const JOY_POVVAL_BACKWARD = @as(u32, 1);
pub const JOY_POVVAL_LEFT = @as(u32, 2);
pub const JOY_POVVAL_RIGHT = @as(u32, 3);
pub const JOY_HWS_HASZ = @as(i32, 1);
pub const JOY_HWS_HASPOV = @as(i32, 2);
pub const JOY_HWS_POVISBUTTONCOMBOS = @as(i32, 4);
pub const JOY_HWS_POVISPOLL = @as(i32, 8);
pub const JOY_HWS_ISYOKE = @as(i32, 16);
pub const JOY_HWS_ISGAMEPAD = @as(i32, 32);
pub const JOY_HWS_ISCARCTRL = @as(i32, 64);
pub const JOY_HWS_XISJ1Y = @as(i32, 128);
pub const JOY_HWS_XISJ2X = @as(i32, 256);
pub const JOY_HWS_XISJ2Y = @as(i32, 512);
pub const JOY_HWS_YISJ1X = @as(i32, 1024);
pub const JOY_HWS_YISJ2X = @as(i32, 2048);
pub const JOY_HWS_YISJ2Y = @as(i32, 4096);
pub const JOY_HWS_ZISJ1X = @as(i32, 8192);
pub const JOY_HWS_ZISJ1Y = @as(i32, 16384);
pub const JOY_HWS_ZISJ2X = @as(i32, 32768);
pub const JOY_HWS_POVISJ1X = @as(i32, 65536);
pub const JOY_HWS_POVISJ1Y = @as(i32, 131072);
pub const JOY_HWS_POVISJ2X = @as(i32, 262144);
pub const JOY_HWS_HASR = @as(i32, 524288);
pub const JOY_HWS_RISJ1X = @as(i32, 1048576);
pub const JOY_HWS_RISJ1Y = @as(i32, 2097152);
pub const JOY_HWS_RISJ2Y = @as(i32, 4194304);
pub const JOY_HWS_HASU = @as(i32, 8388608);
pub const JOY_HWS_HASV = @as(i32, 16777216);
pub const JOY_US_HASRUDDER = @as(i32, 1);
pub const JOY_US_PRESENT = @as(i32, 2);
pub const JOY_US_ISOEM = @as(i32, 4);
pub const JOY_US_RESERVED = @as(i32, -2147483648);
pub const JOYTYPE_ZEROGAMEENUMOEMDATA = @as(i32, 1);
pub const JOYTYPE_NOAUTODETECTGAMEPORT = @as(i32, 2);
pub const JOYTYPE_NOHIDDIRECT = @as(i32, 4);
pub const JOYTYPE_ANALOGCOMPAT = @as(i32, 8);
pub const JOYTYPE_DEFAULTPROPSHEET = @as(i32, -2147483648);
pub const JOYTYPE_DEVICEHIDE = @as(i32, 65536);
pub const JOYTYPE_MOUSEHIDE = @as(i32, 131072);
pub const JOYTYPE_KEYBHIDE = @as(i32, 262144);
pub const JOYTYPE_GAMEHIDE = @as(i32, 524288);
pub const JOYTYPE_HIDEACTIVE = @as(i32, 1048576);
pub const JOYTYPE_INFOMASK = @as(i32, 14680064);
pub const JOYTYPE_INFODEFAULT = @as(i32, 0);
pub const JOYTYPE_INFOYYPEDALS = @as(i32, 2097152);
pub const JOYTYPE_INFOZYPEDALS = @as(i32, 4194304);
pub const JOYTYPE_INFOYRPEDALS = @as(i32, 6291456);
pub const JOYTYPE_INFOZRPEDALS = @as(i32, 8388608);
pub const JOYTYPE_INFOZISSLIDER = @as(i32, 2097152);
pub const JOYTYPE_INFOZISZ = @as(i32, 4194304);
pub const JOYTYPE_ENABLEINPUTREPORT = @as(i32, 16777216);
pub const MAX_JOYSTRING = @as(u32, 256);
pub const MAX_JOYSTICKOEMVXDNAME = @as(u32, 260);
pub const DITC_REGHWSETTINGS = @as(u32, 1);
pub const DITC_CLSIDCONFIG = @as(u32, 2);
pub const DITC_DISPLAYNAME = @as(u32, 4);
pub const DITC_CALLOUT = @as(u32, 8);
pub const DITC_HARDWAREID = @as(u32, 16);
pub const DITC_FLAGS1 = @as(u32, 32);
pub const DITC_FLAGS2 = @as(u32, 64);
pub const DITC_MAPFILE = @as(u32, 128);
pub const DIJC_GUIDINSTANCE = @as(u32, 1);
pub const DIJC_REGHWCONFIGTYPE = @as(u32, 2);
pub const DIJC_GAIN = @as(u32, 4);
pub const DIJC_CALLOUT = @as(u32, 8);
pub const DIJC_WDMGAMEPORT = @as(u32, 16);
pub const DIJU_USERVALUES = @as(u32, 1);
pub const DIJU_GLOBALDRIVER = @as(u32, 2);
pub const DIJU_GAMEPORTEMULATOR = @as(u32, 4);
pub const GUID_KeyboardClass = Guid.initString("4d36e96b-e325-11ce-bfc1-08002be10318");
pub const GUID_MediaClass = Guid.initString("4d36e96c-e325-11ce-bfc1-08002be10318");
pub const GUID_MouseClass = Guid.initString("4d36e96f-e325-11ce-bfc1-08002be10318");
pub const GUID_HIDClass = Guid.initString("745a17a0-74d3-11d0-b6fe-00a0c90f57da");
pub const DIMSGWP_NEWAPPSTART = @as(u32, 1);
pub const DIMSGWP_DX8APPSTART = @as(u32, 2);
pub const DIMSGWP_DX8MAPPERAPPSTART = @as(u32, 3);
pub const DIAPPIDFLAG_NOTIME = @as(u32, 1);
pub const DIAPPIDFLAG_NOSIZE = @as(u32, 2);
pub const DIERR_NOMOREITEMS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024637));
pub const DIERR_DRIVERFIRST = @as(i32, -2147220736);
pub const DIERR_DRIVERLAST = @as(i32, -2147220481);
pub const DIERR_INVALIDCLASSINSTALLER = @as(i32, -2147220480);
pub const DIERR_CANCELLED = @as(i32, -2147220479);
pub const DIERR_BADINF = @as(i32, -2147220478);
pub const DIDIFT_DELETE = @as(u32, 16777216);
pub const GUID_DEVINTERFACE_HID = Guid.initString("4d1e55b2-f16f-11cf-88cb-001111000030");
pub const GUID_HID_INTERFACE_NOTIFY = Guid.initString("2c4e2e88-25e6-4c33-882f-3d82e6073681");
pub const GUID_HID_INTERFACE_HIDPARSE = Guid.initString("f5c315a5-69ac-4bc2-9279-d0b64576f44b");
pub const DEVPKEY_DeviceInterface_HID_UsagePage = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 2 };
pub const DEVPKEY_DeviceInterface_HID_UsageId = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 3 };
pub const DEVPKEY_DeviceInterface_HID_IsReadOnly = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 4 };
pub const DEVPKEY_DeviceInterface_HID_VendorId = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 5 };
pub const DEVPKEY_DeviceInterface_HID_ProductId = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 6 };
pub const DEVPKEY_DeviceInterface_HID_VersionNumber = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 7 };
pub const DEVPKEY_DeviceInterface_HID_BackgroundAccess = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 8 };
pub const DEVPKEY_DeviceInterface_HID_WakeScreenOnInputCapable = PROPERTYKEY{ .fmtid = Guid.initString("cbf38310-4a17-4310-a1eb-247f0b67593b"), .pid = 9 };
pub const HID_REVISION = @as(u32, 1);
pub const HID_USAGE_PAGE_UNDEFINED = @as(u16, 0);
pub const HID_USAGE_PAGE_GENERIC = @as(u16, 1);
pub const HID_USAGE_PAGE_SIMULATION = @as(u16, 2);
pub const HID_USAGE_PAGE_VR = @as(u16, 3);
pub const HID_USAGE_PAGE_SPORT = @as(u16, 4);
pub const HID_USAGE_PAGE_GAME = @as(u16, 5);
pub const HID_USAGE_PAGE_GENERIC_DEVICE = @as(u16, 6);
pub const HID_USAGE_PAGE_KEYBOARD = @as(u16, 7);
pub const HID_USAGE_PAGE_LED = @as(u16, 8);
pub const HID_USAGE_PAGE_BUTTON = @as(u16, 9);
pub const HID_USAGE_PAGE_ORDINAL = @as(u16, 10);
pub const HID_USAGE_PAGE_TELEPHONY = @as(u16, 11);
pub const HID_USAGE_PAGE_CONSUMER = @as(u16, 12);
pub const HID_USAGE_PAGE_DIGITIZER = @as(u16, 13);
pub const HID_USAGE_PAGE_HAPTICS = @as(u16, 14);
pub const HID_USAGE_PAGE_PID = @as(u16, 15);
pub const HID_USAGE_PAGE_UNICODE = @as(u16, 16);
pub const HID_USAGE_PAGE_ALPHANUMERIC = @as(u16, 20);
pub const HID_USAGE_PAGE_SENSOR = @as(u16, 32);
pub const HID_USAGE_PAGE_LIGHTING_ILLUMINATION = @as(u16, 89);
pub const HID_USAGE_PAGE_BARCODE_SCANNER = @as(u16, 140);
pub const HID_USAGE_PAGE_WEIGHING_DEVICE = @as(u16, 141);
pub const HID_USAGE_PAGE_MAGNETIC_STRIPE_READER = @as(u16, 142);
pub const HID_USAGE_PAGE_CAMERA_CONTROL = @as(u16, 144);
pub const HID_USAGE_PAGE_ARCADE = @as(u16, 145);
pub const HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE = @as(u16, 65523);
pub const HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN = @as(u16, 65280);
pub const HID_USAGE_PAGE_VENDOR_DEFINED_END = @as(u16, 65535);
pub const HID_USAGE_GENERIC_POINTER = @as(u16, 1);
pub const HID_USAGE_GENERIC_MOUSE = @as(u16, 2);
pub const HID_USAGE_GENERIC_JOYSTICK = @as(u16, 4);
pub const HID_USAGE_GENERIC_GAMEPAD = @as(u16, 5);
pub const HID_USAGE_GENERIC_KEYBOARD = @as(u16, 6);
pub const HID_USAGE_GENERIC_KEYPAD = @as(u16, 7);
pub const HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER = @as(u16, 8);
pub const HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL = @as(u16, 9);
pub const HID_USAGE_GENERIC_PORTABLE_DEVICE_CONTROL = @as(u16, 13);
pub const HID_USAGE_GENERIC_INTERACTIVE_CONTROL = @as(u16, 14);
pub const HID_USAGE_GENERIC_COUNTED_BUFFER = @as(u16, 58);
pub const HID_USAGE_GENERIC_SYSTEM_CTL = @as(u16, 128);
pub const HID_USAGE_GENERIC_X = @as(u16, 48);
pub const HID_USAGE_GENERIC_Y = @as(u16, 49);
pub const HID_USAGE_GENERIC_Z = @as(u16, 50);
pub const HID_USAGE_GENERIC_RX = @as(u16, 51);
pub const HID_USAGE_GENERIC_RY = @as(u16, 52);
pub const HID_USAGE_GENERIC_RZ = @as(u16, 53);
pub const HID_USAGE_GENERIC_SLIDER = @as(u16, 54);
pub const HID_USAGE_GENERIC_DIAL = @as(u16, 55);
pub const HID_USAGE_GENERIC_WHEEL = @as(u16, 56);
pub const HID_USAGE_GENERIC_HATSWITCH = @as(u16, 57);
pub const HID_USAGE_GENERIC_BYTE_COUNT = @as(u16, 59);
pub const HID_USAGE_GENERIC_MOTION_WAKEUP = @as(u16, 60);
pub const HID_USAGE_GENERIC_START = @as(u16, 61);
pub const HID_USAGE_GENERIC_SELECT = @as(u16, 62);
pub const HID_USAGE_GENERIC_VX = @as(u16, 64);
pub const HID_USAGE_GENERIC_VY = @as(u16, 65);
pub const HID_USAGE_GENERIC_VZ = @as(u16, 66);
pub const HID_USAGE_GENERIC_VBRX = @as(u16, 67);
pub const HID_USAGE_GENERIC_VBRY = @as(u16, 68);
pub const HID_USAGE_GENERIC_VBRZ = @as(u16, 69);
pub const HID_USAGE_GENERIC_VNO = @as(u16, 70);
pub const HID_USAGE_GENERIC_FEATURE_NOTIFICATION = @as(u16, 71);
pub const HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER = @as(u16, 72);
pub const HID_USAGE_GENERIC_SYSCTL_POWER = @as(u16, 129);
pub const HID_USAGE_GENERIC_SYSCTL_SLEEP = @as(u16, 130);
pub const HID_USAGE_GENERIC_SYSCTL_WAKE = @as(u16, 131);
pub const HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU = @as(u16, 132);
pub const HID_USAGE_GENERIC_SYSCTL_MAIN_MENU = @as(u16, 133);
pub const HID_USAGE_GENERIC_SYSCTL_APP_MENU = @as(u16, 134);
pub const HID_USAGE_GENERIC_SYSCTL_HELP_MENU = @as(u16, 135);
pub const HID_USAGE_GENERIC_SYSCTL_MENU_EXIT = @as(u16, 136);
pub const HID_USAGE_GENERIC_SYSCTL_MENU_SELECT = @as(u16, 137);
pub const HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT = @as(u16, 138);
pub const HID_USAGE_GENERIC_SYSCTL_MENU_LEFT = @as(u16, 139);
pub const HID_USAGE_GENERIC_SYSCTL_MENU_UP = @as(u16, 140);
pub const HID_USAGE_GENERIC_SYSCTL_MENU_DOWN = @as(u16, 141);
pub const HID_USAGE_GENERIC_SYSCTL_COLD_RESTART = @as(u16, 142);
pub const HID_USAGE_GENERIC_SYSCTL_WARM_RESTART = @as(u16, 143);
pub const HID_USAGE_GENERIC_DPAD_UP = @as(u16, 144);
pub const HID_USAGE_GENERIC_DPAD_DOWN = @as(u16, 145);
pub const HID_USAGE_GENERIC_DPAD_RIGHT = @as(u16, 146);
pub const HID_USAGE_GENERIC_DPAD_LEFT = @as(u16, 147);
pub const HID_USAGE_GENERIC_SYSCTL_FN = @as(u16, 151);
pub const HID_USAGE_GENERIC_SYSCTL_FN_LOCK = @as(u16, 152);
pub const HID_USAGE_GENERIC_SYSCTL_FN_LOCK_INDICATOR = @as(u16, 153);
pub const HID_USAGE_GENERIC_SYSCTL_DISMISS_NOTIFICATION = @as(u16, 154);
pub const HID_USAGE_GENERIC_SYSCTL_DOCK = @as(u16, 160);
pub const HID_USAGE_GENERIC_SYSCTL_UNDOCK = @as(u16, 161);
pub const HID_USAGE_GENERIC_SYSCTL_SETUP = @as(u16, 162);
pub const HID_USAGE_GENERIC_SYSCTL_SYS_BREAK = @as(u16, 163);
pub const HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK = @as(u16, 164);
pub const HID_USAGE_GENERIC_SYSCTL_APP_BREAK = @as(u16, 165);
pub const HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK = @as(u16, 166);
pub const HID_USAGE_GENERIC_SYSCTL_MUTE = @as(u16, 167);
pub const HID_USAGE_GENERIC_SYSCTL_HIBERNATE = @as(u16, 168);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_INVERT = @as(u16, 176);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL = @as(u16, 177);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL = @as(u16, 178);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_BOTH = @as(u16, 179);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_DUAL = @as(u16, 180);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE = @as(u16, 181);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_SWAP = @as(u16, 182);
pub const HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE = @as(u16, 183);
pub const HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON = @as(u16, 201);
pub const HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH = @as(u16, 202);
pub const HID_USAGE_GENERIC_CONTROL_ENABLE = @as(u16, 203);
pub const HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE = @as(u16, 1);
pub const HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE = @as(u16, 2);
pub const HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE = @as(u16, 3);
pub const HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE = @as(u16, 4);
pub const HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE = @as(u16, 5);
pub const HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE = @as(u16, 6);
pub const HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE = @as(u16, 7);
pub const HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE = @as(u16, 8);
pub const HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE = @as(u16, 9);
pub const HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE = @as(u16, 10);
pub const HID_USAGE_SIMULATION_MAGIC_CARPET_SIMULATION_DEVICE = @as(u16, 11);
pub const HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE = @as(u16, 12);
pub const HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK = @as(u16, 32);
pub const HID_USAGE_SIMULATION_FLIGHT_STICK = @as(u16, 33);
pub const HID_USAGE_SIMULATION_CYCLIC_CONTROL = @as(u16, 34);
pub const HID_USAGE_SIMULATION_CYCLIC_TRIM = @as(u16, 35);
pub const HID_USAGE_SIMULATION_FLIGHT_YOKE = @as(u16, 36);
pub const HID_USAGE_SIMULATION_TRACK_CONTROL = @as(u16, 37);
pub const HID_USAGE_SIMULATION_AILERON = @as(u16, 176);
pub const HID_USAGE_SIMULATION_AILERON_TRIM = @as(u16, 177);
pub const HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL = @as(u16, 178);
pub const HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE = @as(u16, 179);
pub const HID_USAGE_SIMULATION_CHAFF_RELEASE = @as(u16, 180);
pub const HID_USAGE_SIMULATION_COLLECTIVE_CONTROL = @as(u16, 181);
pub const HID_USAGE_SIMULATION_DIVE_BRAKE = @as(u16, 182);
pub const HID_USAGE_SIMULATION_ELECTRONIC_COUNTERMEASURES = @as(u16, 183);
pub const HID_USAGE_SIMULATION_ELEVATOR = @as(u16, 184);
pub const HID_USAGE_SIMULATION_ELEVATOR_TRIM = @as(u16, 185);
pub const HID_USAGE_SIMULATION_RUDDER = @as(u16, 186);
pub const HID_USAGE_SIMULATION_THROTTLE = @as(u16, 187);
pub const HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS = @as(u16, 188);
pub const HID_USAGE_SIMULATION_FLARE_RELEASE = @as(u16, 189);
pub const HID_USAGE_SIMULATION_LANDING_GEAR = @as(u16, 190);
pub const HID_USAGE_SIMULATION_TOE_BRAKE = @as(u16, 191);
pub const HID_USAGE_SIMULATION_TRIGGER = @as(u16, 192);
pub const HID_USAGE_SIMULATION_WEAPONS_ARM = @as(u16, 193);
pub const HID_USAGE_SIMULATION_WEAPONS_SELECT = @as(u16, 194);
pub const HID_USAGE_SIMULATION_WING_FLAPS = @as(u16, 195);
pub const HID_USAGE_SIMULATION_ACCELLERATOR = @as(u16, 196);
pub const HID_USAGE_SIMULATION_BRAKE = @as(u16, 197);
pub const HID_USAGE_SIMULATION_CLUTCH = @as(u16, 198);
pub const HID_USAGE_SIMULATION_SHIFTER = @as(u16, 199);
pub const HID_USAGE_SIMULATION_STEERING = @as(u16, 200);
pub const HID_USAGE_SIMULATION_TURRET_DIRECTION = @as(u16, 201);
pub const HID_USAGE_SIMULATION_BARREL_ELEVATION = @as(u16, 202);
pub const HID_USAGE_SIMULATION_DIVE_PLANE = @as(u16, 203);
pub const HID_USAGE_SIMULATION_BALLAST = @as(u16, 204);
pub const HID_USAGE_SIMULATION_BICYCLE_CRANK = @as(u16, 205);
pub const HID_USAGE_SIMULATION_HANDLE_BARS = @as(u16, 206);
pub const HID_USAGE_SIMULATION_FRONT_BRAKE = @as(u16, 207);
pub const HID_USAGE_SIMULATION_REAR_BRAKE = @as(u16, 208);
pub const HID_USAGE_VR_BELT = @as(u16, 1);
pub const HID_USAGE_VR_BODY_SUIT = @as(u16, 2);
pub const HID_USAGE_VR_FLEXOR = @as(u16, 3);
pub const HID_USAGE_VR_GLOVE = @as(u16, 4);
pub const HID_USAGE_VR_HEAD_TRACKER = @as(u16, 5);
pub const HID_USAGE_VR_HEAD_MOUNTED_DISPLAY = @as(u16, 6);
pub const HID_USAGE_VR_HAND_TRACKER = @as(u16, 7);
pub const HID_USAGE_VR_OCULOMETER = @as(u16, 8);
pub const HID_USAGE_VR_VEST = @as(u16, 9);
pub const HID_USAGE_VR_ANIMATRONIC_DEVICE = @as(u16, 10);
pub const HID_USAGE_VR_STEREO_ENABLE = @as(u16, 32);
pub const HID_USAGE_VR_DISPLAY_ENABLE = @as(u16, 33);
pub const HID_USAGE_SPORT_BASEBALL_BAT = @as(u16, 1);
pub const HID_USAGE_SPORT_GOLF_CLUB = @as(u16, 2);
pub const HID_USAGE_SPORT_ROWING_MACHINE = @as(u16, 3);
pub const HID_USAGE_SPORT_TREADMILL = @as(u16, 4);
pub const HID_USAGE_SPORT_STICK_TYPE = @as(u16, 56);
pub const HID_USAGE_SPORT_OAR = @as(u16, 48);
pub const HID_USAGE_SPORT_SLOPE = @as(u16, 49);
pub const HID_USAGE_SPORT_RATE = @as(u16, 50);
pub const HID_USAGE_SPORT_STICK_SPEED = @as(u16, 51);
pub const HID_USAGE_SPORT_STICK_FACE_ANGLE = @as(u16, 52);
pub const HID_USAGE_SPORT_HEEL_TOE = @as(u16, 53);
pub const HID_USAGE_SPORT_FOLLOW_THROUGH = @as(u16, 54);
pub const HID_USAGE_SPORT_TEMPO = @as(u16, 55);
pub const HID_USAGE_SPORT_HEIGHT = @as(u16, 57);
pub const HID_USAGE_SPORT_PUTTER = @as(u16, 80);
pub const HID_USAGE_SPORT_1_IRON = @as(u16, 81);
pub const HID_USAGE_SPORT_2_IRON = @as(u16, 82);
pub const HID_USAGE_SPORT_3_IRON = @as(u16, 83);
pub const HID_USAGE_SPORT_4_IRON = @as(u16, 84);
pub const HID_USAGE_SPORT_5_IRON = @as(u16, 85);
pub const HID_USAGE_SPORT_6_IRON = @as(u16, 86);
pub const HID_USAGE_SPORT_7_IRON = @as(u16, 87);
pub const HID_USAGE_SPORT_8_IRON = @as(u16, 88);
pub const HID_USAGE_SPORT_9_IRON = @as(u16, 89);
pub const HID_USAGE_SPORT_10_IRON = @as(u16, 90);
pub const HID_USAGE_SPORT_11_IRON = @as(u16, 91);
pub const HID_USAGE_SPORT_SAND_WEDGE = @as(u16, 92);
pub const HID_USAGE_SPORT_LOFT_WEDGE = @as(u16, 93);
pub const HID_USAGE_SPORT_POWER_WEDGE = @as(u16, 94);
pub const HID_USAGE_SPORT_1_WOOD = @as(u16, 95);
pub const HID_USAGE_SPORT_3_WOOD = @as(u16, 96);
pub const HID_USAGE_SPORT_5_WOOD = @as(u16, 97);
pub const HID_USAGE_SPORT_7_WOOD = @as(u16, 98);
pub const HID_USAGE_SPORT_9_WOOD = @as(u16, 99);
pub const HID_USAGE_GAME_3D_GAME_CONTROLLER = @as(u16, 1);
pub const HID_USAGE_GAME_PINBALL_DEVICE = @as(u16, 2);
pub const HID_USAGE_GAME_GUN_DEVICE = @as(u16, 3);
pub const HID_USAGE_GAME_POINT_OF_VIEW = @as(u16, 32);
pub const HID_USAGE_GAME_GUN_SELECTOR = @as(u16, 50);
pub const HID_USAGE_GAME_GAMEPAD_FIRE_JUMP = @as(u16, 55);
pub const HID_USAGE_GAME_GAMEPAD_TRIGGER = @as(u16, 57);
pub const HID_USAGE_GAME_TURN_RIGHT_LEFT = @as(u16, 33);
pub const HID_USAGE_GAME_PITCH_FORWARD_BACK = @as(u16, 34);
pub const HID_USAGE_GAME_ROLL_RIGHT_LEFT = @as(u16, 35);
pub const HID_USAGE_GAME_MOVE_RIGHT_LEFT = @as(u16, 36);
pub const HID_USAGE_GAME_MOVE_FORWARD_BACK = @as(u16, 37);
pub const HID_USAGE_GAME_MOVE_UP_DOWN = @as(u16, 38);
pub const HID_USAGE_GAME_LEAN_RIGHT_LEFT = @as(u16, 39);
pub const HID_USAGE_GAME_LEAN_FORWARD_BACK = @as(u16, 40);
pub const HID_USAGE_GAME_POV_HEIGHT = @as(u16, 41);
pub const HID_USAGE_GAME_FLIPPER = @as(u16, 42);
pub const HID_USAGE_GAME_SECONDARY_FLIPPER = @as(u16, 43);
pub const HID_USAGE_GAME_BUMP = @as(u16, 44);
pub const HID_USAGE_GAME_NEW_GAME = @as(u16, 45);
pub const HID_USAGE_GAME_SHOOT_BALL = @as(u16, 46);
pub const HID_USAGE_GAME_PLAYER = @as(u16, 47);
pub const HID_USAGE_GAME_GUN_BOLT = @as(u16, 48);
pub const HID_USAGE_GAME_GUN_CLIP = @as(u16, 49);
pub const HID_USAGE_GAME_GUN_SINGLE_SHOT = @as(u16, 51);
pub const HID_USAGE_GAME_GUN_BURST = @as(u16, 52);
pub const HID_USAGE_GAME_GUN_AUTOMATIC = @as(u16, 53);
pub const HID_USAGE_GAME_GUN_SAFETY = @as(u16, 54);
pub const HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH = @as(u16, 32);
pub const HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL = @as(u16, 33);
pub const HID_USAGE_GENERIC_DEVICE_WIRELESS_ID = @as(u16, 34);
pub const HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL = @as(u16, 35);
pub const HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ENTERED = @as(u16, 36);
pub const HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED = @as(u16, 37);
pub const HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED = @as(u16, 38);
pub const HID_USAGE_KEYBOARD_NOEVENT = @as(u16, 0);
pub const HID_USAGE_KEYBOARD_ROLLOVER = @as(u16, 1);
pub const HID_USAGE_KEYBOARD_POSTFAIL = @as(u16, 2);
pub const HID_USAGE_KEYBOARD_UNDEFINED = @as(u16, 3);
pub const HID_USAGE_KEYBOARD_aA = @as(u16, 4);
pub const HID_USAGE_KEYBOARD_zZ = @as(u16, 29);
pub const HID_USAGE_KEYBOARD_ONE = @as(u16, 30);
pub const HID_USAGE_KEYBOARD_ZERO = @as(u16, 39);
pub const HID_USAGE_KEYBOARD_LCTRL = @as(u16, 224);
pub const HID_USAGE_KEYBOARD_LSHFT = @as(u16, 225);
pub const HID_USAGE_KEYBOARD_LALT = @as(u16, 226);
pub const HID_USAGE_KEYBOARD_LGUI = @as(u16, 227);
pub const HID_USAGE_KEYBOARD_RCTRL = @as(u16, 228);
pub const HID_USAGE_KEYBOARD_RSHFT = @as(u16, 229);
pub const HID_USAGE_KEYBOARD_RALT = @as(u16, 230);
pub const HID_USAGE_KEYBOARD_RGUI = @as(u16, 231);
pub const HID_USAGE_KEYBOARD_SCROLL_LOCK = @as(u16, 71);
pub const HID_USAGE_KEYBOARD_NUM_LOCK = @as(u16, 83);
pub const HID_USAGE_KEYBOARD_CAPS_LOCK = @as(u16, 57);
pub const HID_USAGE_KEYBOARD_F1 = @as(u16, 58);
pub const HID_USAGE_KEYBOARD_F2 = @as(u16, 59);
pub const HID_USAGE_KEYBOARD_F3 = @as(u16, 60);
pub const HID_USAGE_KEYBOARD_F4 = @as(u16, 61);
pub const HID_USAGE_KEYBOARD_F5 = @as(u16, 62);
pub const HID_USAGE_KEYBOARD_F6 = @as(u16, 63);
pub const HID_USAGE_KEYBOARD_F7 = @as(u16, 64);
pub const HID_USAGE_KEYBOARD_F8 = @as(u16, 65);
pub const HID_USAGE_KEYBOARD_F9 = @as(u16, 66);
pub const HID_USAGE_KEYBOARD_F10 = @as(u16, 67);
pub const HID_USAGE_KEYBOARD_F11 = @as(u16, 68);
pub const HID_USAGE_KEYBOARD_F12 = @as(u16, 69);
pub const HID_USAGE_KEYBOARD_F13 = @as(u16, 104);
pub const HID_USAGE_KEYBOARD_F14 = @as(u16, 105);
pub const HID_USAGE_KEYBOARD_F15 = @as(u16, 106);
pub const HID_USAGE_KEYBOARD_F16 = @as(u16, 107);
pub const HID_USAGE_KEYBOARD_F17 = @as(u16, 108);
pub const HID_USAGE_KEYBOARD_F18 = @as(u16, 109);
pub const HID_USAGE_KEYBOARD_F19 = @as(u16, 110);
pub const HID_USAGE_KEYBOARD_F20 = @as(u16, 111);
pub const HID_USAGE_KEYBOARD_F21 = @as(u16, 112);
pub const HID_USAGE_KEYBOARD_F22 = @as(u16, 113);
pub const HID_USAGE_KEYBOARD_F23 = @as(u16, 114);
pub const HID_USAGE_KEYBOARD_F24 = @as(u16, 115);
pub const HID_USAGE_KEYBOARD_RETURN = @as(u16, 40);
pub const HID_USAGE_KEYBOARD_ESCAPE = @as(u16, 41);
pub const HID_USAGE_KEYBOARD_DELETE = @as(u16, 42);
pub const HID_USAGE_KEYBOARD_PRINT_SCREEN = @as(u16, 70);
pub const HID_USAGE_KEYBOARD_DELETE_FORWARD = @as(u16, 76);
pub const HID_USAGE_LED_NUM_LOCK = @as(u16, 1);
pub const HID_USAGE_LED_CAPS_LOCK = @as(u16, 2);
pub const HID_USAGE_LED_SCROLL_LOCK = @as(u16, 3);
pub const HID_USAGE_LED_COMPOSE = @as(u16, 4);
pub const HID_USAGE_LED_KANA = @as(u16, 5);
pub const HID_USAGE_LED_POWER = @as(u16, 6);
pub const HID_USAGE_LED_SHIFT = @as(u16, 7);
pub const HID_USAGE_LED_DO_NOT_DISTURB = @as(u16, 8);
pub const HID_USAGE_LED_MUTE = @as(u16, 9);
pub const HID_USAGE_LED_TONE_ENABLE = @as(u16, 10);
pub const HID_USAGE_LED_HIGH_CUT_FILTER = @as(u16, 11);
pub const HID_USAGE_LED_LOW_CUT_FILTER = @as(u16, 12);
pub const HID_USAGE_LED_EQUALIZER_ENABLE = @as(u16, 13);
pub const HID_USAGE_LED_SOUND_FIELD_ON = @as(u16, 14);
pub const HID_USAGE_LED_SURROUND_FIELD_ON = @as(u16, 15);
pub const HID_USAGE_LED_REPEAT = @as(u16, 16);
pub const HID_USAGE_LED_STEREO = @as(u16, 17);
pub const HID_USAGE_LED_SAMPLING_RATE_DETECT = @as(u16, 18);
pub const HID_USAGE_LED_SPINNING = @as(u16, 19);
pub const HID_USAGE_LED_CAV = @as(u16, 20);
pub const HID_USAGE_LED_CLV = @as(u16, 21);
pub const HID_USAGE_LED_RECORDING_FORMAT_DET = @as(u16, 22);
pub const HID_USAGE_LED_OFF_HOOK = @as(u16, 23);
pub const HID_USAGE_LED_RING = @as(u16, 24);
pub const HID_USAGE_LED_MESSAGE_WAITING = @as(u16, 25);
pub const HID_USAGE_LED_DATA_MODE = @as(u16, 26);
pub const HID_USAGE_LED_BATTERY_OPERATION = @as(u16, 27);
pub const HID_USAGE_LED_BATTERY_OK = @as(u16, 28);
pub const HID_USAGE_LED_BATTERY_LOW = @as(u16, 29);
pub const HID_USAGE_LED_SPEAKER = @as(u16, 30);
pub const HID_USAGE_LED_HEAD_SET = @as(u16, 31);
pub const HID_USAGE_LED_HOLD = @as(u16, 32);
pub const HID_USAGE_LED_MICROPHONE = @as(u16, 33);
pub const HID_USAGE_LED_COVERAGE = @as(u16, 34);
pub const HID_USAGE_LED_NIGHT_MODE = @as(u16, 35);
pub const HID_USAGE_LED_SEND_CALLS = @as(u16, 36);
pub const HID_USAGE_LED_CALL_PICKUP = @as(u16, 37);
pub const HID_USAGE_LED_CONFERENCE = @as(u16, 38);
pub const HID_USAGE_LED_STAND_BY = @as(u16, 39);
pub const HID_USAGE_LED_CAMERA_ON = @as(u16, 40);
pub const HID_USAGE_LED_CAMERA_OFF = @as(u16, 41);
pub const HID_USAGE_LED_ON_LINE = @as(u16, 42);
pub const HID_USAGE_LED_OFF_LINE = @as(u16, 43);
pub const HID_USAGE_LED_BUSY = @as(u16, 44);
pub const HID_USAGE_LED_READY = @as(u16, 45);
pub const HID_USAGE_LED_PAPER_OUT = @as(u16, 46);
pub const HID_USAGE_LED_PAPER_JAM = @as(u16, 47);
pub const HID_USAGE_LED_REMOTE = @as(u16, 48);
pub const HID_USAGE_LED_FORWARD = @as(u16, 49);
pub const HID_USAGE_LED_REVERSE = @as(u16, 50);
pub const HID_USAGE_LED_STOP = @as(u16, 51);
pub const HID_USAGE_LED_REWIND = @as(u16, 52);
pub const HID_USAGE_LED_FAST_FORWARD = @as(u16, 53);
pub const HID_USAGE_LED_PLAY = @as(u16, 54);
pub const HID_USAGE_LED_PAUSE = @as(u16, 55);
pub const HID_USAGE_LED_RECORD = @as(u16, 56);
pub const HID_USAGE_LED_ERROR = @as(u16, 57);
pub const HID_USAGE_LED_SELECTED_INDICATOR = @as(u16, 58);
pub const HID_USAGE_LED_IN_USE_INDICATOR = @as(u16, 59);
pub const HID_USAGE_LED_MULTI_MODE_INDICATOR = @as(u16, 60);
pub const HID_USAGE_LED_INDICATOR_ON = @as(u16, 61);
pub const HID_USAGE_LED_INDICATOR_FLASH = @as(u16, 62);
pub const HID_USAGE_LED_INDICATOR_SLOW_BLINK = @as(u16, 63);
pub const HID_USAGE_LED_INDICATOR_FAST_BLINK = @as(u16, 64);
pub const HID_USAGE_LED_INDICATOR_OFF = @as(u16, 65);
pub const HID_USAGE_LED_FLASH_ON_TIME = @as(u16, 66);
pub const HID_USAGE_LED_SLOW_BLINK_ON_TIME = @as(u16, 67);
pub const HID_USAGE_LED_SLOW_BLINK_OFF_TIME = @as(u16, 68);
pub const HID_USAGE_LED_FAST_BLINK_ON_TIME = @as(u16, 69);
pub const HID_USAGE_LED_FAST_BLINK_OFF_TIME = @as(u16, 70);
pub const HID_USAGE_LED_INDICATOR_COLOR = @as(u16, 71);
pub const HID_USAGE_LED_RED = @as(u16, 72);
pub const HID_USAGE_LED_GREEN = @as(u16, 73);
pub const HID_USAGE_LED_AMBER = @as(u16, 74);
pub const HID_USAGE_LED_GENERIC_INDICATOR = @as(u16, 75);
pub const HID_USAGE_LED_SYSTEM_SUSPEND = @as(u16, 76);
pub const HID_USAGE_LED_EXTERNAL_POWER = @as(u16, 77);
pub const HID_USAGE_TELEPHONY_PHONE = @as(u16, 1);
pub const HID_USAGE_TELEPHONY_ANSWERING_MACHINE = @as(u16, 2);
pub const HID_USAGE_TELEPHONY_MESSAGE_CONTROLS = @as(u16, 3);
pub const HID_USAGE_TELEPHONY_HANDSET = @as(u16, 4);
pub const HID_USAGE_TELEPHONY_HEADSET = @as(u16, 5);
pub const HID_USAGE_TELEPHONY_KEYPAD = @as(u16, 6);
pub const HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON = @as(u16, 7);
pub const HID_USAGE_TELEPHONY_REDIAL = @as(u16, 36);
pub const HID_USAGE_TELEPHONY_TRANSFER = @as(u16, 37);
pub const HID_USAGE_TELEPHONY_DROP = @as(u16, 38);
pub const HID_USAGE_TELEPHONY_LINE = @as(u16, 42);
pub const HID_USAGE_TELEPHONY_RING_ENABLE = @as(u16, 45);
pub const HID_USAGE_TELEPHONY_SEND = @as(u16, 49);
pub const HID_USAGE_TELEPHONY_KEYPAD_0 = @as(u16, 176);
pub const HID_USAGE_TELEPHONY_KEYPAD_D = @as(u16, 191);
pub const HID_USAGE_TELEPHONY_HOST_AVAILABLE = @as(u16, 241);
pub const HID_USAGE_CONSUMERCTRL = @as(u16, 1);
pub const HID_USAGE_CONSUMER_CHANNEL_INCREMENT = @as(u16, 156);
pub const HID_USAGE_CONSUMER_CHANNEL_DECREMENT = @as(u16, 157);
pub const HID_USAGE_CONSUMER_PLAY = @as(u16, 176);
pub const HID_USAGE_CONSUMER_PAUSE = @as(u16, 177);
pub const HID_USAGE_CONSUMER_RECORD = @as(u16, 178);
pub const HID_USAGE_CONSUMER_FAST_FORWARD = @as(u16, 179);
pub const HID_USAGE_CONSUMER_REWIND = @as(u16, 180);
pub const HID_USAGE_CONSUMER_SCAN_NEXT_TRACK = @as(u16, 181);
pub const HID_USAGE_CONSUMER_SCAN_PREV_TRACK = @as(u16, 182);
pub const HID_USAGE_CONSUMER_STOP = @as(u16, 183);
pub const HID_USAGE_CONSUMER_PLAY_PAUSE = @as(u16, 205);
pub const HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR = @as(u16, 208);
pub const HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD = @as(u16, 209);
pub const HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP = @as(u16, 210);
pub const HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT = @as(u16, 211);
pub const HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR = @as(u16, 212);
pub const HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_MICROPHONE = @as(u16, 213);
pub const HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA = @as(u16, 214);
pub const HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST = @as(u16, 215);
pub const HID_USAGE_CONSUMER_VOLUME = @as(u16, 224);
pub const HID_USAGE_CONSUMER_BALANCE = @as(u16, 225);
pub const HID_USAGE_CONSUMER_MUTE = @as(u16, 226);
pub const HID_USAGE_CONSUMER_BASS = @as(u16, 227);
pub const HID_USAGE_CONSUMER_TREBLE = @as(u16, 228);
pub const HID_USAGE_CONSUMER_BASS_BOOST = @as(u16, 229);
pub const HID_USAGE_CONSUMER_SURROUND_MODE = @as(u16, 230);
pub const HID_USAGE_CONSUMER_LOUDNESS = @as(u16, 231);
pub const HID_USAGE_CONSUMER_MPX = @as(u16, 232);
pub const HID_USAGE_CONSUMER_VOLUME_INCREMENT = @as(u16, 233);
pub const HID_USAGE_CONSUMER_VOLUME_DECREMENT = @as(u16, 234);
pub const HID_USAGE_CONSUMER_BASS_INCREMENT = @as(u16, 338);
pub const HID_USAGE_CONSUMER_BASS_DECREMENT = @as(u16, 339);
pub const HID_USAGE_CONSUMER_TREBLE_INCREMENT = @as(u16, 340);
pub const HID_USAGE_CONSUMER_TREBLE_DECREMENT = @as(u16, 341);
pub const HID_USAGE_CONSUMER_AL_CONFIGURATION = @as(u16, 387);
pub const HID_USAGE_CONSUMER_AL_EMAIL = @as(u16, 394);
pub const HID_USAGE_CONSUMER_AL_CALCULATOR = @as(u16, 402);
pub const HID_USAGE_CONSUMER_AL_BROWSER = @as(u16, 404);
pub const HID_USAGE_CONSUMER_AL_SEARCH = @as(u16, 454);
pub const HID_USAGE_CONSUMER_AC_SEARCH = @as(u16, 545);
pub const HID_USAGE_CONSUMER_AC_GOTO = @as(u16, 546);
pub const HID_USAGE_CONSUMER_AC_HOME = @as(u16, 547);
pub const HID_USAGE_CONSUMER_AC_BACK = @as(u16, 548);
pub const HID_USAGE_CONSUMER_AC_FORWARD = @as(u16, 549);
pub const HID_USAGE_CONSUMER_AC_STOP = @as(u16, 550);
pub const HID_USAGE_CONSUMER_AC_REFRESH = @as(u16, 551);
pub const HID_USAGE_CONSUMER_AC_PREVIOUS = @as(u16, 552);
pub const HID_USAGE_CONSUMER_AC_NEXT = @as(u16, 553);
pub const HID_USAGE_CONSUMER_AC_BOOKMARKS = @as(u16, 554);
pub const HID_USAGE_CONSUMER_AC_PAN = @as(u16, 568);
pub const HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION = @as(u16, 704);
pub const HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR = @as(u16, 705);
pub const HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE = @as(u16, 706);
pub const HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT = @as(u16, 707);
pub const HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT = @as(u16, 708);
pub const HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX = @as(u16, 709);
pub const HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS = @as(u16, 710);
pub const HID_USAGE_DIGITIZER_DIGITIZER = @as(u16, 1);
pub const HID_USAGE_DIGITIZER_PEN = @as(u16, 2);
pub const HID_USAGE_DIGITIZER_LIGHT_PEN = @as(u16, 3);
pub const HID_USAGE_DIGITIZER_TOUCH_SCREEN = @as(u16, 4);
pub const HID_USAGE_DIGITIZER_TOUCH_PAD = @as(u16, 5);
pub const HID_USAGE_DIGITIZER_WHITE_BOARD = @as(u16, 6);
pub const HID_USAGE_DIGITIZER_COORD_MEASURING = @as(u16, 7);
pub const HID_USAGE_DIGITIZER_3D_DIGITIZER = @as(u16, 8);
pub const HID_USAGE_DIGITIZER_STEREO_PLOTTER = @as(u16, 9);
pub const HID_USAGE_DIGITIZER_ARTICULATED_ARM = @as(u16, 10);
pub const HID_USAGE_DIGITIZER_ARMATURE = @as(u16, 11);
pub const HID_USAGE_DIGITIZER_MULTI_POINT = @as(u16, 12);
pub const HID_USAGE_DIGITIZER_FREE_SPACE_WAND = @as(u16, 13);
pub const HID_USAGE_DIGITIZER_HEAT_MAP = @as(u16, 15);
pub const HID_USAGE_DIGITIZER_STYLUS = @as(u16, 32);
pub const HID_USAGE_DIGITIZER_PUCK = @as(u16, 33);
pub const HID_USAGE_DIGITIZER_FINGER = @as(u16, 34);
pub const HID_USAGE_DIGITIZER_TABLET_FUNC_KEYS = @as(u16, 57);
pub const HID_USAGE_DIGITIZER_PROG_CHANGE_KEYS = @as(u16, 58);
pub const HID_USAGE_DIGITIZER_TIP_PRESSURE = @as(u16, 48);
pub const HID_USAGE_DIGITIZER_BARREL_PRESSURE = @as(u16, 49);
pub const HID_USAGE_DIGITIZER_IN_RANGE = @as(u16, 50);
pub const HID_USAGE_DIGITIZER_TOUCH = @as(u16, 51);
pub const HID_USAGE_DIGITIZER_UNTOUCH = @as(u16, 52);
pub const HID_USAGE_DIGITIZER_TAP = @as(u16, 53);
pub const HID_USAGE_DIGITIZER_QUALITY = @as(u16, 54);
pub const HID_USAGE_DIGITIZER_DATA_VALID = @as(u16, 55);
pub const HID_USAGE_DIGITIZER_TRANSDUCER_INDEX = @as(u16, 56);
pub const HID_USAGE_DIGITIZER_BATTERY_STRENGTH = @as(u16, 59);
pub const HID_USAGE_DIGITIZER_INVERT = @as(u16, 60);
pub const HID_USAGE_DIGITIZER_X_TILT = @as(u16, 61);
pub const HID_USAGE_DIGITIZER_Y_TILT = @as(u16, 62);
pub const HID_USAGE_DIGITIZER_AZIMUTH = @as(u16, 63);
pub const HID_USAGE_DIGITIZER_ALTITUDE = @as(u16, 64);
pub const HID_USAGE_DIGITIZER_TWIST = @as(u16, 65);
pub const HID_USAGE_DIGITIZER_TIP_SWITCH = @as(u16, 66);
pub const HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH = @as(u16, 67);
pub const HID_USAGE_DIGITIZER_BARREL_SWITCH = @as(u16, 68);
pub const HID_USAGE_DIGITIZER_ERASER = @as(u16, 69);
pub const HID_USAGE_DIGITIZER_TABLET_PICK = @as(u16, 70);
pub const HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL = @as(u16, 91);
pub const HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VENDOR_ID = @as(u16, 106);
pub const HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VERSION = @as(u16, 107);
pub const HID_USAGE_DIGITIZER_HEAT_MAP_FRAME_DATA = @as(u16, 108);
pub const HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR = @as(u16, 145);
pub const HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT = @as(u16, 146);
pub const HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED = @as(u16, 162);
pub const HID_USAGE_HAPTICS_SIMPLE_CONTROLLER = @as(u16, 1);
pub const HID_USAGE_HAPTICS_WAVEFORM_LIST = @as(u16, 16);
pub const HID_USAGE_HAPTICS_DURATION_LIST = @as(u16, 17);
pub const HID_USAGE_HAPTICS_AUTO_TRIGGER = @as(u16, 32);
pub const HID_USAGE_HAPTICS_MANUAL_TRIGGER = @as(u16, 33);
pub const HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL = @as(u16, 34);
pub const HID_USAGE_HAPTICS_INTENSITY = @as(u16, 35);
pub const HID_USAGE_HAPTICS_REPEAT_COUNT = @as(u16, 36);
pub const HID_USAGE_HAPTICS_RETRIGGER_PERIOD = @as(u16, 37);
pub const HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE = @as(u16, 38);
pub const HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID = @as(u16, 39);
pub const HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME = @as(u16, 40);
pub const HID_USAGE_HAPTICS_WAVEFORM_BEGIN = @as(u16, 4096);
pub const HID_USAGE_HAPTICS_WAVEFORM_STOP = @as(u16, 4097);
pub const HID_USAGE_HAPTICS_WAVEFORM_NULL = @as(u16, 4098);
pub const HID_USAGE_HAPTICS_WAVEFORM_CLICK = @as(u16, 4099);
pub const HID_USAGE_HAPTICS_WAVEFORM_BUZZ = @as(u16, 4100);
pub const HID_USAGE_HAPTICS_WAVEFORM_RUMBLE = @as(u16, 4101);
pub const HID_USAGE_HAPTICS_WAVEFORM_PRESS = @as(u16, 4102);
pub const HID_USAGE_HAPTICS_WAVEFORM_RELEASE = @as(u16, 4103);
pub const HID_USAGE_HAPTICS_WAVEFORM_END = @as(u16, 8191);
pub const HID_USAGE_HAPTICS_WAVEFORM_VENDOR_BEGIN = @as(u16, 8192);
pub const HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END = @as(u16, 12287);
pub const HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY = @as(u16, 1);
pub const HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY = @as(u16, 2);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_ATTRIBUTES_REPORT = @as(u16, 32);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT = @as(u16, 36);
pub const HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT = @as(u16, 43);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS = @as(u16, 45);
pub const HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT = @as(u16, 50);
pub const HID_USAGE_ALPHANUMERIC_FONT_REPORT = @as(u16, 59);
pub const HID_USAGE_ALPHANUMERIC_FONT_DATA = @as(u16, 60);
pub const HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE = @as(u16, 72);
pub const HID_USAGE_ALPHANUMERIC_PALETTE_REPORT = @as(u16, 133);
pub const HID_USAGE_ALPHANUMERIC_PALETTE_DATA = @as(u16, 136);
pub const HID_USAGE_ALPHANUMERIC_BLIT_REPORT = @as(u16, 138);
pub const HID_USAGE_ALPHANUMERIC_BLIT_DATA = @as(u16, 143);
pub const HID_USAGE_ALPHANUMERIC_SOFT_BUTTON = @as(u16, 144);
pub const HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET = @as(u16, 33);
pub const HID_USAGE_ALPHANUMERIC_DATA_READ_BACK = @as(u16, 34);
pub const HID_USAGE_ALPHANUMERIC_FONT_READ_BACK = @as(u16, 35);
pub const HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY = @as(u16, 37);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE = @as(u16, 38);
pub const HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY = @as(u16, 39);
pub const HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE = @as(u16, 40);
pub const HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL = @as(u16, 41);
pub const HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL = @as(u16, 42);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_DATA = @as(u16, 44);
pub const HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY = @as(u16, 46);
pub const HID_USAGE_ALPHANUMERIC_STATUS_READY = @as(u16, 47);
pub const HID_USAGE_ALPHANUMERIC_ERR_NOT_A_LOADABLE_CHARACTER = @as(u16, 48);
pub const HID_USAGE_ALPHANUMERIC_ERR_FONT_DATA_CANNOT_BE_READ = @as(u16, 49);
pub const HID_USAGE_ALPHANUMERIC_ROW = @as(u16, 51);
pub const HID_USAGE_ALPHANUMERIC_COLUMN = @as(u16, 52);
pub const HID_USAGE_ALPHANUMERIC_ROWS = @as(u16, 53);
pub const HID_USAGE_ALPHANUMERIC_COLUMNS = @as(u16, 54);
pub const HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING = @as(u16, 55);
pub const HID_USAGE_ALPHANUMERIC_CURSOR_MODE = @as(u16, 56);
pub const HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE = @as(u16, 57);
pub const HID_USAGE_ALPHANUMERIC_CURSOR_BLINK = @as(u16, 58);
pub const HID_USAGE_ALPHANUMERIC_CHAR_WIDTH = @as(u16, 61);
pub const HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT = @as(u16, 62);
pub const HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL = @as(u16, 63);
pub const HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL = @as(u16, 64);
pub const HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET = @as(u16, 65);
pub const HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT = @as(u16, 66);
pub const HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP = @as(u16, 67);
pub const HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT = @as(u16, 68);
pub const HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP = @as(u16, 69);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS = @as(u16, 70);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST = @as(u16, 71);
pub const HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK = @as(u16, 73);
pub const HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA = @as(u16, 74);
pub const HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE = @as(u16, 75);
pub const HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE = @as(u16, 76);
pub const HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK = @as(u16, 77);
pub const HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X = @as(u16, 128);
pub const HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y = @as(u16, 129);
pub const HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT = @as(u16, 131);
pub const HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION = @as(u16, 132);
pub const HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE = @as(u16, 134);
pub const HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET = @as(u16, 135);
pub const HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 = @as(u16, 139);
pub const HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 = @as(u16, 140);
pub const HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 = @as(u16, 141);
pub const HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 = @as(u16, 142);
pub const HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID = @as(u16, 145);
pub const HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE = @as(u16, 146);
pub const HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 = @as(u16, 147);
pub const HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 = @as(u16, 148);
pub const HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT = @as(u16, 149);
pub const HID_USAGE_LAMPARRAY = @as(u16, 1);
pub const HID_USAGE_LAMPARRAY_ATTRBIUTES_REPORT = @as(u16, 2);
pub const HID_USAGE_LAMPARRAY_LAMP_COUNT = @as(u16, 3);
pub const HID_USAGE_LAMPARRAY_BOUNDING_BOX_WIDTH_IN_MICROMETERS = @as(u16, 4);
pub const HID_USAGE_LAMPARRAY_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = @as(u16, 5);
pub const HID_USAGE_LAMPARRAY_BOUNDING_BOX_DEPTH_IN_MICROMETERS = @as(u16, 6);
pub const HID_USAGE_LAMPARRAY_KIND = @as(u16, 7);
pub const HID_USAGE_LAMPARRAY_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = @as(u16, 8);
pub const HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_REQUEST_REPORT = @as(u16, 32);
pub const HID_USAGE_LAMPARRAY_LAMP_ID = @as(u16, 33);
pub const HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_RESPONSE_REPORT = @as(u16, 34);
pub const HID_USAGE_LAMPARRAY_POSITION_X_IN_MICROMETERS = @as(u16, 35);
pub const HID_USAGE_LAMPARRAY_POSITION_Y_IN_MICROMETERS = @as(u16, 36);
pub const HID_USAGE_LAMPARRAY_POSITION_Z_IN_MICROMETERS = @as(u16, 37);
pub const HID_USAGE_LAMPARRAY_LAMP_PURPOSES = @as(u16, 38);
pub const HID_USAGE_LAMPARRAY_UPDATE_LATENCY_IN_MICROSECONDS = @as(u16, 39);
pub const HID_USAGE_LAMPARRAY_RED_LEVEL_COUNT = @as(u16, 40);
pub const HID_USAGE_LAMPARRAY_GREEN_LEVEL_COUNT = @as(u16, 41);
pub const HID_USAGE_LAMPARRAY_BLUE_LEVEL_COUNT = @as(u16, 42);
pub const HID_USAGE_LAMPARRAY_INTENSITY_LEVEL_COUNT = @as(u16, 43);
pub const HID_USAGE_LAMPARRAY_IS_PROGRAMMABLE = @as(u16, 44);
pub const HID_USAGE_LAMPARRAY_INPUT_BINDING = @as(u16, 45);
pub const HID_USAGE_LAMPARRAY_LAMP_MULTI_UPDATE_REPORT = @as(u16, 80);
pub const HID_USAGE_LAMPARRAY_LAMP_RED_UPDATE_CHANNEL = @as(u16, 81);
pub const HID_USAGE_LAMPARRAY_LAMP_GREEN_UPDATE_CHANNEL = @as(u16, 82);
pub const HID_USAGE_LAMPARRAY_LAMP_BLUE_UPDATE_CHANNEL = @as(u16, 83);
pub const HID_USAGE_LAMPARRAY_LAMP_INTENSITY_UPDATE_CHANNEL = @as(u16, 84);
pub const HID_USAGE_LAMPARRAY_LAMP_UPDATE_FLAGS = @as(u16, 85);
pub const HID_USAGE_LAMPARRAY_LAMP_RANGE_UPDATE_REPORT = @as(u16, 96);
pub const HID_USAGE_LAMPARRAY_LAMP_ID_START = @as(u16, 97);
pub const HID_USAGE_LAMPARRAY_LAMP_ID_END = @as(u16, 98);
pub const HID_USAGE_LAMPARRAY_CONTROL_REPORT = @as(u16, 112);
pub const HID_USAGE_LAMPARRAY_AUTONOMOUS_MODE = @as(u16, 113);
pub const HID_USAGE_CAMERA_AUTO_FOCUS = @as(u16, 32);
pub const HID_USAGE_CAMERA_SHUTTER = @as(u16, 33);
pub const HID_USAGE_MS_BTH_HF_DIALNUMBER = @as(u16, 33);
pub const HID_USAGE_MS_BTH_HF_DIALMEMORY = @as(u16, 34);
pub const IOCTL_KEYBOARD_QUERY_ATTRIBUTES = @as(u32, 720896);
pub const IOCTL_KEYBOARD_SET_TYPEMATIC = @as(u32, 720900);
pub const IOCTL_KEYBOARD_SET_INDICATORS = @as(u32, 720904);
pub const IOCTL_KEYBOARD_QUERY_TYPEMATIC = @as(u32, 720928);
pub const IOCTL_KEYBOARD_QUERY_INDICATORS = @as(u32, 720960);
pub const IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION = @as(u32, 721024);
pub const IOCTL_KEYBOARD_INSERT_DATA = @as(u32, 721152);
pub const IOCTL_KEYBOARD_QUERY_EXTENDED_ATTRIBUTES = @as(u32, 721408);
pub const IOCTL_KEYBOARD_QUERY_IME_STATUS = @as(u32, 724992);
pub const IOCTL_KEYBOARD_SET_IME_STATUS = @as(u32, 724996);
pub const GUID_DEVINTERFACE_KEYBOARD = Guid.initString("884b96c3-56ef-11d1-bc8c-00a0c91405dd");
pub const KEYBOARD_OVERRUN_MAKE_CODE = @as(u32, 255);
pub const KEY_MAKE = @as(u32, 0);
pub const KEY_BREAK = @as(u32, 1);
pub const KEY_E0 = @as(u32, 2);
pub const KEY_E1 = @as(u32, 4);
pub const KEY_TERMSRV_SET_LED = @as(u32, 8);
pub const KEY_TERMSRV_SHADOW = @as(u32, 16);
pub const KEY_TERMSRV_VKPACKET = @as(u32, 32);
pub const KEY_RIM_VKEY = @as(u32, 64);
pub const KEY_FROM_KEYBOARD_OVERRIDER = @as(u32, 128);
pub const KEY_UNICODE_SEQUENCE_ITEM = @as(u32, 256);
pub const KEY_UNICODE_SEQUENCE_END = @as(u32, 512);
pub const KEYBOARD_EXTENDED_ATTRIBUTES_STRUCT_VERSION_1 = @as(u32, 1);
pub const KEYBOARD_LED_INJECTED = @as(u32, 32768);
pub const KEYBOARD_SHADOW = @as(u32, 16384);
pub const KEYBOARD_KANA_LOCK_ON = @as(u32, 8);
pub const KEYBOARD_CAPS_LOCK_ON = @as(u32, 4);
pub const KEYBOARD_NUM_LOCK_ON = @as(u32, 2);
pub const KEYBOARD_SCROLL_LOCK_ON = @as(u32, 1);
pub const KEYBOARD_ERROR_VALUE_BASE = @as(u32, 10000);
pub const IOCTL_MOUSE_QUERY_ATTRIBUTES = @as(u32, 983040);
pub const IOCTL_MOUSE_INSERT_DATA = @as(u32, 983044);
pub const GUID_DEVINTERFACE_MOUSE = Guid.initString("378de44c-56ef-11d1-bc8c-00a0c91405dd");
pub const MOUSE_LEFT_BUTTON_DOWN = @as(u32, 1);
pub const MOUSE_LEFT_BUTTON_UP = @as(u32, 2);
pub const MOUSE_RIGHT_BUTTON_DOWN = @as(u32, 4);
pub const MOUSE_RIGHT_BUTTON_UP = @as(u32, 8);
pub const MOUSE_MIDDLE_BUTTON_DOWN = @as(u32, 16);
pub const MOUSE_MIDDLE_BUTTON_UP = @as(u32, 32);
pub const MOUSE_BUTTON_1_DOWN = @as(u32, 1);
pub const MOUSE_BUTTON_1_UP = @as(u32, 2);
pub const MOUSE_BUTTON_2_DOWN = @as(u32, 4);
pub const MOUSE_BUTTON_2_UP = @as(u32, 8);
pub const MOUSE_BUTTON_3_DOWN = @as(u32, 16);
pub const MOUSE_BUTTON_3_UP = @as(u32, 32);
pub const MOUSE_BUTTON_4_DOWN = @as(u32, 64);
pub const MOUSE_BUTTON_4_UP = @as(u32, 128);
pub const MOUSE_BUTTON_5_DOWN = @as(u32, 256);
pub const MOUSE_BUTTON_5_UP = @as(u32, 512);
pub const MOUSE_WHEEL = @as(u32, 1024);
pub const MOUSE_HWHEEL = @as(u32, 2048);
pub const MOUSE_MOVE_RELATIVE = @as(u32, 0);
pub const MOUSE_MOVE_ABSOLUTE = @as(u32, 1);
pub const MOUSE_VIRTUAL_DESKTOP = @as(u32, 2);
pub const MOUSE_ATTRIBUTES_CHANGED = @as(u32, 4);
pub const MOUSE_MOVE_NOCOALESCE = @as(u32, 8);
pub const MOUSE_TERMSRV_SRC_SHADOW = @as(u32, 256);
pub const MOUSE_INPORT_HARDWARE = @as(u32, 1);
pub const MOUSE_I8042_HARDWARE = @as(u32, 2);
pub const MOUSE_SERIAL_HARDWARE = @as(u32, 4);
pub const BALLPOINT_I8042_HARDWARE = @as(u32, 8);
pub const BALLPOINT_SERIAL_HARDWARE = @as(u32, 16);
pub const WHEELMOUSE_I8042_HARDWARE = @as(u32, 32);
pub const WHEELMOUSE_SERIAL_HARDWARE = @as(u32, 64);
pub const MOUSE_HID_HARDWARE = @as(u32, 128);
pub const WHEELMOUSE_HID_HARDWARE = @as(u32, 256);
pub const HORIZONTAL_WHEEL_PRESENT = @as(u32, 32768);
pub const MOUSE_ERROR_VALUE_BASE = @as(u32, 20000);
pub const DIRECTINPUT_HEADER_VERSION = @as(u32, 2048);
pub const CLSID_DirectInput = Guid.initString("25e609e0-b259-11cf-bfc7-444553540000");
pub const CLSID_DirectInputDevice = Guid.initString("25e609e1-b259-11cf-bfc7-444553540000");
pub const CLSID_DirectInput8 = Guid.initString("25e609e4-b259-11cf-bfc7-444553540000");
pub const CLSID_DirectInputDevice8 = Guid.initString("25e609e5-b259-11cf-bfc7-444553540000");
pub const GUID_XAxis = Guid.initString("a36d02e0-c9f3-11cf-bfc7-444553540000");
pub const GUID_YAxis = Guid.initString("a36d02e1-c9f3-11cf-bfc7-444553540000");
pub const GUID_ZAxis = Guid.initString("a36d02e2-c9f3-11cf-bfc7-444553540000");
pub const GUID_RxAxis = Guid.initString("a36d02f4-c9f3-11cf-bfc7-444553540000");
pub const GUID_RyAxis = Guid.initString("a36d02f5-c9f3-11cf-bfc7-444553540000");
pub const GUID_RzAxis = Guid.initString("a36d02e3-c9f3-11cf-bfc7-444553540000");
pub const GUID_Slider = Guid.initString("a36d02e4-c9f3-11cf-bfc7-444553540000");
pub const GUID_Button = Guid.initString("a36d02f0-c9f3-11cf-bfc7-444553540000");
pub const GUID_Key = Guid.initString("55728220-d33c-11cf-bfc7-444553540000");
pub const GUID_POV = Guid.initString("a36d02f2-c9f3-11cf-bfc7-444553540000");
pub const GUID_Unknown = Guid.initString("a36d02f3-c9f3-11cf-bfc7-444553540000");
pub const GUID_SysMouse = Guid.initString("6f1d2b60-d5a0-11cf-bfc7-444553540000");
pub const GUID_SysKeyboard = Guid.initString("6f1d2b61-d5a0-11cf-bfc7-444553540000");
pub const GUID_Joystick = Guid.initString("6f1d2b70-d5a0-11cf-bfc7-444553540000");
pub const GUID_SysMouseEm = Guid.initString("6f1d2b80-d5a0-11cf-bfc7-444553540000");
pub const GUID_SysMouseEm2 = Guid.initString("6f1d2b81-d5a0-11cf-bfc7-444553540000");
pub const GUID_SysKeyboardEm = Guid.initString("6f1d2b82-d5a0-11cf-bfc7-444553540000");
pub const GUID_SysKeyboardEm2 = Guid.initString("6f1d2b83-d5a0-11cf-bfc7-444553540000");
pub const GUID_ConstantForce = Guid.initString("13541c20-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_RampForce = Guid.initString("13541c21-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Square = Guid.initString("13541c22-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Sine = Guid.initString("13541c23-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Triangle = Guid.initString("13541c24-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_SawtoothUp = Guid.initString("13541c25-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_SawtoothDown = Guid.initString("13541c26-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Spring = Guid.initString("13541c27-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Damper = Guid.initString("13541c28-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Inertia = Guid.initString("13541c29-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_Friction = Guid.initString("13541c2a-8e33-11d0-9ad0-00a0c9a06e35");
pub const GUID_CustomForce = Guid.initString("13541c2b-8e33-11d0-9ad0-00a0c9a06e35");
pub const DIEFT_ALL = @as(u32, 0);
pub const DIEFT_CONSTANTFORCE = @as(u32, 1);
pub const DIEFT_RAMPFORCE = @as(u32, 2);
pub const DIEFT_PERIODIC = @as(u32, 3);
pub const DIEFT_CONDITION = @as(u32, 4);
pub const DIEFT_CUSTOMFORCE = @as(u32, 5);
pub const DIEFT_HARDWARE = @as(u32, 255);
pub const DIEFT_FFATTACK = @as(u32, 512);
pub const DIEFT_FFFADE = @as(u32, 1024);
pub const DIEFT_SATURATION = @as(u32, 2048);
pub const DIEFT_POSNEGCOEFFICIENTS = @as(u32, 4096);
pub const DIEFT_POSNEGSATURATION = @as(u32, 8192);
pub const DIEFT_DEADBAND = @as(u32, 16384);
pub const DIEFT_STARTDELAY = @as(u32, 32768);
pub const DI_DEGREES = @as(u32, 100);
pub const DI_FFNOMINALMAX = @as(u32, 10000);
pub const DI_SECONDS = @as(u32, 1000000);
pub const DIEFF_OBJECTIDS = @as(u32, 1);
pub const DIEFF_OBJECTOFFSETS = @as(u32, 2);
pub const DIEFF_CARTESIAN = @as(u32, 16);
pub const DIEFF_POLAR = @as(u32, 32);
pub const DIEFF_SPHERICAL = @as(u32, 64);
pub const DIEP_DURATION = @as(u32, 1);
pub const DIEP_SAMPLEPERIOD = @as(u32, 2);
pub const DIEP_GAIN = @as(u32, 4);
pub const DIEP_TRIGGERBUTTON = @as(u32, 8);
pub const DIEP_TRIGGERREPEATINTERVAL = @as(u32, 16);
pub const DIEP_AXES = @as(u32, 32);
pub const DIEP_DIRECTION = @as(u32, 64);
pub const DIEP_ENVELOPE = @as(u32, 128);
pub const DIEP_TYPESPECIFICPARAMS = @as(u32, 256);
pub const DIEP_STARTDELAY = @as(u32, 512);
pub const DIEP_ALLPARAMS_DX5 = @as(u32, 511);
pub const DIEP_ALLPARAMS = @as(u32, 1023);
pub const DIEP_START = @as(u32, 536870912);
pub const DIEP_NORESTART = @as(u32, 1073741824);
pub const DIEP_NODOWNLOAD = @as(u32, 2147483648);
pub const DIEB_NOTRIGGER = @as(u32, 4294967295);
pub const DIES_SOLO = @as(u32, 1);
pub const DIES_NODOWNLOAD = @as(u32, 2147483648);
pub const DIEGES_PLAYING = @as(u32, 1);
pub const DIEGES_EMULATED = @as(u32, 2);
pub const DIDEVTYPE_DEVICE = @as(u32, 1);
pub const DIDEVTYPE_MOUSE = @as(u32, 2);
pub const DIDEVTYPE_KEYBOARD = @as(u32, 3);
pub const DIDEVTYPE_JOYSTICK = @as(u32, 4);
pub const DI8DEVCLASS_ALL = @as(u32, 0);
pub const DI8DEVCLASS_DEVICE = @as(u32, 1);
pub const DI8DEVCLASS_POINTER = @as(u32, 2);
pub const DI8DEVCLASS_KEYBOARD = @as(u32, 3);
pub const DI8DEVCLASS_GAMECTRL = @as(u32, 4);
pub const DI8DEVTYPE_DEVICE = @as(u32, 17);
pub const DI8DEVTYPE_MOUSE = @as(u32, 18);
pub const DI8DEVTYPE_KEYBOARD = @as(u32, 19);
pub const DI8DEVTYPE_JOYSTICK = @as(u32, 20);
pub const DI8DEVTYPE_GAMEPAD = @as(u32, 21);
pub const DI8DEVTYPE_DRIVING = @as(u32, 22);
pub const DI8DEVTYPE_FLIGHT = @as(u32, 23);
pub const DI8DEVTYPE_1STPERSON = @as(u32, 24);
pub const DI8DEVTYPE_DEVICECTRL = @as(u32, 25);
pub const DI8DEVTYPE_SCREENPOINTER = @as(u32, 26);
pub const DI8DEVTYPE_REMOTE = @as(u32, 27);
pub const DI8DEVTYPE_SUPPLEMENTAL = @as(u32, 28);
pub const DIDEVTYPE_HID = @as(u32, 65536);
pub const DIDEVTYPEMOUSE_UNKNOWN = @as(u32, 1);
pub const DIDEVTYPEMOUSE_TRADITIONAL = @as(u32, 2);
pub const DIDEVTYPEMOUSE_FINGERSTICK = @as(u32, 3);
pub const DIDEVTYPEMOUSE_TOUCHPAD = @as(u32, 4);
pub const DIDEVTYPEMOUSE_TRACKBALL = @as(u32, 5);
pub const DIDEVTYPEKEYBOARD_UNKNOWN = @as(u32, 0);
pub const DIDEVTYPEKEYBOARD_PCXT = @as(u32, 1);
pub const DIDEVTYPEKEYBOARD_OLIVETTI = @as(u32, 2);
pub const DIDEVTYPEKEYBOARD_PCAT = @as(u32, 3);
pub const DIDEVTYPEKEYBOARD_PCENH = @as(u32, 4);
pub const DIDEVTYPEKEYBOARD_NOKIA1050 = @as(u32, 5);
pub const DIDEVTYPEKEYBOARD_NOKIA9140 = @as(u32, 6);
pub const DIDEVTYPEKEYBOARD_NEC98 = @as(u32, 7);
pub const DIDEVTYPEKEYBOARD_NEC98LAPTOP = @as(u32, 8);
pub const DIDEVTYPEKEYBOARD_NEC98106 = @as(u32, 9);
pub const DIDEVTYPEKEYBOARD_JAPAN106 = @as(u32, 10);
pub const DIDEVTYPEKEYBOARD_JAPANAX = @as(u32, 11);
pub const DIDEVTYPEKEYBOARD_J3100 = @as(u32, 12);
pub const DIDEVTYPEJOYSTICK_UNKNOWN = @as(u32, 1);
pub const DIDEVTYPEJOYSTICK_TRADITIONAL = @as(u32, 2);
pub const DIDEVTYPEJOYSTICK_FLIGHTSTICK = @as(u32, 3);
pub const DIDEVTYPEJOYSTICK_GAMEPAD = @as(u32, 4);
pub const DIDEVTYPEJOYSTICK_RUDDER = @as(u32, 5);
pub const DIDEVTYPEJOYSTICK_WHEEL = @as(u32, 6);
pub const DIDEVTYPEJOYSTICK_HEADTRACKER = @as(u32, 7);
pub const DI8DEVTYPEMOUSE_UNKNOWN = @as(u32, 1);
pub const DI8DEVTYPEMOUSE_TRADITIONAL = @as(u32, 2);
pub const DI8DEVTYPEMOUSE_FINGERSTICK = @as(u32, 3);
pub const DI8DEVTYPEMOUSE_TOUCHPAD = @as(u32, 4);
pub const DI8DEVTYPEMOUSE_TRACKBALL = @as(u32, 5);
pub const DI8DEVTYPEMOUSE_ABSOLUTE = @as(u32, 6);
pub const DI8DEVTYPEKEYBOARD_UNKNOWN = @as(u32, 0);
pub const DI8DEVTYPEKEYBOARD_PCXT = @as(u32, 1);
pub const DI8DEVTYPEKEYBOARD_OLIVETTI = @as(u32, 2);
pub const DI8DEVTYPEKEYBOARD_PCAT = @as(u32, 3);
pub const DI8DEVTYPEKEYBOARD_PCENH = @as(u32, 4);
pub const DI8DEVTYPEKEYBOARD_NOKIA1050 = @as(u32, 5);
pub const DI8DEVTYPEKEYBOARD_NOKIA9140 = @as(u32, 6);
pub const DI8DEVTYPEKEYBOARD_NEC98 = @as(u32, 7);
pub const DI8DEVTYPEKEYBOARD_NEC98LAPTOP = @as(u32, 8);
pub const DI8DEVTYPEKEYBOARD_NEC98106 = @as(u32, 9);
pub const DI8DEVTYPEKEYBOARD_JAPAN106 = @as(u32, 10);
pub const DI8DEVTYPEKEYBOARD_JAPANAX = @as(u32, 11);
pub const DI8DEVTYPEKEYBOARD_J3100 = @as(u32, 12);
pub const DI8DEVTYPE_LIMITEDGAMESUBTYPE = @as(u32, 1);
pub const DI8DEVTYPEJOYSTICK_LIMITED = @as(u32, 1);
pub const DI8DEVTYPEJOYSTICK_STANDARD = @as(u32, 2);
pub const DI8DEVTYPEGAMEPAD_LIMITED = @as(u32, 1);
pub const DI8DEVTYPEGAMEPAD_STANDARD = @as(u32, 2);
pub const DI8DEVTYPEGAMEPAD_TILT = @as(u32, 3);
pub const DI8DEVTYPEDRIVING_LIMITED = @as(u32, 1);
pub const DI8DEVTYPEDRIVING_COMBINEDPEDALS = @as(u32, 2);
pub const DI8DEVTYPEDRIVING_DUALPEDALS = @as(u32, 3);
pub const DI8DEVTYPEDRIVING_THREEPEDALS = @as(u32, 4);
pub const DI8DEVTYPEDRIVING_HANDHELD = @as(u32, 5);
pub const DI8DEVTYPEFLIGHT_LIMITED = @as(u32, 1);
pub const DI8DEVTYPEFLIGHT_STICK = @as(u32, 2);
pub const DI8DEVTYPEFLIGHT_YOKE = @as(u32, 3);
pub const DI8DEVTYPEFLIGHT_RC = @as(u32, 4);
pub const DI8DEVTYPE1STPERSON_LIMITED = @as(u32, 1);
pub const DI8DEVTYPE1STPERSON_UNKNOWN = @as(u32, 2);
pub const DI8DEVTYPE1STPERSON_SIXDOF = @as(u32, 3);
pub const DI8DEVTYPE1STPERSON_SHOOTER = @as(u32, 4);
pub const DI8DEVTYPESCREENPTR_UNKNOWN = @as(u32, 2);
pub const DI8DEVTYPESCREENPTR_LIGHTGUN = @as(u32, 3);
pub const DI8DEVTYPESCREENPTR_LIGHTPEN = @as(u32, 4);
pub const DI8DEVTYPESCREENPTR_TOUCH = @as(u32, 5);
pub const DI8DEVTYPEREMOTE_UNKNOWN = @as(u32, 2);
pub const DI8DEVTYPEDEVICECTRL_UNKNOWN = @as(u32, 2);
pub const DI8DEVTYPEDEVICECTRL_COMMSSELECTION = @as(u32, 3);
pub const DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED = @as(u32, 4);
pub const DI8DEVTYPESUPPLEMENTAL_UNKNOWN = @as(u32, 2);
pub const DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER = @as(u32, 3);
pub const DI8DEVTYPESUPPLEMENTAL_HEADTRACKER = @as(u32, 4);
pub const DI8DEVTYPESUPPLEMENTAL_HANDTRACKER = @as(u32, 5);
pub const DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE = @as(u32, 6);
pub const DI8DEVTYPESUPPLEMENTAL_SHIFTER = @as(u32, 7);
pub const DI8DEVTYPESUPPLEMENTAL_THROTTLE = @as(u32, 8);
pub const DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE = @as(u32, 9);
pub const DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS = @as(u32, 10);
pub const DI8DEVTYPESUPPLEMENTAL_DUALPEDALS = @as(u32, 11);
pub const DI8DEVTYPESUPPLEMENTAL_THREEPEDALS = @as(u32, 12);
pub const DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS = @as(u32, 13);
pub const DIDC_ATTACHED = @as(u32, 1);
pub const DIDC_POLLEDDEVICE = @as(u32, 2);
pub const DIDC_EMULATED = @as(u32, 4);
pub const DIDC_POLLEDDATAFORMAT = @as(u32, 8);
pub const DIDC_FORCEFEEDBACK = @as(u32, 256);
pub const DIDC_FFATTACK = @as(u32, 512);
pub const DIDC_FFFADE = @as(u32, 1024);
pub const DIDC_SATURATION = @as(u32, 2048);
pub const DIDC_POSNEGCOEFFICIENTS = @as(u32, 4096);
pub const DIDC_POSNEGSATURATION = @as(u32, 8192);
pub const DIDC_DEADBAND = @as(u32, 16384);
pub const DIDC_STARTDELAY = @as(u32, 32768);
pub const DIDC_ALIAS = @as(u32, 65536);
pub const DIDC_PHANTOM = @as(u32, 131072);
pub const DIDC_HIDDEN = @as(u32, 262144);
pub const DIDFT_ALL = @as(u32, 0);
pub const DIDFT_RELAXIS = @as(u32, 1);
pub const DIDFT_ABSAXIS = @as(u32, 2);
pub const DIDFT_AXIS = @as(u32, 3);
pub const DIDFT_PSHBUTTON = @as(u32, 4);
pub const DIDFT_TGLBUTTON = @as(u32, 8);
pub const DIDFT_BUTTON = @as(u32, 12);
pub const DIDFT_POV = @as(u32, 16);
pub const DIDFT_COLLECTION = @as(u32, 64);
pub const DIDFT_NODATA = @as(u32, 128);
pub const DIDFT_ANYINSTANCE = @as(u32, 16776960);
pub const DIDFT_INSTANCEMASK = @as(u32, 16776960);
pub const DIDFT_FFACTUATOR = @as(u32, 16777216);
pub const DIDFT_FFEFFECTTRIGGER = @as(u32, 33554432);
pub const DIDFT_OUTPUT = @as(u32, 268435456);
pub const DIDFT_VENDORDEFINED = @as(u32, 67108864);
pub const DIDFT_ALIAS = @as(u32, 134217728);
pub const DIDFT_NOCOLLECTION = @as(u32, 16776960);
pub const DIDF_ABSAXIS = @as(u32, 1);
pub const DIDF_RELAXIS = @as(u32, 2);
pub const DIA_FORCEFEEDBACK = @as(u32, 1);
pub const DIA_APPMAPPED = @as(u32, 2);
pub const DIA_APPNOMAP = @as(u32, 4);
pub const DIA_NORANGE = @as(u32, 8);
pub const DIA_APPFIXED = @as(u32, 16);
pub const DIAH_UNMAPPED = @as(u32, 0);
pub const DIAH_USERCONFIG = @as(u32, 1);
pub const DIAH_APPREQUESTED = @as(u32, 2);
pub const DIAH_HWAPP = @as(u32, 4);
pub const DIAH_HWDEFAULT = @as(u32, 8);
pub const DIAH_DEFAULT = @as(u32, 32);
pub const DIAH_ERROR = @as(u32, 2147483648);
pub const DIAFTS_NEWDEVICELOW = @as(u32, 4294967295);
pub const DIAFTS_NEWDEVICEHIGH = @as(u32, 4294967295);
pub const DIAFTS_UNUSEDDEVICELOW = @as(u32, 0);
pub const DIAFTS_UNUSEDDEVICEHIGH = @as(u32, 0);
pub const DIDBAM_DEFAULT = @as(u32, 0);
pub const DIDBAM_PRESERVE = @as(u32, 1);
pub const DIDBAM_INITIALIZE = @as(u32, 2);
pub const DIDBAM_HWDEFAULTS = @as(u32, 4);
pub const DIDSAM_DEFAULT = @as(u32, 0);
pub const DIDSAM_NOUSER = @as(u32, 1);
pub const DIDSAM_FORCESAVE = @as(u32, 2);
pub const DICD_DEFAULT = @as(u32, 0);
pub const DICD_EDIT = @as(u32, 1);
pub const DIDIFT_CONFIGURATION = @as(u32, 1);
pub const DIDIFT_OVERLAY = @as(u32, 2);
pub const DIDAL_CENTERED = @as(u32, 0);
pub const DIDAL_LEFTALIGNED = @as(u32, 1);
pub const DIDAL_RIGHTALIGNED = @as(u32, 2);
pub const DIDAL_MIDDLE = @as(u32, 0);
pub const DIDAL_TOPALIGNED = @as(u32, 4);
pub const DIDAL_BOTTOMALIGNED = @as(u32, 8);
pub const DIDOI_FFACTUATOR = @as(u32, 1);
pub const DIDOI_FFEFFECTTRIGGER = @as(u32, 2);
pub const DIDOI_POLLED = @as(u32, 32768);
pub const DIDOI_ASPECTPOSITION = @as(u32, 256);
pub const DIDOI_ASPECTVELOCITY = @as(u32, 512);
pub const DIDOI_ASPECTACCEL = @as(u32, 768);
pub const DIDOI_ASPECTFORCE = @as(u32, 1024);
pub const DIDOI_ASPECTMASK = @as(u32, 3840);
pub const DIDOI_GUIDISUSAGE = @as(u32, 65536);
pub const DIPH_DEVICE = @as(u32, 0);
pub const DIPH_BYOFFSET = @as(u32, 1);
pub const DIPH_BYID = @as(u32, 2);
pub const DIPH_BYUSAGE = @as(u32, 3);
pub const MAXCPOINTSNUM = @as(u32, 8);
pub const DIPROPAXISMODE_ABS = @as(u32, 0);
pub const DIPROPAXISMODE_REL = @as(u32, 1);
pub const DIPROPAUTOCENTER_OFF = @as(u32, 0);
pub const DIPROPAUTOCENTER_ON = @as(u32, 1);
pub const DIPROPCALIBRATIONMODE_COOKED = @as(u32, 0);
pub const DIPROPCALIBRATIONMODE_RAW = @as(u32, 1);
pub const DIGDD_PEEK = @as(u32, 1);
pub const DISCL_EXCLUSIVE = @as(u32, 1);
pub const DISCL_NONEXCLUSIVE = @as(u32, 2);
pub const DISCL_FOREGROUND = @as(u32, 4);
pub const DISCL_BACKGROUND = @as(u32, 8);
pub const DISCL_NOWINKEY = @as(u32, 16);
pub const DISFFC_RESET = @as(u32, 1);
pub const DISFFC_STOPALL = @as(u32, 2);
pub const DISFFC_PAUSE = @as(u32, 4);
pub const DISFFC_CONTINUE = @as(u32, 8);
pub const DISFFC_SETACTUATORSON = @as(u32, 16);
pub const DISFFC_SETACTUATORSOFF = @as(u32, 32);
pub const DIGFFS_EMPTY = @as(u32, 1);
pub const DIGFFS_STOPPED = @as(u32, 2);
pub const DIGFFS_PAUSED = @as(u32, 4);
pub const DIGFFS_ACTUATORSON = @as(u32, 16);
pub const DIGFFS_ACTUATORSOFF = @as(u32, 32);
pub const DIGFFS_POWERON = @as(u32, 64);
pub const DIGFFS_POWEROFF = @as(u32, 128);
pub const DIGFFS_SAFETYSWITCHON = @as(u32, 256);
pub const DIGFFS_SAFETYSWITCHOFF = @as(u32, 512);
pub const DIGFFS_USERFFSWITCHON = @as(u32, 1024);
pub const DIGFFS_USERFFSWITCHOFF = @as(u32, 2048);
pub const DIGFFS_DEVICELOST = @as(u32, 2147483648);
pub const DISDD_CONTINUE = @as(u32, 1);
pub const DIFEF_DEFAULT = @as(u32, 0);
pub const DIFEF_INCLUDENONSTANDARD = @as(u32, 1);
pub const DIFEF_MODIFYIFNEEDED = @as(u32, 16);
pub const DIK_ESCAPE = @as(u32, 1);
pub const DIK_1 = @as(u32, 2);
pub const DIK_2 = @as(u32, 3);
pub const DIK_3 = @as(u32, 4);
pub const DIK_4 = @as(u32, 5);
pub const DIK_5 = @as(u32, 6);
pub const DIK_6 = @as(u32, 7);
pub const DIK_7 = @as(u32, 8);
pub const DIK_8 = @as(u32, 9);
pub const DIK_9 = @as(u32, 10);
pub const DIK_0 = @as(u32, 11);
pub const DIK_MINUS = @as(u32, 12);
pub const DIK_EQUALS = @as(u32, 13);
pub const DIK_BACK = @as(u32, 14);
pub const DIK_TAB = @as(u32, 15);
pub const DIK_Q = @as(u32, 16);
pub const DIK_W = @as(u32, 17);
pub const DIK_E = @as(u32, 18);
pub const DIK_R = @as(u32, 19);
pub const DIK_T = @as(u32, 20);
pub const DIK_Y = @as(u32, 21);
pub const DIK_U = @as(u32, 22);
pub const DIK_I = @as(u32, 23);
pub const DIK_O = @as(u32, 24);
pub const DIK_P = @as(u32, 25);
pub const DIK_LBRACKET = @as(u32, 26);
pub const DIK_RBRACKET = @as(u32, 27);
pub const DIK_RETURN = @as(u32, 28);
pub const DIK_LCONTROL = @as(u32, 29);
pub const DIK_A = @as(u32, 30);
pub const DIK_S = @as(u32, 31);
pub const DIK_D = @as(u32, 32);
pub const DIK_F = @as(u32, 33);
pub const DIK_G = @as(u32, 34);
pub const DIK_H = @as(u32, 35);
pub const DIK_J = @as(u32, 36);
pub const DIK_K = @as(u32, 37);
pub const DIK_L = @as(u32, 38);
pub const DIK_SEMICOLON = @as(u32, 39);
pub const DIK_APOSTROPHE = @as(u32, 40);
pub const DIK_GRAVE = @as(u32, 41);
pub const DIK_LSHIFT = @as(u32, 42);
pub const DIK_BACKSLASH = @as(u32, 43);
pub const DIK_Z = @as(u32, 44);
pub const DIK_X = @as(u32, 45);
pub const DIK_C = @as(u32, 46);
pub const DIK_V = @as(u32, 47);
pub const DIK_B = @as(u32, 48);
pub const DIK_N = @as(u32, 49);
pub const DIK_M = @as(u32, 50);
pub const DIK_COMMA = @as(u32, 51);
pub const DIK_PERIOD = @as(u32, 52);
pub const DIK_SLASH = @as(u32, 53);
pub const DIK_RSHIFT = @as(u32, 54);
pub const DIK_MULTIPLY = @as(u32, 55);
pub const DIK_LMENU = @as(u32, 56);
pub const DIK_SPACE = @as(u32, 57);
pub const DIK_CAPITAL = @as(u32, 58);
pub const DIK_F1 = @as(u32, 59);
pub const DIK_F2 = @as(u32, 60);
pub const DIK_F3 = @as(u32, 61);
pub const DIK_F4 = @as(u32, 62);
pub const DIK_F5 = @as(u32, 63);
pub const DIK_F6 = @as(u32, 64);
pub const DIK_F7 = @as(u32, 65);
pub const DIK_F8 = @as(u32, 66);
pub const DIK_F9 = @as(u32, 67);
pub const DIK_F10 = @as(u32, 68);
pub const DIK_NUMLOCK = @as(u32, 69);
pub const DIK_SCROLL = @as(u32, 70);
pub const DIK_NUMPAD7 = @as(u32, 71);
pub const DIK_NUMPAD8 = @as(u32, 72);
pub const DIK_NUMPAD9 = @as(u32, 73);
pub const DIK_SUBTRACT = @as(u32, 74);
pub const DIK_NUMPAD4 = @as(u32, 75);
pub const DIK_NUMPAD5 = @as(u32, 76);
pub const DIK_NUMPAD6 = @as(u32, 77);
pub const DIK_ADD = @as(u32, 78);
pub const DIK_NUMPAD1 = @as(u32, 79);
pub const DIK_NUMPAD2 = @as(u32, 80);
pub const DIK_NUMPAD3 = @as(u32, 81);
pub const DIK_NUMPAD0 = @as(u32, 82);
pub const DIK_DECIMAL = @as(u32, 83);
pub const DIK_OEM_102 = @as(u32, 86);
pub const DIK_F11 = @as(u32, 87);
pub const DIK_F12 = @as(u32, 88);
pub const DIK_F13 = @as(u32, 100);
pub const DIK_F14 = @as(u32, 101);
pub const DIK_F15 = @as(u32, 102);
pub const DIK_KANA = @as(u32, 112);
pub const DIK_ABNT_C1 = @as(u32, 115);
pub const DIK_CONVERT = @as(u32, 121);
pub const DIK_NOCONVERT = @as(u32, 123);
pub const DIK_YEN = @as(u32, 125);
pub const DIK_ABNT_C2 = @as(u32, 126);
pub const DIK_NUMPADEQUALS = @as(u32, 141);
pub const DIK_PREVTRACK = @as(u32, 144);
pub const DIK_AT = @as(u32, 145);
pub const DIK_COLON = @as(u32, 146);
pub const DIK_UNDERLINE = @as(u32, 147);
pub const DIK_KANJI = @as(u32, 148);
pub const DIK_STOP = @as(u32, 149);
pub const DIK_AX = @as(u32, 150);
pub const DIK_UNLABELED = @as(u32, 151);
pub const DIK_NEXTTRACK = @as(u32, 153);
pub const DIK_NUMPADENTER = @as(u32, 156);
pub const DIK_RCONTROL = @as(u32, 157);
pub const DIK_MUTE = @as(u32, 160);
pub const DIK_CALCULATOR = @as(u32, 161);
pub const DIK_PLAYPAUSE = @as(u32, 162);
pub const DIK_MEDIASTOP = @as(u32, 164);
pub const DIK_VOLUMEDOWN = @as(u32, 174);
pub const DIK_VOLUMEUP = @as(u32, 176);
pub const DIK_WEBHOME = @as(u32, 178);
pub const DIK_NUMPADCOMMA = @as(u32, 179);
pub const DIK_DIVIDE = @as(u32, 181);
pub const DIK_SYSRQ = @as(u32, 183);
pub const DIK_RMENU = @as(u32, 184);
pub const DIK_PAUSE = @as(u32, 197);
pub const DIK_HOME = @as(u32, 199);
pub const DIK_UP = @as(u32, 200);
pub const DIK_PRIOR = @as(u32, 201);
pub const DIK_LEFT = @as(u32, 203);
pub const DIK_RIGHT = @as(u32, 205);
pub const DIK_END = @as(u32, 207);
pub const DIK_DOWN = @as(u32, 208);
pub const DIK_NEXT = @as(u32, 209);
pub const DIK_INSERT = @as(u32, 210);
pub const DIK_DELETE = @as(u32, 211);
pub const DIK_LWIN = @as(u32, 219);
pub const DIK_RWIN = @as(u32, 220);
pub const DIK_APPS = @as(u32, 221);
pub const DIK_POWER = @as(u32, 222);
pub const DIK_SLEEP = @as(u32, 223);
pub const DIK_WAKE = @as(u32, 227);
pub const DIK_WEBSEARCH = @as(u32, 229);
pub const DIK_WEBFAVORITES = @as(u32, 230);
pub const DIK_WEBREFRESH = @as(u32, 231);
pub const DIK_WEBSTOP = @as(u32, 232);
pub const DIK_WEBFORWARD = @as(u32, 233);
pub const DIK_WEBBACK = @as(u32, 234);
pub const DIK_MYCOMPUTER = @as(u32, 235);
pub const DIK_MAIL = @as(u32, 236);
pub const DIK_MEDIASELECT = @as(u32, 237);
pub const DIK_BACKSPACE = @as(u32, 14);
pub const DIK_NUMPADSTAR = @as(u32, 55);
pub const DIK_LALT = @as(u32, 56);
pub const DIK_CAPSLOCK = @as(u32, 58);
pub const DIK_NUMPADMINUS = @as(u32, 74);
pub const DIK_NUMPADPLUS = @as(u32, 78);
pub const DIK_NUMPADPERIOD = @as(u32, 83);
pub const DIK_NUMPADSLASH = @as(u32, 181);
pub const DIK_RALT = @as(u32, 184);
pub const DIK_UPARROW = @as(u32, 200);
pub const DIK_PGUP = @as(u32, 201);
pub const DIK_LEFTARROW = @as(u32, 203);
pub const DIK_RIGHTARROW = @as(u32, 205);
pub const DIK_DOWNARROW = @as(u32, 208);
pub const DIK_PGDN = @as(u32, 209);
pub const DIK_CIRCUMFLEX = @as(u32, 144);
pub const DIENUM_STOP = @as(u32, 0);
pub const DIENUM_CONTINUE = @as(u32, 1);
pub const DIEDFL_ALLDEVICES = @as(u32, 0);
pub const DIEDFL_ATTACHEDONLY = @as(u32, 1);
pub const DIEDFL_FORCEFEEDBACK = @as(u32, 256);
pub const DIEDFL_INCLUDEALIASES = @as(u32, 65536);
pub const DIEDFL_INCLUDEPHANTOMS = @as(u32, 131072);
pub const DIEDFL_INCLUDEHIDDEN = @as(u32, 262144);
pub const DIEDBS_MAPPEDPRI1 = @as(u32, 1);
pub const DIEDBS_MAPPEDPRI2 = @as(u32, 2);
pub const DIEDBS_RECENTDEVICE = @as(u32, 16);
pub const DIEDBS_NEWDEVICE = @as(u32, 32);
pub const DIEDBSFL_ATTACHEDONLY = @as(u32, 0);
pub const DIEDBSFL_THISUSER = @as(u32, 16);
pub const DIEDBSFL_FORCEFEEDBACK = @as(u32, 256);
pub const DIEDBSFL_AVAILABLEDEVICES = @as(u32, 4096);
pub const DIEDBSFL_MULTIMICEKEYBOARDS = @as(u32, 8192);
pub const DIEDBSFL_NONGAMINGDEVICES = @as(u32, 16384);
pub const DIEDBSFL_VALID = @as(u32, 28944);
pub const DI_OK = @as(i32, 0);
pub const DI_NOTATTACHED = @as(i32, 1);
pub const DI_BUFFEROVERFLOW = @as(i32, 1);
pub const DI_PROPNOEFFECT = @as(i32, 1);
pub const DI_NOEFFECT = @as(i32, 1);
pub const DI_POLLEDDEVICE = @import("../zig.zig").typedConst(HRESULT, @as(i32, 2));
pub const DI_DOWNLOADSKIPPED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 3));
pub const DI_EFFECTRESTARTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 4));
pub const DI_TRUNCATED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 8));
pub const DI_SETTINGSNOTSAVED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 11));
pub const DI_TRUNCATEDANDRESTARTED = @import("../zig.zig").typedConst(HRESULT, @as(i32, 12));
pub const DI_WRITEPROTECT = @import("../zig.zig").typedConst(HRESULT, @as(i32, 19));
pub const DIERR_OLDDIRECTINPUTVERSION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147023746));
pub const DIERR_BETADIRECTINPUTVERSION = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147023743));
pub const DIERR_BADDRIVERVER = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024777));
pub const DIERR_DEVICENOTREG = @as(i32, -2147221164);
pub const DIERR_NOTFOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024894));
pub const DIERR_OBJECTNOTFOUND = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024894));
pub const DIERR_INVALIDPARAM = @as(i32, -2147024809);
pub const DIERR_NOINTERFACE = @as(i32, -2147467262);
pub const DIERR_GENERIC = @as(i32, -2147467259);
pub const DIERR_OUTOFMEMORY = @as(i32, -2147024882);
pub const DIERR_UNSUPPORTED = @as(i32, -2147467263);
pub const DIERR_NOTINITIALIZED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024875));
pub const DIERR_ALREADYINITIALIZED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147023649));
pub const DIERR_NOAGGREGATION = @as(i32, -2147221232);
pub const DIERR_OTHERAPPHASPRIO = @as(i32, -2147024891);
pub const DIERR_INPUTLOST = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024866));
pub const DIERR_ACQUIRED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024726));
pub const DIERR_NOTACQUIRED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2147024884));
pub const DIERR_READONLY = @as(i32, -2147024891);
pub const DIERR_HANDLEEXISTS = @as(i32, -2147024891);
pub const DIERR_INSUFFICIENTPRIVS = @as(i32, -2147220992);
pub const DIERR_DEVICEFULL = @as(i32, -2147220991);
pub const DIERR_MOREDATA = @as(i32, -2147220990);
pub const DIERR_NOTDOWNLOADED = @as(i32, -2147220989);
pub const DIERR_HASEFFECTS = @as(i32, -2147220988);
pub const DIERR_NOTEXCLUSIVEACQUIRED = @as(i32, -2147220987);
pub const DIERR_INCOMPLETEEFFECT = @as(i32, -2147220986);
pub const DIERR_NOTBUFFERED = @as(i32, -2147220985);
pub const DIERR_EFFECTPLAYING = @as(i32, -2147220984);
pub const DIERR_UNPLUGGED = @as(i32, -2147220983);
pub const DIERR_REPORTFULL = @as(i32, -2147220982);
pub const DIERR_MAPFILEFAIL = @as(i32, -2147220981);
pub const DIKEYBOARD_ESCAPE = @as(u32, 2164261889);
pub const DIKEYBOARD_1 = @as(u32, 2164261890);
pub const DIKEYBOARD_2 = @as(u32, 2164261891);
pub const DIKEYBOARD_3 = @as(u32, 2164261892);
pub const DIKEYBOARD_4 = @as(u32, 2164261893);
pub const DIKEYBOARD_5 = @as(u32, 2164261894);
pub const DIKEYBOARD_6 = @as(u32, 2164261895);
pub const DIKEYBOARD_7 = @as(u32, 2164261896);
pub const DIKEYBOARD_8 = @as(u32, 2164261897);
pub const DIKEYBOARD_9 = @as(u32, 2164261898);
pub const DIKEYBOARD_0 = @as(u32, 2164261899);
pub const DIKEYBOARD_MINUS = @as(u32, 2164261900);
pub const DIKEYBOARD_EQUALS = @as(u32, 2164261901);
pub const DIKEYBOARD_BACK = @as(u32, 2164261902);
pub const DIKEYBOARD_TAB = @as(u32, 2164261903);
pub const DIKEYBOARD_Q = @as(u32, 2164261904);
pub const DIKEYBOARD_W = @as(u32, 2164261905);
pub const DIKEYBOARD_E = @as(u32, 2164261906);
pub const DIKEYBOARD_R = @as(u32, 2164261907);
pub const DIKEYBOARD_T = @as(u32, 2164261908);
pub const DIKEYBOARD_Y = @as(u32, 2164261909);
pub const DIKEYBOARD_U = @as(u32, 2164261910);
pub const DIKEYBOARD_I = @as(u32, 2164261911);
pub const DIKEYBOARD_O = @as(u32, 2164261912);
pub const DIKEYBOARD_P = @as(u32, 2164261913);
pub const DIKEYBOARD_LBRACKET = @as(u32, 2164261914);
pub const DIKEYBOARD_RBRACKET = @as(u32, 2164261915);
pub const DIKEYBOARD_RETURN = @as(u32, 2164261916);
pub const DIKEYBOARD_LCONTROL = @as(u32, 2164261917);
pub const DIKEYBOARD_A = @as(u32, 2164261918);
pub const DIKEYBOARD_S = @as(u32, 2164261919);
pub const DIKEYBOARD_D = @as(u32, 2164261920);
pub const DIKEYBOARD_F = @as(u32, 2164261921);
pub const DIKEYBOARD_G = @as(u32, 2164261922);
pub const DIKEYBOARD_H = @as(u32, 2164261923);
pub const DIKEYBOARD_J = @as(u32, 2164261924);
pub const DIKEYBOARD_K = @as(u32, 2164261925);
pub const DIKEYBOARD_L = @as(u32, 2164261926);
pub const DIKEYBOARD_SEMICOLON = @as(u32, 2164261927);
pub const DIKEYBOARD_APOSTROPHE = @as(u32, 2164261928);
pub const DIKEYBOARD_GRAVE = @as(u32, 2164261929);
pub const DIKEYBOARD_LSHIFT = @as(u32, 2164261930);
pub const DIKEYBOARD_BACKSLASH = @as(u32, 2164261931);
pub const DIKEYBOARD_Z = @as(u32, 2164261932);
pub const DIKEYBOARD_X = @as(u32, 2164261933);
pub const DIKEYBOARD_C = @as(u32, 2164261934);
pub const DIKEYBOARD_V = @as(u32, 2164261935);
pub const DIKEYBOARD_B = @as(u32, 2164261936);
pub const DIKEYBOARD_N = @as(u32, 2164261937);
pub const DIKEYBOARD_M = @as(u32, 2164261938);
pub const DIKEYBOARD_COMMA = @as(u32, 2164261939);
pub const DIKEYBOARD_PERIOD = @as(u32, 2164261940);
pub const DIKEYBOARD_SLASH = @as(u32, 2164261941);
pub const DIKEYBOARD_RSHIFT = @as(u32, 2164261942);
pub const DIKEYBOARD_MULTIPLY = @as(u32, 2164261943);
pub const DIKEYBOARD_LMENU = @as(u32, 2164261944);
pub const DIKEYBOARD_SPACE = @as(u32, 2164261945);
pub const DIKEYBOARD_CAPITAL = @as(u32, 2164261946);
pub const DIKEYBOARD_F1 = @as(u32, 2164261947);
pub const DIKEYBOARD_F2 = @as(u32, 2164261948);
pub const DIKEYBOARD_F3 = @as(u32, 2164261949);
pub const DIKEYBOARD_F4 = @as(u32, 2164261950);
pub const DIKEYBOARD_F5 = @as(u32, 2164261951);
pub const DIKEYBOARD_F6 = @as(u32, 2164261952);
pub const DIKEYBOARD_F7 = @as(u32, 2164261953);
pub const DIKEYBOARD_F8 = @as(u32, 2164261954);
pub const DIKEYBOARD_F9 = @as(u32, 2164261955);
pub const DIKEYBOARD_F10 = @as(u32, 2164261956);
pub const DIKEYBOARD_NUMLOCK = @as(u32, 2164261957);
pub const DIKEYBOARD_SCROLL = @as(u32, 2164261958);
pub const DIKEYBOARD_NUMPAD7 = @as(u32, 2164261959);
pub const DIKEYBOARD_NUMPAD8 = @as(u32, 2164261960);
pub const DIKEYBOARD_NUMPAD9 = @as(u32, 2164261961);
pub const DIKEYBOARD_SUBTRACT = @as(u32, 2164261962);
pub const DIKEYBOARD_NUMPAD4 = @as(u32, 2164261963);
pub const DIKEYBOARD_NUMPAD5 = @as(u32, 2164261964);
pub const DIKEYBOARD_NUMPAD6 = @as(u32, 2164261965);
pub const DIKEYBOARD_ADD = @as(u32, 2164261966);
pub const DIKEYBOARD_NUMPAD1 = @as(u32, 2164261967);
pub const DIKEYBOARD_NUMPAD2 = @as(u32, 2164261968);
pub const DIKEYBOARD_NUMPAD3 = @as(u32, 2164261969);
pub const DIKEYBOARD_NUMPAD0 = @as(u32, 2164261970);
pub const DIKEYBOARD_DECIMAL = @as(u32, 2164261971);
pub const DIKEYBOARD_OEM_102 = @as(u32, 2164261974);
pub const DIKEYBOARD_F11 = @as(u32, 2164261975);
pub const DIKEYBOARD_F12 = @as(u32, 2164261976);
pub const DIKEYBOARD_F13 = @as(u32, 2164261988);
pub const DIKEYBOARD_F14 = @as(u32, 2164261989);
pub const DIKEYBOARD_F15 = @as(u32, 2164261990);
pub const DIKEYBOARD_KANA = @as(u32, 2164262000);
pub const DIKEYBOARD_ABNT_C1 = @as(u32, 2164262003);
pub const DIKEYBOARD_CONVERT = @as(u32, 2164262009);
pub const DIKEYBOARD_NOCONVERT = @as(u32, 2164262011);
pub const DIKEYBOARD_YEN = @as(u32, 2164262013);
pub const DIKEYBOARD_ABNT_C2 = @as(u32, 2164262014);
pub const DIKEYBOARD_NUMPADEQUALS = @as(u32, 2164262029);
pub const DIKEYBOARD_PREVTRACK = @as(u32, 2164262032);
pub const DIKEYBOARD_AT = @as(u32, 2164262033);
pub const DIKEYBOARD_COLON = @as(u32, 2164262034);
pub const DIKEYBOARD_UNDERLINE = @as(u32, 2164262035);
pub const DIKEYBOARD_KANJI = @as(u32, 2164262036);
pub const DIKEYBOARD_STOP = @as(u32, 2164262037);
pub const DIKEYBOARD_AX = @as(u32, 2164262038);
pub const DIKEYBOARD_UNLABELED = @as(u32, 2164262039);
pub const DIKEYBOARD_NEXTTRACK = @as(u32, 2164262041);
pub const DIKEYBOARD_NUMPADENTER = @as(u32, 2164262044);
pub const DIKEYBOARD_RCONTROL = @as(u32, 2164262045);
pub const DIKEYBOARD_MUTE = @as(u32, 2164262048);
pub const DIKEYBOARD_CALCULATOR = @as(u32, 2164262049);
pub const DIKEYBOARD_PLAYPAUSE = @as(u32, 2164262050);
pub const DIKEYBOARD_MEDIASTOP = @as(u32, 2164262052);
pub const DIKEYBOARD_VOLUMEDOWN = @as(u32, 2164262062);
pub const DIKEYBOARD_VOLUMEUP = @as(u32, 2164262064);
pub const DIKEYBOARD_WEBHOME = @as(u32, 2164262066);
pub const DIKEYBOARD_NUMPADCOMMA = @as(u32, 2164262067);
pub const DIKEYBOARD_DIVIDE = @as(u32, 2164262069);
pub const DIKEYBOARD_SYSRQ = @as(u32, 2164262071);
pub const DIKEYBOARD_RMENU = @as(u32, 2164262072);
pub const DIKEYBOARD_PAUSE = @as(u32, 2164262085);
pub const DIKEYBOARD_HOME = @as(u32, 2164262087);
pub const DIKEYBOARD_UP = @as(u32, 2164262088);
pub const DIKEYBOARD_PRIOR = @as(u32, 2164262089);
pub const DIKEYBOARD_LEFT = @as(u32, 2164262091);
pub const DIKEYBOARD_RIGHT = @as(u32, 2164262093);
pub const DIKEYBOARD_END = @as(u32, 2164262095);
pub const DIKEYBOARD_DOWN = @as(u32, 2164262096);
pub const DIKEYBOARD_NEXT = @as(u32, 2164262097);
pub const DIKEYBOARD_INSERT = @as(u32, 2164262098);
pub const DIKEYBOARD_DELETE = @as(u32, 2164262099);
pub const DIKEYBOARD_LWIN = @as(u32, 2164262107);
pub const DIKEYBOARD_RWIN = @as(u32, 2164262108);
pub const DIKEYBOARD_APPS = @as(u32, 2164262109);
pub const DIKEYBOARD_POWER = @as(u32, 2164262110);
pub const DIKEYBOARD_SLEEP = @as(u32, 2164262111);
pub const DIKEYBOARD_WAKE = @as(u32, 2164262115);
pub const DIKEYBOARD_WEBSEARCH = @as(u32, 2164262117);
pub const DIKEYBOARD_WEBFAVORITES = @as(u32, 2164262118);
pub const DIKEYBOARD_WEBREFRESH = @as(u32, 2164262119);
pub const DIKEYBOARD_WEBSTOP = @as(u32, 2164262120);
pub const DIKEYBOARD_WEBFORWARD = @as(u32, 2164262121);
pub const DIKEYBOARD_WEBBACK = @as(u32, 2164262122);
pub const DIKEYBOARD_MYCOMPUTER = @as(u32, 2164262123);
pub const DIKEYBOARD_MAIL = @as(u32, 2164262124);
pub const DIKEYBOARD_MEDIASELECT = @as(u32, 2164262125);
pub const DIVOICE_CHANNEL1 = @as(u32, 2197816321);
pub const DIVOICE_CHANNEL2 = @as(u32, 2197816322);
pub const DIVOICE_CHANNEL3 = @as(u32, 2197816323);
pub const DIVOICE_CHANNEL4 = @as(u32, 2197816324);
pub const DIVOICE_CHANNEL5 = @as(u32, 2197816325);
pub const DIVOICE_CHANNEL6 = @as(u32, 2197816326);
pub const DIVOICE_CHANNEL7 = @as(u32, 2197816327);
pub const DIVOICE_CHANNEL8 = @as(u32, 2197816328);
pub const DIVOICE_TEAM = @as(u32, 2197816329);
pub const DIVOICE_ALL = @as(u32, 2197816330);
pub const DIVOICE_RECORDMUTE = @as(u32, 2197816331);
pub const DIVOICE_PLAYBACKMUTE = @as(u32, 2197816332);
pub const DIVOICE_TRANSMIT = @as(u32, 2197816333);
pub const DIVOICE_VOICECOMMAND = @as(u32, 2197816336);
pub const DIVIRTUAL_DRIVING_RACE = @as(u32, 16777216);
pub const DIAXIS_DRIVINGR_STEER = @as(u32, 16812545);
pub const DIAXIS_DRIVINGR_ACCELERATE = @as(u32, 17011202);
pub const DIAXIS_DRIVINGR_BRAKE = @as(u32, 17043971);
pub const DIBUTTON_DRIVINGR_SHIFTUP = @as(u32, 16780289);
pub const DIBUTTON_DRIVINGR_SHIFTDOWN = @as(u32, 16780290);
pub const DIBUTTON_DRIVINGR_VIEW = @as(u32, 16784387);
pub const DIBUTTON_DRIVINGR_MENU = @as(u32, 16778493);
pub const DIAXIS_DRIVINGR_ACCEL_AND_BRAKE = @as(u32, 16861700);
pub const DIHATSWITCH_DRIVINGR_GLANCE = @as(u32, 16795137);
pub const DIBUTTON_DRIVINGR_BRAKE = @as(u32, 16796676);
pub const DIBUTTON_DRIVINGR_DASHBOARD = @as(u32, 16794629);
pub const DIBUTTON_DRIVINGR_AIDS = @as(u32, 16794630);
pub const DIBUTTON_DRIVINGR_MAP = @as(u32, 16794631);
pub const DIBUTTON_DRIVINGR_BOOST = @as(u32, 16794632);
pub const DIBUTTON_DRIVINGR_PIT = @as(u32, 16794633);
pub const DIBUTTON_DRIVINGR_ACCELERATE_LINK = @as(u32, 17028320);
pub const DIBUTTON_DRIVINGR_STEER_LEFT_LINK = @as(u32, 16829668);
pub const DIBUTTON_DRIVINGR_STEER_RIGHT_LINK = @as(u32, 16829676);
pub const DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK = @as(u32, 17286372);
pub const DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK = @as(u32, 17286380);
pub const DIBUTTON_DRIVINGR_DEVICE = @as(u32, 16794878);
pub const DIBUTTON_DRIVINGR_PAUSE = @as(u32, 16794876);
pub const DIVIRTUAL_DRIVING_COMBAT = @as(u32, 33554432);
pub const DIAXIS_DRIVINGC_STEER = @as(u32, 33589761);
pub const DIAXIS_DRIVINGC_ACCELERATE = @as(u32, 33788418);
pub const DIAXIS_DRIVINGC_BRAKE = @as(u32, 33821187);
pub const DIBUTTON_DRIVINGC_FIRE = @as(u32, 33557505);
pub const DIBUTTON_DRIVINGC_WEAPONS = @as(u32, 33557506);
pub const DIBUTTON_DRIVINGC_TARGET = @as(u32, 33557507);
pub const DIBUTTON_DRIVINGC_MENU = @as(u32, 33555709);
pub const DIAXIS_DRIVINGC_ACCEL_AND_BRAKE = @as(u32, 33638916);
pub const DIHATSWITCH_DRIVINGC_GLANCE = @as(u32, 33572353);
pub const DIBUTTON_DRIVINGC_SHIFTUP = @as(u32, 33573892);
pub const DIBUTTON_DRIVINGC_SHIFTDOWN = @as(u32, 33573893);
pub const DIBUTTON_DRIVINGC_DASHBOARD = @as(u32, 33571846);
pub const DIBUTTON_DRIVINGC_AIDS = @as(u32, 33571847);
pub const DIBUTTON_DRIVINGC_BRAKE = @as(u32, 33573896);
pub const DIBUTTON_DRIVINGC_FIRESECONDARY = @as(u32, 33573897);
pub const DIBUTTON_DRIVINGC_ACCELERATE_LINK = @as(u32, 33805536);
pub const DIBUTTON_DRIVINGC_STEER_LEFT_LINK = @as(u32, 33606884);
pub const DIBUTTON_DRIVINGC_STEER_RIGHT_LINK = @as(u32, 33606892);
pub const DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK = @as(u32, 34063588);
pub const DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK = @as(u32, 34063596);
pub const DIBUTTON_DRIVINGC_DEVICE = @as(u32, 33572094);
pub const DIBUTTON_DRIVINGC_PAUSE = @as(u32, 33572092);
pub const DIVIRTUAL_DRIVING_TANK = @as(u32, 50331648);
pub const DIAXIS_DRIVINGT_STEER = @as(u32, 50366977);
pub const DIAXIS_DRIVINGT_BARREL = @as(u32, 50397698);
pub const DIAXIS_DRIVINGT_ACCELERATE = @as(u32, 50565635);
pub const DIAXIS_DRIVINGT_ROTATE = @as(u32, 50463236);
pub const DIBUTTON_DRIVINGT_FIRE = @as(u32, 50334721);
pub const DIBUTTON_DRIVINGT_WEAPONS = @as(u32, 50334722);
pub const DIBUTTON_DRIVINGT_TARGET = @as(u32, 50334723);
pub const DIBUTTON_DRIVINGT_MENU = @as(u32, 50332925);
pub const DIHATSWITCH_DRIVINGT_GLANCE = @as(u32, 50349569);
pub const DIAXIS_DRIVINGT_BRAKE = @as(u32, 50614789);
pub const DIAXIS_DRIVINGT_ACCEL_AND_BRAKE = @as(u32, 50416134);
pub const DIBUTTON_DRIVINGT_VIEW = @as(u32, 50355204);
pub const DIBUTTON_DRIVINGT_DASHBOARD = @as(u32, 50355205);
pub const DIBUTTON_DRIVINGT_BRAKE = @as(u32, 50351110);
pub const DIBUTTON_DRIVINGT_FIRESECONDARY = @as(u32, 50351111);
pub const DIBUTTON_DRIVINGT_ACCELERATE_LINK = @as(u32, 50582752);
pub const DIBUTTON_DRIVINGT_STEER_LEFT_LINK = @as(u32, 50384100);
pub const DIBUTTON_DRIVINGT_STEER_RIGHT_LINK = @as(u32, 50384108);
pub const DIBUTTON_DRIVINGT_BARREL_UP_LINK = @as(u32, 50414816);
pub const DIBUTTON_DRIVINGT_BARREL_DOWN_LINK = @as(u32, 50414824);
pub const DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK = @as(u32, 50480356);
pub const DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK = @as(u32, 50480364);
pub const DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK = @as(u32, 50840804);
pub const DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK = @as(u32, 50840812);
pub const DIBUTTON_DRIVINGT_DEVICE = @as(u32, 50349310);
pub const DIBUTTON_DRIVINGT_PAUSE = @as(u32, 50349308);
pub const DIVIRTUAL_FLYING_CIVILIAN = @as(u32, 67108864);
pub const DIAXIS_FLYINGC_BANK = @as(u32, 67144193);
pub const DIAXIS_FLYINGC_PITCH = @as(u32, 67176962);
pub const DIAXIS_FLYINGC_THROTTLE = @as(u32, 67342851);
pub const DIBUTTON_FLYINGC_VIEW = @as(u32, 67118081);
pub const DIBUTTON_FLYINGC_DISPLAY = @as(u32, 67118082);
pub const DIBUTTON_FLYINGC_GEAR = @as(u32, 67120131);
pub const DIBUTTON_FLYINGC_MENU = @as(u32, 67110141);
pub const DIHATSWITCH_FLYINGC_GLANCE = @as(u32, 67126785);
pub const DIAXIS_FLYINGC_BRAKE = @as(u32, 67398148);
pub const DIAXIS_FLYINGC_RUDDER = @as(u32, 67260933);
pub const DIAXIS_FLYINGC_FLAPS = @as(u32, 67459590);
pub const DIBUTTON_FLYINGC_FLAPSUP = @as(u32, 67134468);
pub const DIBUTTON_FLYINGC_FLAPSDOWN = @as(u32, 67134469);
pub const DIBUTTON_FLYINGC_BRAKE_LINK = @as(u32, 67398880);
pub const DIBUTTON_FLYINGC_FASTER_LINK = @as(u32, 67359968);
pub const DIBUTTON_FLYINGC_SLOWER_LINK = @as(u32, 67359976);
pub const DIBUTTON_FLYINGC_GLANCE_LEFT_LINK = @as(u32, 67618020);
pub const DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK = @as(u32, 67618028);
pub const DIBUTTON_FLYINGC_GLANCE_UP_LINK = @as(u32, 67618016);
pub const DIBUTTON_FLYINGC_GLANCE_DOWN_LINK = @as(u32, 67618024);
pub const DIBUTTON_FLYINGC_DEVICE = @as(u32, 67126526);
pub const DIBUTTON_FLYINGC_PAUSE = @as(u32, 67126524);
pub const DIVIRTUAL_FLYING_MILITARY = @as(u32, 83886080);
pub const DIAXIS_FLYINGM_BANK = @as(u32, 83921409);
pub const DIAXIS_FLYINGM_PITCH = @as(u32, 83954178);
pub const DIAXIS_FLYINGM_THROTTLE = @as(u32, 84120067);
pub const DIBUTTON_FLYINGM_FIRE = @as(u32, 83889153);
pub const DIBUTTON_FLYINGM_WEAPONS = @as(u32, 83889154);
pub const DIBUTTON_FLYINGM_TARGET = @as(u32, 83889155);
pub const DIBUTTON_FLYINGM_MENU = @as(u32, 83887357);
pub const DIHATSWITCH_FLYINGM_GLANCE = @as(u32, 83904001);
pub const DIBUTTON_FLYINGM_COUNTER = @as(u32, 83909636);
pub const DIAXIS_FLYINGM_RUDDER = @as(u32, 84036100);
pub const DIAXIS_FLYINGM_BRAKE = @as(u32, 84173317);
pub const DIBUTTON_FLYINGM_VIEW = @as(u32, 83911685);
pub const DIBUTTON_FLYINGM_DISPLAY = @as(u32, 83911686);
pub const DIAXIS_FLYINGM_FLAPS = @as(u32, 84234758);
pub const DIBUTTON_FLYINGM_FLAPSUP = @as(u32, 83907591);
pub const DIBUTTON_FLYINGM_FLAPSDOWN = @as(u32, 83907592);
pub const DIBUTTON_FLYINGM_FIRESECONDARY = @as(u32, 83905545);
pub const DIBUTTON_FLYINGM_GEAR = @as(u32, 83911690);
pub const DIBUTTON_FLYINGM_BRAKE_LINK = @as(u32, 84174048);
pub const DIBUTTON_FLYINGM_FASTER_LINK = @as(u32, 84137184);
pub const DIBUTTON_FLYINGM_SLOWER_LINK = @as(u32, 84137192);
pub const DIBUTTON_FLYINGM_GLANCE_LEFT_LINK = @as(u32, 84395236);
pub const DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK = @as(u32, 84395244);
pub const DIBUTTON_FLYINGM_GLANCE_UP_LINK = @as(u32, 84395232);
pub const DIBUTTON_FLYINGM_GLANCE_DOWN_LINK = @as(u32, 84395240);
pub const DIBUTTON_FLYINGM_DEVICE = @as(u32, 83903742);
pub const DIBUTTON_FLYINGM_PAUSE = @as(u32, 83903740);
pub const DIVIRTUAL_FLYING_HELICOPTER = @as(u32, 100663296);
pub const DIAXIS_FLYINGH_BANK = @as(u32, 100698625);
pub const DIAXIS_FLYINGH_PITCH = @as(u32, 100731394);
pub const DIAXIS_FLYINGH_COLLECTIVE = @as(u32, 100764163);
pub const DIBUTTON_FLYINGH_FIRE = @as(u32, 100668417);
pub const DIBUTTON_FLYINGH_WEAPONS = @as(u32, 100668418);
pub const DIBUTTON_FLYINGH_TARGET = @as(u32, 100668419);
pub const DIBUTTON_FLYINGH_MENU = @as(u32, 100664573);
pub const DIHATSWITCH_FLYINGH_GLANCE = @as(u32, 100681217);
pub const DIAXIS_FLYINGH_TORQUE = @as(u32, 100817412);
pub const DIAXIS_FLYINGH_THROTTLE = @as(u32, 100915717);
pub const DIBUTTON_FLYINGH_COUNTER = @as(u32, 100684804);
pub const DIBUTTON_FLYINGH_VIEW = @as(u32, 100688901);
pub const DIBUTTON_FLYINGH_GEAR = @as(u32, 100688902);
pub const DIBUTTON_FLYINGH_FIRESECONDARY = @as(u32, 100682759);
pub const DIBUTTON_FLYINGH_FASTER_LINK = @as(u32, 100916448);
pub const DIBUTTON_FLYINGH_SLOWER_LINK = @as(u32, 100916456);
pub const DIBUTTON_FLYINGH_GLANCE_LEFT_LINK = @as(u32, 101172452);
pub const DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK = @as(u32, 101172460);
pub const DIBUTTON_FLYINGH_GLANCE_UP_LINK = @as(u32, 101172448);
pub const DIBUTTON_FLYINGH_GLANCE_DOWN_LINK = @as(u32, 101172456);
pub const DIBUTTON_FLYINGH_DEVICE = @as(u32, 100680958);
pub const DIBUTTON_FLYINGH_PAUSE = @as(u32, 100680956);
pub const DIVIRTUAL_SPACESIM = @as(u32, 117440512);
pub const DIAXIS_SPACESIM_LATERAL = @as(u32, 117473793);
pub const DIAXIS_SPACESIM_MOVE = @as(u32, 117506562);
pub const DIAXIS_SPACESIM_THROTTLE = @as(u32, 117670403);
pub const DIBUTTON_SPACESIM_FIRE = @as(u32, 117441537);
pub const DIBUTTON_SPACESIM_WEAPONS = @as(u32, 117441538);
pub const DIBUTTON_SPACESIM_TARGET = @as(u32, 117441539);
pub const DIBUTTON_SPACESIM_MENU = @as(u32, 117441789);
pub const DIHATSWITCH_SPACESIM_GLANCE = @as(u32, 117458433);
pub const DIAXIS_SPACESIM_CLIMB = @as(u32, 117555716);
pub const DIAXIS_SPACESIM_ROTATE = @as(u32, 117588485);
pub const DIBUTTON_SPACESIM_VIEW = @as(u32, 117457924);
pub const DIBUTTON_SPACESIM_DISPLAY = @as(u32, 117457925);
pub const DIBUTTON_SPACESIM_RAISE = @as(u32, 117457926);
pub const DIBUTTON_SPACESIM_LOWER = @as(u32, 117457927);
pub const DIBUTTON_SPACESIM_GEAR = @as(u32, 117457928);
pub const DIBUTTON_SPACESIM_FIRESECONDARY = @as(u32, 117457929);
pub const DIBUTTON_SPACESIM_LEFT_LINK = @as(u32, 117490916);
pub const DIBUTTON_SPACESIM_RIGHT_LINK = @as(u32, 117490924);
pub const DIBUTTON_SPACESIM_FORWARD_LINK = @as(u32, 117523680);
pub const DIBUTTON_SPACESIM_BACKWARD_LINK = @as(u32, 117523688);
pub const DIBUTTON_SPACESIM_FASTER_LINK = @as(u32, 117687520);
pub const DIBUTTON_SPACESIM_SLOWER_LINK = @as(u32, 117687528);
pub const DIBUTTON_SPACESIM_TURN_LEFT_LINK = @as(u32, 117589220);
pub const DIBUTTON_SPACESIM_TURN_RIGHT_LINK = @as(u32, 117589228);
pub const DIBUTTON_SPACESIM_GLANCE_LEFT_LINK = @as(u32, 117949668);
pub const DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK = @as(u32, 117949676);
pub const DIBUTTON_SPACESIM_GLANCE_UP_LINK = @as(u32, 117949664);
pub const DIBUTTON_SPACESIM_GLANCE_DOWN_LINK = @as(u32, 117949672);
pub const DIBUTTON_SPACESIM_DEVICE = @as(u32, 117458174);
pub const DIBUTTON_SPACESIM_PAUSE = @as(u32, 117458172);
pub const DIVIRTUAL_FIGHTING_HAND2HAND = @as(u32, 134217728);
pub const DIAXIS_FIGHTINGH_LATERAL = @as(u32, 134251009);
pub const DIAXIS_FIGHTINGH_MOVE = @as(u32, 134283778);
pub const DIBUTTON_FIGHTINGH_PUNCH = @as(u32, 134218753);
pub const DIBUTTON_FIGHTINGH_KICK = @as(u32, 134218754);
pub const DIBUTTON_FIGHTINGH_BLOCK = @as(u32, 134218755);
pub const DIBUTTON_FIGHTINGH_CROUCH = @as(u32, 134218756);
pub const DIBUTTON_FIGHTINGH_JUMP = @as(u32, 134218757);
pub const DIBUTTON_FIGHTINGH_SPECIAL1 = @as(u32, 134218758);
pub const DIBUTTON_FIGHTINGH_SPECIAL2 = @as(u32, 134218759);
pub const DIBUTTON_FIGHTINGH_MENU = @as(u32, 134219005);
pub const DIBUTTON_FIGHTINGH_SELECT = @as(u32, 134235144);
pub const DIHATSWITCH_FIGHTINGH_SLIDE = @as(u32, 134235649);
pub const DIBUTTON_FIGHTINGH_DISPLAY = @as(u32, 134235145);
pub const DIAXIS_FIGHTINGH_ROTATE = @as(u32, 134365699);
pub const DIBUTTON_FIGHTINGH_DODGE = @as(u32, 134235146);
pub const DIBUTTON_FIGHTINGH_LEFT_LINK = @as(u32, 134268132);
pub const DIBUTTON_FIGHTINGH_RIGHT_LINK = @as(u32, 134268140);
pub const DIBUTTON_FIGHTINGH_FORWARD_LINK = @as(u32, 134300896);
pub const DIBUTTON_FIGHTINGH_BACKWARD_LINK = @as(u32, 134300904);
pub const DIBUTTON_FIGHTINGH_DEVICE = @as(u32, 134235390);
pub const DIBUTTON_FIGHTINGH_PAUSE = @as(u32, 134235388);
pub const DIVIRTUAL_FIGHTING_FPS = @as(u32, 150994944);
pub const DIAXIS_FPS_ROTATE = @as(u32, 151028225);
pub const DIAXIS_FPS_MOVE = @as(u32, 151060994);
pub const DIBUTTON_FPS_FIRE = @as(u32, 150995969);
pub const DIBUTTON_FPS_WEAPONS = @as(u32, 150995970);
pub const DIBUTTON_FPS_APPLY = @as(u32, 150995971);
pub const DIBUTTON_FPS_SELECT = @as(u32, 150995972);
pub const DIBUTTON_FPS_CROUCH = @as(u32, 150995973);
pub const DIBUTTON_FPS_JUMP = @as(u32, 150995974);
pub const DIAXIS_FPS_LOOKUPDOWN = @as(u32, 151093763);
pub const DIBUTTON_FPS_STRAFE = @as(u32, 150995975);
pub const DIBUTTON_FPS_MENU = @as(u32, 150996221);
pub const DIHATSWITCH_FPS_GLANCE = @as(u32, 151012865);
pub const DIBUTTON_FPS_DISPLAY = @as(u32, 151012360);
pub const DIAXIS_FPS_SIDESTEP = @as(u32, 151142916);
pub const DIBUTTON_FPS_DODGE = @as(u32, 151012361);
pub const DIBUTTON_FPS_GLANCEL = @as(u32, 151012362);
pub const DIBUTTON_FPS_GLANCER = @as(u32, 151012363);
pub const DIBUTTON_FPS_FIRESECONDARY = @as(u32, 151012364);
pub const DIBUTTON_FPS_ROTATE_LEFT_LINK = @as(u32, 151045348);
pub const DIBUTTON_FPS_ROTATE_RIGHT_LINK = @as(u32, 151045356);
pub const DIBUTTON_FPS_FORWARD_LINK = @as(u32, 151078112);
pub const DIBUTTON_FPS_BACKWARD_LINK = @as(u32, 151078120);
pub const DIBUTTON_FPS_GLANCE_UP_LINK = @as(u32, 151110880);
pub const DIBUTTON_FPS_GLANCE_DOWN_LINK = @as(u32, 151110888);
pub const DIBUTTON_FPS_STEP_LEFT_LINK = @as(u32, 151143652);
pub const DIBUTTON_FPS_STEP_RIGHT_LINK = @as(u32, 151143660);
pub const DIBUTTON_FPS_DEVICE = @as(u32, 151012606);
pub const DIBUTTON_FPS_PAUSE = @as(u32, 151012604);
pub const DIVIRTUAL_FIGHTING_THIRDPERSON = @as(u32, 167772160);
pub const DIAXIS_TPS_TURN = @as(u32, 167903745);
pub const DIAXIS_TPS_MOVE = @as(u32, 167838210);
pub const DIBUTTON_TPS_RUN = @as(u32, 167773185);
pub const DIBUTTON_TPS_ACTION = @as(u32, 167773186);
pub const DIBUTTON_TPS_SELECT = @as(u32, 167773187);
pub const DIBUTTON_TPS_USE = @as(u32, 167773188);
pub const DIBUTTON_TPS_JUMP = @as(u32, 167773189);
pub const DIBUTTON_TPS_MENU = @as(u32, 167773437);
pub const DIHATSWITCH_TPS_GLANCE = @as(u32, 167790081);
pub const DIBUTTON_TPS_VIEW = @as(u32, 167789574);
pub const DIBUTTON_TPS_STEPLEFT = @as(u32, 167789575);
pub const DIBUTTON_TPS_STEPRIGHT = @as(u32, 167789576);
pub const DIAXIS_TPS_STEP = @as(u32, 167821827);
pub const DIBUTTON_TPS_DODGE = @as(u32, 167789577);
pub const DIBUTTON_TPS_INVENTORY = @as(u32, 167789578);
pub const DIBUTTON_TPS_TURN_LEFT_LINK = @as(u32, 167920868);
pub const DIBUTTON_TPS_TURN_RIGHT_LINK = @as(u32, 167920876);
pub const DIBUTTON_TPS_FORWARD_LINK = @as(u32, 167855328);
pub const DIBUTTON_TPS_BACKWARD_LINK = @as(u32, 167855336);
pub const DIBUTTON_TPS_GLANCE_UP_LINK = @as(u32, 168281312);
pub const DIBUTTON_TPS_GLANCE_DOWN_LINK = @as(u32, 168281320);
pub const DIBUTTON_TPS_GLANCE_LEFT_LINK = @as(u32, 168281316);
pub const DIBUTTON_TPS_GLANCE_RIGHT_LINK = @as(u32, 168281324);
pub const DIBUTTON_TPS_DEVICE = @as(u32, 167789822);
pub const DIBUTTON_TPS_PAUSE = @as(u32, 167789820);
pub const DIVIRTUAL_STRATEGY_ROLEPLAYING = @as(u32, 184549376);
pub const DIAXIS_STRATEGYR_LATERAL = @as(u32, 184582657);
pub const DIAXIS_STRATEGYR_MOVE = @as(u32, 184615426);
pub const DIBUTTON_STRATEGYR_GET = @as(u32, 184550401);
pub const DIBUTTON_STRATEGYR_APPLY = @as(u32, 184550402);
pub const DIBUTTON_STRATEGYR_SELECT = @as(u32, 184550403);
pub const DIBUTTON_STRATEGYR_ATTACK = @as(u32, 184550404);
pub const DIBUTTON_STRATEGYR_CAST = @as(u32, 184550405);
pub const DIBUTTON_STRATEGYR_CROUCH = @as(u32, 184550406);
pub const DIBUTTON_STRATEGYR_JUMP = @as(u32, 184550407);
pub const DIBUTTON_STRATEGYR_MENU = @as(u32, 184550653);
pub const DIHATSWITCH_STRATEGYR_GLANCE = @as(u32, 184567297);
pub const DIBUTTON_STRATEGYR_MAP = @as(u32, 184566792);
pub const DIBUTTON_STRATEGYR_DISPLAY = @as(u32, 184566793);
pub const DIAXIS_STRATEGYR_ROTATE = @as(u32, 184697347);
pub const DIBUTTON_STRATEGYR_LEFT_LINK = @as(u32, 184599780);
pub const DIBUTTON_STRATEGYR_RIGHT_LINK = @as(u32, 184599788);
pub const DIBUTTON_STRATEGYR_FORWARD_LINK = @as(u32, 184632544);
pub const DIBUTTON_STRATEGYR_BACK_LINK = @as(u32, 184632552);
pub const DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK = @as(u32, 184698084);
pub const DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK = @as(u32, 184698092);
pub const DIBUTTON_STRATEGYR_DEVICE = @as(u32, 184567038);
pub const DIBUTTON_STRATEGYR_PAUSE = @as(u32, 184567036);
pub const DIVIRTUAL_STRATEGY_TURN = @as(u32, 201326592);
pub const DIAXIS_STRATEGYT_LATERAL = @as(u32, 201359873);
pub const DIAXIS_STRATEGYT_MOVE = @as(u32, 201392642);
pub const DIBUTTON_STRATEGYT_SELECT = @as(u32, 201327617);
pub const DIBUTTON_STRATEGYT_INSTRUCT = @as(u32, 201327618);
pub const DIBUTTON_STRATEGYT_APPLY = @as(u32, 201327619);
pub const DIBUTTON_STRATEGYT_TEAM = @as(u32, 201327620);
pub const DIBUTTON_STRATEGYT_TURN = @as(u32, 201327621);
pub const DIBUTTON_STRATEGYT_MENU = @as(u32, 201327869);
pub const DIBUTTON_STRATEGYT_ZOOM = @as(u32, 201344006);
pub const DIBUTTON_STRATEGYT_MAP = @as(u32, 201344007);
pub const DIBUTTON_STRATEGYT_DISPLAY = @as(u32, 201344008);
pub const DIBUTTON_STRATEGYT_LEFT_LINK = @as(u32, 201376996);
pub const DIBUTTON_STRATEGYT_RIGHT_LINK = @as(u32, 201377004);
pub const DIBUTTON_STRATEGYT_FORWARD_LINK = @as(u32, 201409760);
pub const DIBUTTON_STRATEGYT_BACK_LINK = @as(u32, 201409768);
pub const DIBUTTON_STRATEGYT_DEVICE = @as(u32, 201344254);
pub const DIBUTTON_STRATEGYT_PAUSE = @as(u32, 201344252);
pub const DIVIRTUAL_SPORTS_HUNTING = @as(u32, 218103808);
pub const DIAXIS_HUNTING_LATERAL = @as(u32, 218137089);
pub const DIAXIS_HUNTING_MOVE = @as(u32, 218169858);
pub const DIBUTTON_HUNTING_FIRE = @as(u32, 218104833);
pub const DIBUTTON_HUNTING_AIM = @as(u32, 218104834);
pub const DIBUTTON_HUNTING_WEAPON = @as(u32, 218104835);
pub const DIBUTTON_HUNTING_BINOCULAR = @as(u32, 218104836);
pub const DIBUTTON_HUNTING_CALL = @as(u32, 218104837);
pub const DIBUTTON_HUNTING_MAP = @as(u32, 218104838);
pub const DIBUTTON_HUNTING_SPECIAL = @as(u32, 218104839);
pub const DIBUTTON_HUNTING_MENU = @as(u32, 218105085);
pub const DIHATSWITCH_HUNTING_GLANCE = @as(u32, 218121729);
pub const DIBUTTON_HUNTING_DISPLAY = @as(u32, 218121224);
pub const DIAXIS_HUNTING_ROTATE = @as(u32, 218251779);
pub const DIBUTTON_HUNTING_CROUCH = @as(u32, 218121225);
pub const DIBUTTON_HUNTING_JUMP = @as(u32, 218121226);
pub const DIBUTTON_HUNTING_FIRESECONDARY = @as(u32, 218121227);
pub const DIBUTTON_HUNTING_LEFT_LINK = @as(u32, 218154212);
pub const DIBUTTON_HUNTING_RIGHT_LINK = @as(u32, 218154220);
pub const DIBUTTON_HUNTING_FORWARD_LINK = @as(u32, 218186976);
pub const DIBUTTON_HUNTING_BACK_LINK = @as(u32, 218186984);
pub const DIBUTTON_HUNTING_ROTATE_LEFT_LINK = @as(u32, 218252516);
pub const DIBUTTON_HUNTING_ROTATE_RIGHT_LINK = @as(u32, 218252524);
pub const DIBUTTON_HUNTING_DEVICE = @as(u32, 218121470);
pub const DIBUTTON_HUNTING_PAUSE = @as(u32, 218121468);
pub const DIVIRTUAL_SPORTS_FISHING = @as(u32, 234881024);
pub const DIAXIS_FISHING_LATERAL = @as(u32, 234914305);
pub const DIAXIS_FISHING_MOVE = @as(u32, 234947074);
pub const DIBUTTON_FISHING_CAST = @as(u32, 234882049);
pub const DIBUTTON_FISHING_TYPE = @as(u32, 234882050);
pub const DIBUTTON_FISHING_BINOCULAR = @as(u32, 234882051);
pub const DIBUTTON_FISHING_BAIT = @as(u32, 234882052);
pub const DIBUTTON_FISHING_MAP = @as(u32, 234882053);
pub const DIBUTTON_FISHING_MENU = @as(u32, 234882301);
pub const DIHATSWITCH_FISHING_GLANCE = @as(u32, 234898945);
pub const DIBUTTON_FISHING_DISPLAY = @as(u32, 234898438);
pub const DIAXIS_FISHING_ROTATE = @as(u32, 235028995);
pub const DIBUTTON_FISHING_CROUCH = @as(u32, 234898439);
pub const DIBUTTON_FISHING_JUMP = @as(u32, 234898440);
pub const DIBUTTON_FISHING_LEFT_LINK = @as(u32, 234931428);
pub const DIBUTTON_FISHING_RIGHT_LINK = @as(u32, 234931436);
pub const DIBUTTON_FISHING_FORWARD_LINK = @as(u32, 234964192);
pub const DIBUTTON_FISHING_BACK_LINK = @as(u32, 234964200);
pub const DIBUTTON_FISHING_ROTATE_LEFT_LINK = @as(u32, 235029732);
pub const DIBUTTON_FISHING_ROTATE_RIGHT_LINK = @as(u32, 235029740);
pub const DIBUTTON_FISHING_DEVICE = @as(u32, 234898686);
pub const DIBUTTON_FISHING_PAUSE = @as(u32, 234898684);
pub const DIVIRTUAL_SPORTS_BASEBALL_BAT = @as(u32, 251658240);
pub const DIAXIS_BASEBALLB_LATERAL = @as(u32, 251691521);
pub const DIAXIS_BASEBALLB_MOVE = @as(u32, 251724290);
pub const DIBUTTON_BASEBALLB_SELECT = @as(u32, 251659265);
pub const DIBUTTON_BASEBALLB_NORMAL = @as(u32, 251659266);
pub const DIBUTTON_BASEBALLB_POWER = @as(u32, 251659267);
pub const DIBUTTON_BASEBALLB_BUNT = @as(u32, 251659268);
pub const DIBUTTON_BASEBALLB_STEAL = @as(u32, 251659269);
pub const DIBUTTON_BASEBALLB_BURST = @as(u32, 251659270);
pub const DIBUTTON_BASEBALLB_SLIDE = @as(u32, 251659271);
pub const DIBUTTON_BASEBALLB_CONTACT = @as(u32, 251659272);
pub const DIBUTTON_BASEBALLB_MENU = @as(u32, 251659517);
pub const DIBUTTON_BASEBALLB_NOSTEAL = @as(u32, 251675657);
pub const DIBUTTON_BASEBALLB_BOX = @as(u32, 251675658);
pub const DIBUTTON_BASEBALLB_LEFT_LINK = @as(u32, 251708644);
pub const DIBUTTON_BASEBALLB_RIGHT_LINK = @as(u32, 251708652);
pub const DIBUTTON_BASEBALLB_FORWARD_LINK = @as(u32, 251741408);
pub const DIBUTTON_BASEBALLB_BACK_LINK = @as(u32, 251741416);
pub const DIBUTTON_BASEBALLB_DEVICE = @as(u32, 251675902);
pub const DIBUTTON_BASEBALLB_PAUSE = @as(u32, 251675900);
pub const DIVIRTUAL_SPORTS_BASEBALL_PITCH = @as(u32, 268435456);
pub const DIAXIS_BASEBALLP_LATERAL = @as(u32, 268468737);
pub const DIAXIS_BASEBALLP_MOVE = @as(u32, 268501506);
pub const DIBUTTON_BASEBALLP_SELECT = @as(u32, 268436481);
pub const DIBUTTON_BASEBALLP_PITCH = @as(u32, 268436482);
pub const DIBUTTON_BASEBALLP_BASE = @as(u32, 268436483);
pub const DIBUTTON_BASEBALLP_THROW = @as(u32, 268436484);
pub const DIBUTTON_BASEBALLP_FAKE = @as(u32, 268436485);
pub const DIBUTTON_BASEBALLP_MENU = @as(u32, 268436733);
pub const DIBUTTON_BASEBALLP_WALK = @as(u32, 268452870);
pub const DIBUTTON_BASEBALLP_LOOK = @as(u32, 268452871);
pub const DIBUTTON_BASEBALLP_LEFT_LINK = @as(u32, 268485860);
pub const DIBUTTON_BASEBALLP_RIGHT_LINK = @as(u32, 268485868);
pub const DIBUTTON_BASEBALLP_FORWARD_LINK = @as(u32, 268518624);
pub const DIBUTTON_BASEBALLP_BACK_LINK = @as(u32, 268518632);
pub const DIBUTTON_BASEBALLP_DEVICE = @as(u32, 268453118);
pub const DIBUTTON_BASEBALLP_PAUSE = @as(u32, 268453116);
pub const DIVIRTUAL_SPORTS_BASEBALL_FIELD = @as(u32, 285212672);
pub const DIAXIS_BASEBALLF_LATERAL = @as(u32, 285245953);
pub const DIAXIS_BASEBALLF_MOVE = @as(u32, 285278722);
pub const DIBUTTON_BASEBALLF_NEAREST = @as(u32, 285213697);
pub const DIBUTTON_BASEBALLF_THROW1 = @as(u32, 285213698);
pub const DIBUTTON_BASEBALLF_THROW2 = @as(u32, 285213699);
pub const DIBUTTON_BASEBALLF_BURST = @as(u32, 285213700);
pub const DIBUTTON_BASEBALLF_JUMP = @as(u32, 285213701);
pub const DIBUTTON_BASEBALLF_DIVE = @as(u32, 285213702);
pub const DIBUTTON_BASEBALLF_MENU = @as(u32, 285213949);
pub const DIBUTTON_BASEBALLF_SHIFTIN = @as(u32, 285230087);
pub const DIBUTTON_BASEBALLF_SHIFTOUT = @as(u32, 285230088);
pub const DIBUTTON_BASEBALLF_AIM_LEFT_LINK = @as(u32, 285263076);
pub const DIBUTTON_BASEBALLF_AIM_RIGHT_LINK = @as(u32, 285263084);
pub const DIBUTTON_BASEBALLF_FORWARD_LINK = @as(u32, 285295840);
pub const DIBUTTON_BASEBALLF_BACK_LINK = @as(u32, 285295848);
pub const DIBUTTON_BASEBALLF_DEVICE = @as(u32, 285230334);
pub const DIBUTTON_BASEBALLF_PAUSE = @as(u32, 285230332);
pub const DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE = @as(u32, 301989888);
pub const DIAXIS_BBALLO_LATERAL = @as(u32, 302023169);
pub const DIAXIS_BBALLO_MOVE = @as(u32, 302055938);
pub const DIBUTTON_BBALLO_SHOOT = @as(u32, 301990913);
pub const DIBUTTON_BBALLO_DUNK = @as(u32, 301990914);
pub const DIBUTTON_BBALLO_PASS = @as(u32, 301990915);
pub const DIBUTTON_BBALLO_FAKE = @as(u32, 301990916);
pub const DIBUTTON_BBALLO_SPECIAL = @as(u32, 301990917);
pub const DIBUTTON_BBALLO_PLAYER = @as(u32, 301990918);
pub const DIBUTTON_BBALLO_BURST = @as(u32, 301990919);
pub const DIBUTTON_BBALLO_CALL = @as(u32, 301990920);
pub const DIBUTTON_BBALLO_MENU = @as(u32, 301991165);
pub const DIHATSWITCH_BBALLO_GLANCE = @as(u32, 302007809);
pub const DIBUTTON_BBALLO_SCREEN = @as(u32, 302007305);
pub const DIBUTTON_BBALLO_PLAY = @as(u32, 302007306);
pub const DIBUTTON_BBALLO_JAB = @as(u32, 302007307);
pub const DIBUTTON_BBALLO_POST = @as(u32, 302007308);
pub const DIBUTTON_BBALLO_TIMEOUT = @as(u32, 302007309);
pub const DIBUTTON_BBALLO_SUBSTITUTE = @as(u32, 302007310);
pub const DIBUTTON_BBALLO_LEFT_LINK = @as(u32, 302040292);
pub const DIBUTTON_BBALLO_RIGHT_LINK = @as(u32, 302040300);
pub const DIBUTTON_BBALLO_FORWARD_LINK = @as(u32, 302073056);
pub const DIBUTTON_BBALLO_BACK_LINK = @as(u32, 302073064);
pub const DIBUTTON_BBALLO_DEVICE = @as(u32, 302007550);
pub const DIBUTTON_BBALLO_PAUSE = @as(u32, 302007548);
pub const DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE = @as(u32, 318767104);
pub const DIAXIS_BBALLD_LATERAL = @as(u32, 318800385);
pub const DIAXIS_BBALLD_MOVE = @as(u32, 318833154);
pub const DIBUTTON_BBALLD_JUMP = @as(u32, 318768129);
pub const DIBUTTON_BBALLD_STEAL = @as(u32, 318768130);
pub const DIBUTTON_BBALLD_FAKE = @as(u32, 318768131);
pub const DIBUTTON_BBALLD_SPECIAL = @as(u32, 318768132);
pub const DIBUTTON_BBALLD_PLAYER = @as(u32, 318768133);
pub const DIBUTTON_BBALLD_BURST = @as(u32, 318768134);
pub const DIBUTTON_BBALLD_PLAY = @as(u32, 318768135);
pub const DIBUTTON_BBALLD_MENU = @as(u32, 318768381);
pub const DIHATSWITCH_BBALLD_GLANCE = @as(u32, 318785025);
pub const DIBUTTON_BBALLD_TIMEOUT = @as(u32, 318784520);
pub const DIBUTTON_BBALLD_SUBSTITUTE = @as(u32, 318784521);
pub const DIBUTTON_BBALLD_LEFT_LINK = @as(u32, 318817508);
pub const DIBUTTON_BBALLD_RIGHT_LINK = @as(u32, 318817516);
pub const DIBUTTON_BBALLD_FORWARD_LINK = @as(u32, 318850272);
pub const DIBUTTON_BBALLD_BACK_LINK = @as(u32, 318850280);
pub const DIBUTTON_BBALLD_DEVICE = @as(u32, 318784766);
pub const DIBUTTON_BBALLD_PAUSE = @as(u32, 318784764);
pub const DIVIRTUAL_SPORTS_FOOTBALL_FIELD = @as(u32, 335544320);
pub const DIBUTTON_FOOTBALLP_PLAY = @as(u32, 335545345);
pub const DIBUTTON_FOOTBALLP_SELECT = @as(u32, 335545346);
pub const DIBUTTON_FOOTBALLP_HELP = @as(u32, 335545347);
pub const DIBUTTON_FOOTBALLP_MENU = @as(u32, 335545597);
pub const DIBUTTON_FOOTBALLP_DEVICE = @as(u32, 335561982);
pub const DIBUTTON_FOOTBALLP_PAUSE = @as(u32, 335561980);
pub const DIVIRTUAL_SPORTS_FOOTBALL_QBCK = @as(u32, 352321536);
pub const DIAXIS_FOOTBALLQ_LATERAL = @as(u32, 352354817);
pub const DIAXIS_FOOTBALLQ_MOVE = @as(u32, 352387586);
pub const DIBUTTON_FOOTBALLQ_SELECT = @as(u32, 352322561);
pub const DIBUTTON_FOOTBALLQ_SNAP = @as(u32, 352322562);
pub const DIBUTTON_FOOTBALLQ_JUMP = @as(u32, 352322563);
pub const DIBUTTON_FOOTBALLQ_SLIDE = @as(u32, 352322564);
pub const DIBUTTON_FOOTBALLQ_PASS = @as(u32, 352322565);
pub const DIBUTTON_FOOTBALLQ_FAKE = @as(u32, 352322566);
pub const DIBUTTON_FOOTBALLQ_MENU = @as(u32, 352322813);
pub const DIBUTTON_FOOTBALLQ_FAKESNAP = @as(u32, 352338951);
pub const DIBUTTON_FOOTBALLQ_MOTION = @as(u32, 352338952);
pub const DIBUTTON_FOOTBALLQ_AUDIBLE = @as(u32, 352338953);
pub const DIBUTTON_FOOTBALLQ_LEFT_LINK = @as(u32, 352371940);
pub const DIBUTTON_FOOTBALLQ_RIGHT_LINK = @as(u32, 352371948);
pub const DIBUTTON_FOOTBALLQ_FORWARD_LINK = @as(u32, 352404704);
pub const DIBUTTON_FOOTBALLQ_BACK_LINK = @as(u32, 352404712);
pub const DIBUTTON_FOOTBALLQ_DEVICE = @as(u32, 352339198);
pub const DIBUTTON_FOOTBALLQ_PAUSE = @as(u32, 352339196);
pub const DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE = @as(u32, 369098752);
pub const DIAXIS_FOOTBALLO_LATERAL = @as(u32, 369132033);
pub const DIAXIS_FOOTBALLO_MOVE = @as(u32, 369164802);
pub const DIBUTTON_FOOTBALLO_JUMP = @as(u32, 369099777);
pub const DIBUTTON_FOOTBALLO_LEFTARM = @as(u32, 369099778);
pub const DIBUTTON_FOOTBALLO_RIGHTARM = @as(u32, 369099779);
pub const DIBUTTON_FOOTBALLO_THROW = @as(u32, 369099780);
pub const DIBUTTON_FOOTBALLO_SPIN = @as(u32, 369099781);
pub const DIBUTTON_FOOTBALLO_MENU = @as(u32, 369100029);
pub const DIBUTTON_FOOTBALLO_JUKE = @as(u32, 369116166);
pub const DIBUTTON_FOOTBALLO_SHOULDER = @as(u32, 369116167);
pub const DIBUTTON_FOOTBALLO_TURBO = @as(u32, 369116168);
pub const DIBUTTON_FOOTBALLO_DIVE = @as(u32, 369116169);
pub const DIBUTTON_FOOTBALLO_ZOOM = @as(u32, 369116170);
pub const DIBUTTON_FOOTBALLO_SUBSTITUTE = @as(u32, 369116171);
pub const DIBUTTON_FOOTBALLO_LEFT_LINK = @as(u32, 369149156);
pub const DIBUTTON_FOOTBALLO_RIGHT_LINK = @as(u32, 369149164);
pub const DIBUTTON_FOOTBALLO_FORWARD_LINK = @as(u32, 369181920);
pub const DIBUTTON_FOOTBALLO_BACK_LINK = @as(u32, 369181928);
pub const DIBUTTON_FOOTBALLO_DEVICE = @as(u32, 369116414);
pub const DIBUTTON_FOOTBALLO_PAUSE = @as(u32, 369116412);
pub const DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE = @as(u32, 385875968);
pub const DIAXIS_FOOTBALLD_LATERAL = @as(u32, 385909249);
pub const DIAXIS_FOOTBALLD_MOVE = @as(u32, 385942018);
pub const DIBUTTON_FOOTBALLD_PLAY = @as(u32, 385876993);
pub const DIBUTTON_FOOTBALLD_SELECT = @as(u32, 385876994);
pub const DIBUTTON_FOOTBALLD_JUMP = @as(u32, 385876995);
pub const DIBUTTON_FOOTBALLD_TACKLE = @as(u32, 385876996);
pub const DIBUTTON_FOOTBALLD_FAKE = @as(u32, 385876997);
pub const DIBUTTON_FOOTBALLD_SUPERTACKLE = @as(u32, 385876998);
pub const DIBUTTON_FOOTBALLD_MENU = @as(u32, 385877245);
pub const DIBUTTON_FOOTBALLD_SPIN = @as(u32, 385893383);
pub const DIBUTTON_FOOTBALLD_SWIM = @as(u32, 385893384);
pub const DIBUTTON_FOOTBALLD_BULLRUSH = @as(u32, 385893385);
pub const DIBUTTON_FOOTBALLD_RIP = @as(u32, 385893386);
pub const DIBUTTON_FOOTBALLD_AUDIBLE = @as(u32, 385893387);
pub const DIBUTTON_FOOTBALLD_ZOOM = @as(u32, 385893388);
pub const DIBUTTON_FOOTBALLD_SUBSTITUTE = @as(u32, 385893389);
pub const DIBUTTON_FOOTBALLD_LEFT_LINK = @as(u32, 385926372);
pub const DIBUTTON_FOOTBALLD_RIGHT_LINK = @as(u32, 385926380);
pub const DIBUTTON_FOOTBALLD_FORWARD_LINK = @as(u32, 385959136);
pub const DIBUTTON_FOOTBALLD_BACK_LINK = @as(u32, 385959144);
pub const DIBUTTON_FOOTBALLD_DEVICE = @as(u32, 385893630);
pub const DIBUTTON_FOOTBALLD_PAUSE = @as(u32, 385893628);
pub const DIVIRTUAL_SPORTS_GOLF = @as(u32, 402653184);
pub const DIAXIS_GOLF_LATERAL = @as(u32, 402686465);
pub const DIAXIS_GOLF_MOVE = @as(u32, 402719234);
pub const DIBUTTON_GOLF_SWING = @as(u32, 402654209);
pub const DIBUTTON_GOLF_SELECT = @as(u32, 402654210);
pub const DIBUTTON_GOLF_UP = @as(u32, 402654211);
pub const DIBUTTON_GOLF_DOWN = @as(u32, 402654212);
pub const DIBUTTON_GOLF_TERRAIN = @as(u32, 402654213);
pub const DIBUTTON_GOLF_FLYBY = @as(u32, 402654214);
pub const DIBUTTON_GOLF_MENU = @as(u32, 402654461);
pub const DIHATSWITCH_GOLF_SCROLL = @as(u32, 402671105);
pub const DIBUTTON_GOLF_ZOOM = @as(u32, 402670599);
pub const DIBUTTON_GOLF_TIMEOUT = @as(u32, 402670600);
pub const DIBUTTON_GOLF_SUBSTITUTE = @as(u32, 402670601);
pub const DIBUTTON_GOLF_LEFT_LINK = @as(u32, 402703588);
pub const DIBUTTON_GOLF_RIGHT_LINK = @as(u32, 402703596);
pub const DIBUTTON_GOLF_FORWARD_LINK = @as(u32, 402736352);
pub const DIBUTTON_GOLF_BACK_LINK = @as(u32, 402736360);
pub const DIBUTTON_GOLF_DEVICE = @as(u32, 402670846);
pub const DIBUTTON_GOLF_PAUSE = @as(u32, 402670844);
pub const DIVIRTUAL_SPORTS_HOCKEY_OFFENSE = @as(u32, 419430400);
pub const DIAXIS_HOCKEYO_LATERAL = @as(u32, 419463681);
pub const DIAXIS_HOCKEYO_MOVE = @as(u32, 419496450);
pub const DIBUTTON_HOCKEYO_SHOOT = @as(u32, 419431425);
pub const DIBUTTON_HOCKEYO_PASS = @as(u32, 419431426);
pub const DIBUTTON_HOCKEYO_BURST = @as(u32, 419431427);
pub const DIBUTTON_HOCKEYO_SPECIAL = @as(u32, 419431428);
pub const DIBUTTON_HOCKEYO_FAKE = @as(u32, 419431429);
pub const DIBUTTON_HOCKEYO_MENU = @as(u32, 419431677);
pub const DIHATSWITCH_HOCKEYO_SCROLL = @as(u32, 419448321);
pub const DIBUTTON_HOCKEYO_ZOOM = @as(u32, 419447814);
pub const DIBUTTON_HOCKEYO_STRATEGY = @as(u32, 419447815);
pub const DIBUTTON_HOCKEYO_TIMEOUT = @as(u32, 419447816);
pub const DIBUTTON_HOCKEYO_SUBSTITUTE = @as(u32, 419447817);
pub const DIBUTTON_HOCKEYO_LEFT_LINK = @as(u32, 419480804);
pub const DIBUTTON_HOCKEYO_RIGHT_LINK = @as(u32, 419480812);
pub const DIBUTTON_HOCKEYO_FORWARD_LINK = @as(u32, 419513568);
pub const DIBUTTON_HOCKEYO_BACK_LINK = @as(u32, 419513576);
pub const DIBUTTON_HOCKEYO_DEVICE = @as(u32, 419448062);
pub const DIBUTTON_HOCKEYO_PAUSE = @as(u32, 419448060);
pub const DIVIRTUAL_SPORTS_HOCKEY_DEFENSE = @as(u32, 436207616);
pub const DIAXIS_HOCKEYD_LATERAL = @as(u32, 436240897);
pub const DIAXIS_HOCKEYD_MOVE = @as(u32, 436273666);
pub const DIBUTTON_HOCKEYD_PLAYER = @as(u32, 436208641);
pub const DIBUTTON_HOCKEYD_STEAL = @as(u32, 436208642);
pub const DIBUTTON_HOCKEYD_BURST = @as(u32, 436208643);
pub const DIBUTTON_HOCKEYD_BLOCK = @as(u32, 436208644);
pub const DIBUTTON_HOCKEYD_FAKE = @as(u32, 436208645);
pub const DIBUTTON_HOCKEYD_MENU = @as(u32, 436208893);
pub const DIHATSWITCH_HOCKEYD_SCROLL = @as(u32, 436225537);
pub const DIBUTTON_HOCKEYD_ZOOM = @as(u32, 436225030);
pub const DIBUTTON_HOCKEYD_STRATEGY = @as(u32, 436225031);
pub const DIBUTTON_HOCKEYD_TIMEOUT = @as(u32, 436225032);
pub const DIBUTTON_HOCKEYD_SUBSTITUTE = @as(u32, 436225033);
pub const DIBUTTON_HOCKEYD_LEFT_LINK = @as(u32, 436258020);
pub const DIBUTTON_HOCKEYD_RIGHT_LINK = @as(u32, 436258028);
pub const DIBUTTON_HOCKEYD_FORWARD_LINK = @as(u32, 436290784);
pub const DIBUTTON_HOCKEYD_BACK_LINK = @as(u32, 436290792);
pub const DIBUTTON_HOCKEYD_DEVICE = @as(u32, 436225278);
pub const DIBUTTON_HOCKEYD_PAUSE = @as(u32, 436225276);
pub const DIVIRTUAL_SPORTS_HOCKEY_GOALIE = @as(u32, 452984832);
pub const DIAXIS_HOCKEYG_LATERAL = @as(u32, 453018113);
pub const DIAXIS_HOCKEYG_MOVE = @as(u32, 453050882);
pub const DIBUTTON_HOCKEYG_PASS = @as(u32, 452985857);
pub const DIBUTTON_HOCKEYG_POKE = @as(u32, 452985858);
pub const DIBUTTON_HOCKEYG_STEAL = @as(u32, 452985859);
pub const DIBUTTON_HOCKEYG_BLOCK = @as(u32, 452985860);
pub const DIBUTTON_HOCKEYG_MENU = @as(u32, 452986109);
pub const DIHATSWITCH_HOCKEYG_SCROLL = @as(u32, 453002753);
pub const DIBUTTON_HOCKEYG_ZOOM = @as(u32, 453002245);
pub const DIBUTTON_HOCKEYG_STRATEGY = @as(u32, 453002246);
pub const DIBUTTON_HOCKEYG_TIMEOUT = @as(u32, 453002247);
pub const DIBUTTON_HOCKEYG_SUBSTITUTE = @as(u32, 453002248);
pub const DIBUTTON_HOCKEYG_LEFT_LINK = @as(u32, 453035236);
pub const DIBUTTON_HOCKEYG_RIGHT_LINK = @as(u32, 453035244);
pub const DIBUTTON_HOCKEYG_FORWARD_LINK = @as(u32, 453068000);
pub const DIBUTTON_HOCKEYG_BACK_LINK = @as(u32, 453068008);
pub const DIBUTTON_HOCKEYG_DEVICE = @as(u32, 453002494);
pub const DIBUTTON_HOCKEYG_PAUSE = @as(u32, 453002492);
pub const DIVIRTUAL_SPORTS_BIKING_MOUNTAIN = @as(u32, 469762048);
pub const DIAXIS_BIKINGM_TURN = @as(u32, 469795329);
pub const DIAXIS_BIKINGM_PEDAL = @as(u32, 469828098);
pub const DIBUTTON_BIKINGM_JUMP = @as(u32, 469763073);
pub const DIBUTTON_BIKINGM_CAMERA = @as(u32, 469763074);
pub const DIBUTTON_BIKINGM_SPECIAL1 = @as(u32, 469763075);
pub const DIBUTTON_BIKINGM_SELECT = @as(u32, 469763076);
pub const DIBUTTON_BIKINGM_SPECIAL2 = @as(u32, 469763077);
pub const DIBUTTON_BIKINGM_MENU = @as(u32, 469763325);
pub const DIHATSWITCH_BIKINGM_SCROLL = @as(u32, 469779969);
pub const DIBUTTON_BIKINGM_ZOOM = @as(u32, 469779462);
pub const DIAXIS_BIKINGM_BRAKE = @as(u32, 470041091);
pub const DIBUTTON_BIKINGM_LEFT_LINK = @as(u32, 469812452);
pub const DIBUTTON_BIKINGM_RIGHT_LINK = @as(u32, 469812460);
pub const DIBUTTON_BIKINGM_FASTER_LINK = @as(u32, 469845216);
pub const DIBUTTON_BIKINGM_SLOWER_LINK = @as(u32, 469845224);
pub const DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK = @as(u32, 470041832);
pub const DIBUTTON_BIKINGM_DEVICE = @as(u32, 469779710);
pub const DIBUTTON_BIKINGM_PAUSE = @as(u32, 469779708);
pub const DIVIRTUAL_SPORTS_SKIING = @as(u32, 486539264);
pub const DIAXIS_SKIING_TURN = @as(u32, 486572545);
pub const DIAXIS_SKIING_SPEED = @as(u32, 486605314);
pub const DIBUTTON_SKIING_JUMP = @as(u32, 486540289);
pub const DIBUTTON_SKIING_CROUCH = @as(u32, 486540290);
pub const DIBUTTON_SKIING_CAMERA = @as(u32, 486540291);
pub const DIBUTTON_SKIING_SPECIAL1 = @as(u32, 486540292);
pub const DIBUTTON_SKIING_SELECT = @as(u32, 486540293);
pub const DIBUTTON_SKIING_SPECIAL2 = @as(u32, 486540294);
pub const DIBUTTON_SKIING_MENU = @as(u32, 486540541);
pub const DIHATSWITCH_SKIING_GLANCE = @as(u32, 486557185);
pub const DIBUTTON_SKIING_ZOOM = @as(u32, 486556679);
pub const DIBUTTON_SKIING_LEFT_LINK = @as(u32, 486589668);
pub const DIBUTTON_SKIING_RIGHT_LINK = @as(u32, 486589676);
pub const DIBUTTON_SKIING_FASTER_LINK = @as(u32, 486622432);
pub const DIBUTTON_SKIING_SLOWER_LINK = @as(u32, 486622440);
pub const DIBUTTON_SKIING_DEVICE = @as(u32, 486556926);
pub const DIBUTTON_SKIING_PAUSE = @as(u32, 486556924);
pub const DIVIRTUAL_SPORTS_SOCCER_OFFENSE = @as(u32, 503316480);
pub const DIAXIS_SOCCERO_LATERAL = @as(u32, 503349761);
pub const DIAXIS_SOCCERO_MOVE = @as(u32, 503382530);
pub const DIAXIS_SOCCERO_BEND = @as(u32, 503415299);
pub const DIBUTTON_SOCCERO_SHOOT = @as(u32, 503317505);
pub const DIBUTTON_SOCCERO_PASS = @as(u32, 503317506);
pub const DIBUTTON_SOCCERO_FAKE = @as(u32, 503317507);
pub const DIBUTTON_SOCCERO_PLAYER = @as(u32, 503317508);
pub const DIBUTTON_SOCCERO_SPECIAL1 = @as(u32, 503317509);
pub const DIBUTTON_SOCCERO_SELECT = @as(u32, 503317510);
pub const DIBUTTON_SOCCERO_MENU = @as(u32, 503317757);
pub const DIHATSWITCH_SOCCERO_GLANCE = @as(u32, 503334401);
pub const DIBUTTON_SOCCERO_SUBSTITUTE = @as(u32, 503333895);
pub const DIBUTTON_SOCCERO_SHOOTLOW = @as(u32, 503333896);
pub const DIBUTTON_SOCCERO_SHOOTHIGH = @as(u32, 503333897);
pub const DIBUTTON_SOCCERO_PASSTHRU = @as(u32, 503333898);
pub const DIBUTTON_SOCCERO_SPRINT = @as(u32, 503333899);
pub const DIBUTTON_SOCCERO_CONTROL = @as(u32, 503333900);
pub const DIBUTTON_SOCCERO_HEAD = @as(u32, 503333901);
pub const DIBUTTON_SOCCERO_LEFT_LINK = @as(u32, 503366884);
pub const DIBUTTON_SOCCERO_RIGHT_LINK = @as(u32, 503366892);
pub const DIBUTTON_SOCCERO_FORWARD_LINK = @as(u32, 503399648);
pub const DIBUTTON_SOCCERO_BACK_LINK = @as(u32, 503399656);
pub const DIBUTTON_SOCCERO_DEVICE = @as(u32, 503334142);
pub const DIBUTTON_SOCCERO_PAUSE = @as(u32, 503334140);
pub const DIVIRTUAL_SPORTS_SOCCER_DEFENSE = @as(u32, 520093696);
pub const DIAXIS_SOCCERD_LATERAL = @as(u32, 520126977);
pub const DIAXIS_SOCCERD_MOVE = @as(u32, 520159746);
pub const DIBUTTON_SOCCERD_BLOCK = @as(u32, 520094721);
pub const DIBUTTON_SOCCERD_STEAL = @as(u32, 520094722);
pub const DIBUTTON_SOCCERD_FAKE = @as(u32, 520094723);
pub const DIBUTTON_SOCCERD_PLAYER = @as(u32, 520094724);
pub const DIBUTTON_SOCCERD_SPECIAL = @as(u32, 520094725);
pub const DIBUTTON_SOCCERD_SELECT = @as(u32, 520094726);
pub const DIBUTTON_SOCCERD_SLIDE = @as(u32, 520094727);
pub const DIBUTTON_SOCCERD_MENU = @as(u32, 520094973);
pub const DIHATSWITCH_SOCCERD_GLANCE = @as(u32, 520111617);
pub const DIBUTTON_SOCCERD_FOUL = @as(u32, 520111112);
pub const DIBUTTON_SOCCERD_HEAD = @as(u32, 520111113);
pub const DIBUTTON_SOCCERD_CLEAR = @as(u32, 520111114);
pub const DIBUTTON_SOCCERD_GOALIECHARGE = @as(u32, 520111115);
pub const DIBUTTON_SOCCERD_SUBSTITUTE = @as(u32, 520111116);
pub const DIBUTTON_SOCCERD_LEFT_LINK = @as(u32, 520144100);
pub const DIBUTTON_SOCCERD_RIGHT_LINK = @as(u32, 520144108);
pub const DIBUTTON_SOCCERD_FORWARD_LINK = @as(u32, 520176864);
pub const DIBUTTON_SOCCERD_BACK_LINK = @as(u32, 520176872);
pub const DIBUTTON_SOCCERD_DEVICE = @as(u32, 520111358);
pub const DIBUTTON_SOCCERD_PAUSE = @as(u32, 520111356);
pub const DIVIRTUAL_SPORTS_RACQUET = @as(u32, 536870912);
pub const DIAXIS_RACQUET_LATERAL = @as(u32, 536904193);
pub const DIAXIS_RACQUET_MOVE = @as(u32, 536936962);
pub const DIBUTTON_RACQUET_SWING = @as(u32, 536871937);
pub const DIBUTTON_RACQUET_BACKSWING = @as(u32, 536871938);
pub const DIBUTTON_RACQUET_SMASH = @as(u32, 536871939);
pub const DIBUTTON_RACQUET_SPECIAL = @as(u32, 536871940);
pub const DIBUTTON_RACQUET_SELECT = @as(u32, 536871941);
pub const DIBUTTON_RACQUET_MENU = @as(u32, 536872189);
pub const DIHATSWITCH_RACQUET_GLANCE = @as(u32, 536888833);
pub const DIBUTTON_RACQUET_TIMEOUT = @as(u32, 536888326);
pub const DIBUTTON_RACQUET_SUBSTITUTE = @as(u32, 536888327);
pub const DIBUTTON_RACQUET_LEFT_LINK = @as(u32, 536921316);
pub const DIBUTTON_RACQUET_RIGHT_LINK = @as(u32, 536921324);
pub const DIBUTTON_RACQUET_FORWARD_LINK = @as(u32, 536954080);
pub const DIBUTTON_RACQUET_BACK_LINK = @as(u32, 536954088);
pub const DIBUTTON_RACQUET_DEVICE = @as(u32, 536888574);
pub const DIBUTTON_RACQUET_PAUSE = @as(u32, 536888572);
pub const DIVIRTUAL_ARCADE_SIDE2SIDE = @as(u32, 553648128);
pub const DIAXIS_ARCADES_LATERAL = @as(u32, 553681409);
pub const DIAXIS_ARCADES_MOVE = @as(u32, 553714178);
pub const DIBUTTON_ARCADES_THROW = @as(u32, 553649153);
pub const DIBUTTON_ARCADES_CARRY = @as(u32, 553649154);
pub const DIBUTTON_ARCADES_ATTACK = @as(u32, 553649155);
pub const DIBUTTON_ARCADES_SPECIAL = @as(u32, 553649156);
pub const DIBUTTON_ARCADES_SELECT = @as(u32, 553649157);
pub const DIBUTTON_ARCADES_MENU = @as(u32, 553649405);
pub const DIHATSWITCH_ARCADES_VIEW = @as(u32, 553666049);
pub const DIBUTTON_ARCADES_LEFT_LINK = @as(u32, 553698532);
pub const DIBUTTON_ARCADES_RIGHT_LINK = @as(u32, 553698540);
pub const DIBUTTON_ARCADES_FORWARD_LINK = @as(u32, 553731296);
pub const DIBUTTON_ARCADES_BACK_LINK = @as(u32, 553731304);
pub const DIBUTTON_ARCADES_VIEW_UP_LINK = @as(u32, 554157280);
pub const DIBUTTON_ARCADES_VIEW_DOWN_LINK = @as(u32, 554157288);
pub const DIBUTTON_ARCADES_VIEW_LEFT_LINK = @as(u32, 554157284);
pub const DIBUTTON_ARCADES_VIEW_RIGHT_LINK = @as(u32, 554157292);
pub const DIBUTTON_ARCADES_DEVICE = @as(u32, 553665790);
pub const DIBUTTON_ARCADES_PAUSE = @as(u32, 553665788);
pub const DIVIRTUAL_ARCADE_PLATFORM = @as(u32, 570425344);
pub const DIAXIS_ARCADEP_LATERAL = @as(u32, 570458625);
pub const DIAXIS_ARCADEP_MOVE = @as(u32, 570491394);
pub const DIBUTTON_ARCADEP_JUMP = @as(u32, 570426369);
pub const DIBUTTON_ARCADEP_FIRE = @as(u32, 570426370);
pub const DIBUTTON_ARCADEP_CROUCH = @as(u32, 570426371);
pub const DIBUTTON_ARCADEP_SPECIAL = @as(u32, 570426372);
pub const DIBUTTON_ARCADEP_SELECT = @as(u32, 570426373);
pub const DIBUTTON_ARCADEP_MENU = @as(u32, 570426621);
pub const DIHATSWITCH_ARCADEP_VIEW = @as(u32, 570443265);
pub const DIBUTTON_ARCADEP_FIRESECONDARY = @as(u32, 570442758);
pub const DIBUTTON_ARCADEP_LEFT_LINK = @as(u32, 570475748);
pub const DIBUTTON_ARCADEP_RIGHT_LINK = @as(u32, 570475756);
pub const DIBUTTON_ARCADEP_FORWARD_LINK = @as(u32, 570508512);
pub const DIBUTTON_ARCADEP_BACK_LINK = @as(u32, 570508520);
pub const DIBUTTON_ARCADEP_VIEW_UP_LINK = @as(u32, 570934496);
pub const DIBUTTON_ARCADEP_VIEW_DOWN_LINK = @as(u32, 570934504);
pub const DIBUTTON_ARCADEP_VIEW_LEFT_LINK = @as(u32, 570934500);
pub const DIBUTTON_ARCADEP_VIEW_RIGHT_LINK = @as(u32, 570934508);
pub const DIBUTTON_ARCADEP_DEVICE = @as(u32, 570443006);
pub const DIBUTTON_ARCADEP_PAUSE = @as(u32, 570443004);
pub const DIVIRTUAL_CAD_2DCONTROL = @as(u32, 587202560);
pub const DIAXIS_2DCONTROL_LATERAL = @as(u32, 587235841);
pub const DIAXIS_2DCONTROL_MOVE = @as(u32, 587268610);
pub const DIAXIS_2DCONTROL_INOUT = @as(u32, 587301379);
pub const DIBUTTON_2DCONTROL_SELECT = @as(u32, 587203585);
pub const DIBUTTON_2DCONTROL_SPECIAL1 = @as(u32, 587203586);
pub const DIBUTTON_2DCONTROL_SPECIAL = @as(u32, 587203587);
pub const DIBUTTON_2DCONTROL_SPECIAL2 = @as(u32, 587203588);
pub const DIBUTTON_2DCONTROL_MENU = @as(u32, 587203837);
pub const DIHATSWITCH_2DCONTROL_HATSWITCH = @as(u32, 587220481);
pub const DIAXIS_2DCONTROL_ROTATEZ = @as(u32, 587350532);
pub const DIBUTTON_2DCONTROL_DISPLAY = @as(u32, 587219973);
pub const DIBUTTON_2DCONTROL_DEVICE = @as(u32, 587220222);
pub const DIBUTTON_2DCONTROL_PAUSE = @as(u32, 587220220);
pub const DIVIRTUAL_CAD_3DCONTROL = @as(u32, 603979776);
pub const DIAXIS_3DCONTROL_LATERAL = @as(u32, 604013057);
pub const DIAXIS_3DCONTROL_MOVE = @as(u32, 604045826);
pub const DIAXIS_3DCONTROL_INOUT = @as(u32, 604078595);
pub const DIBUTTON_3DCONTROL_SELECT = @as(u32, 603980801);
pub const DIBUTTON_3DCONTROL_SPECIAL1 = @as(u32, 603980802);
pub const DIBUTTON_3DCONTROL_SPECIAL = @as(u32, 603980803);
pub const DIBUTTON_3DCONTROL_SPECIAL2 = @as(u32, 603980804);
pub const DIBUTTON_3DCONTROL_MENU = @as(u32, 603981053);
pub const DIHATSWITCH_3DCONTROL_HATSWITCH = @as(u32, 603997697);
pub const DIAXIS_3DCONTROL_ROTATEX = @as(u32, 604193284);
pub const DIAXIS_3DCONTROL_ROTATEY = @as(u32, 604160517);
pub const DIAXIS_3DCONTROL_ROTATEZ = @as(u32, 604127750);
pub const DIBUTTON_3DCONTROL_DISPLAY = @as(u32, 603997189);
pub const DIBUTTON_3DCONTROL_DEVICE = @as(u32, 603997438);
pub const DIBUTTON_3DCONTROL_PAUSE = @as(u32, 603997436);
pub const DIVIRTUAL_CAD_FLYBY = @as(u32, 620756992);
pub const DIAXIS_CADF_LATERAL = @as(u32, 620790273);
pub const DIAXIS_CADF_MOVE = @as(u32, 620823042);
pub const DIAXIS_CADF_INOUT = @as(u32, 620855811);
pub const DIBUTTON_CADF_SELECT = @as(u32, 620758017);
pub const DIBUTTON_CADF_SPECIAL1 = @as(u32, 620758018);
pub const DIBUTTON_CADF_SPECIAL = @as(u32, 620758019);
pub const DIBUTTON_CADF_SPECIAL2 = @as(u32, 620758020);
pub const DIBUTTON_CADF_MENU = @as(u32, 620758269);
pub const DIHATSWITCH_CADF_HATSWITCH = @as(u32, 620774913);
pub const DIAXIS_CADF_ROTATEX = @as(u32, 620970500);
pub const DIAXIS_CADF_ROTATEY = @as(u32, 620937733);
pub const DIAXIS_CADF_ROTATEZ = @as(u32, 620904966);
pub const DIBUTTON_CADF_DISPLAY = @as(u32, 620774405);
pub const DIBUTTON_CADF_DEVICE = @as(u32, 620774654);
pub const DIBUTTON_CADF_PAUSE = @as(u32, 620774652);
pub const DIVIRTUAL_CAD_MODEL = @as(u32, 637534208);
pub const DIAXIS_CADM_LATERAL = @as(u32, 637567489);
pub const DIAXIS_CADM_MOVE = @as(u32, 637600258);
pub const DIAXIS_CADM_INOUT = @as(u32, 637633027);
pub const DIBUTTON_CADM_SELECT = @as(u32, 637535233);
pub const DIBUTTON_CADM_SPECIAL1 = @as(u32, 637535234);
pub const DIBUTTON_CADM_SPECIAL = @as(u32, 637535235);
pub const DIBUTTON_CADM_SPECIAL2 = @as(u32, 637535236);
pub const DIBUTTON_CADM_MENU = @as(u32, 637535485);
pub const DIHATSWITCH_CADM_HATSWITCH = @as(u32, 637552129);
pub const DIAXIS_CADM_ROTATEX = @as(u32, 637747716);
pub const DIAXIS_CADM_ROTATEY = @as(u32, 637714949);
pub const DIAXIS_CADM_ROTATEZ = @as(u32, 637682182);
pub const DIBUTTON_CADM_DISPLAY = @as(u32, 637551621);
pub const DIBUTTON_CADM_DEVICE = @as(u32, 637551870);
pub const DIBUTTON_CADM_PAUSE = @as(u32, 637551868);
pub const DIVIRTUAL_REMOTE_CONTROL = @as(u32, 654311424);
pub const DIAXIS_REMOTE_SLIDER = @as(u32, 654639617);
pub const DIBUTTON_REMOTE_MUTE = @as(u32, 654312449);
pub const DIBUTTON_REMOTE_SELECT = @as(u32, 654312450);
pub const DIBUTTON_REMOTE_PLAY = @as(u32, 654320643);
pub const DIBUTTON_REMOTE_CUE = @as(u32, 654320644);
pub const DIBUTTON_REMOTE_REVIEW = @as(u32, 654320645);
pub const DIBUTTON_REMOTE_CHANGE = @as(u32, 654320646);
pub const DIBUTTON_REMOTE_RECORD = @as(u32, 654320647);
pub const DIBUTTON_REMOTE_MENU = @as(u32, 654312701);
pub const DIAXIS_REMOTE_SLIDER2 = @as(u32, 654656002);
pub const DIBUTTON_REMOTE_TV = @as(u32, 654334984);
pub const DIBUTTON_REMOTE_CABLE = @as(u32, 654334985);
pub const DIBUTTON_REMOTE_CD = @as(u32, 654334986);
pub const DIBUTTON_REMOTE_VCR = @as(u32, 654334987);
pub const DIBUTTON_REMOTE_TUNER = @as(u32, 654334988);
pub const DIBUTTON_REMOTE_DVD = @as(u32, 654334989);
pub const DIBUTTON_REMOTE_ADJUST = @as(u32, 654334990);
pub const DIBUTTON_REMOTE_DIGIT0 = @as(u32, 654332943);
pub const DIBUTTON_REMOTE_DIGIT1 = @as(u32, 654332944);
pub const DIBUTTON_REMOTE_DIGIT2 = @as(u32, 654332945);
pub const DIBUTTON_REMOTE_DIGIT3 = @as(u32, 654332946);
pub const DIBUTTON_REMOTE_DIGIT4 = @as(u32, 654332947);
pub const DIBUTTON_REMOTE_DIGIT5 = @as(u32, 654332948);
pub const DIBUTTON_REMOTE_DIGIT6 = @as(u32, 654332949);
pub const DIBUTTON_REMOTE_DIGIT7 = @as(u32, 654332950);
pub const DIBUTTON_REMOTE_DIGIT8 = @as(u32, 654332951);
pub const DIBUTTON_REMOTE_DIGIT9 = @as(u32, 654332952);
pub const DIBUTTON_REMOTE_DEVICE = @as(u32, 654329086);
pub const DIBUTTON_REMOTE_PAUSE = @as(u32, 654329084);
pub const DIVIRTUAL_BROWSER_CONTROL = @as(u32, 671088640);
pub const DIAXIS_BROWSER_LATERAL = @as(u32, 671121921);
pub const DIAXIS_BROWSER_MOVE = @as(u32, 671154690);
pub const DIBUTTON_BROWSER_SELECT = @as(u32, 671089665);
pub const DIAXIS_BROWSER_VIEW = @as(u32, 671187459);
pub const DIBUTTON_BROWSER_REFRESH = @as(u32, 671089666);
pub const DIBUTTON_BROWSER_MENU = @as(u32, 671089917);
pub const DIBUTTON_BROWSER_SEARCH = @as(u32, 671106051);
pub const DIBUTTON_BROWSER_STOP = @as(u32, 671106052);
pub const DIBUTTON_BROWSER_HOME = @as(u32, 671106053);
pub const DIBUTTON_BROWSER_FAVORITES = @as(u32, 671106054);
pub const DIBUTTON_BROWSER_NEXT = @as(u32, 671106055);
pub const DIBUTTON_BROWSER_PREVIOUS = @as(u32, 671106056);
pub const DIBUTTON_BROWSER_HISTORY = @as(u32, 671106057);
pub const DIBUTTON_BROWSER_PRINT = @as(u32, 671106058);
pub const DIBUTTON_BROWSER_DEVICE = @as(u32, 671106302);
pub const DIBUTTON_BROWSER_PAUSE = @as(u32, 671106300);
pub const DIVIRTUAL_DRIVING_MECHA = @as(u32, 687865856);
pub const DIAXIS_MECHA_STEER = @as(u32, 687899137);
pub const DIAXIS_MECHA_TORSO = @as(u32, 687931906);
pub const DIAXIS_MECHA_ROTATE = @as(u32, 687997443);
pub const DIAXIS_MECHA_THROTTLE = @as(u32, 688095748);
pub const DIBUTTON_MECHA_FIRE = @as(u32, 687866881);
pub const DIBUTTON_MECHA_WEAPONS = @as(u32, 687866882);
pub const DIBUTTON_MECHA_TARGET = @as(u32, 687866883);
pub const DIBUTTON_MECHA_REVERSE = @as(u32, 687866884);
pub const DIBUTTON_MECHA_ZOOM = @as(u32, 687866885);
pub const DIBUTTON_MECHA_JUMP = @as(u32, 687866886);
pub const DIBUTTON_MECHA_MENU = @as(u32, 687867133);
pub const DIBUTTON_MECHA_CENTER = @as(u32, 687883271);
pub const DIHATSWITCH_MECHA_GLANCE = @as(u32, 687883777);
pub const DIBUTTON_MECHA_VIEW = @as(u32, 687883272);
pub const DIBUTTON_MECHA_FIRESECONDARY = @as(u32, 687883273);
pub const DIBUTTON_MECHA_LEFT_LINK = @as(u32, 687916260);
pub const DIBUTTON_MECHA_RIGHT_LINK = @as(u32, 687916268);
pub const DIBUTTON_MECHA_FORWARD_LINK = @as(u32, 687949024);
pub const DIBUTTON_MECHA_BACK_LINK = @as(u32, 687949032);
pub const DIBUTTON_MECHA_ROTATE_LEFT_LINK = @as(u32, 688014564);
pub const DIBUTTON_MECHA_ROTATE_RIGHT_LINK = @as(u32, 688014572);
pub const DIBUTTON_MECHA_FASTER_LINK = @as(u32, 688112864);
pub const DIBUTTON_MECHA_SLOWER_LINK = @as(u32, 688112872);
pub const DIBUTTON_MECHA_DEVICE = @as(u32, 687883518);
pub const DIBUTTON_MECHA_PAUSE = @as(u32, 687883516);
pub const DIAXIS_ANY_X_1 = @as(u32, 4278239745);
pub const DIAXIS_ANY_X_2 = @as(u32, 4278239746);
pub const DIAXIS_ANY_Y_1 = @as(u32, 4278272513);
pub const DIAXIS_ANY_Y_2 = @as(u32, 4278272514);
pub const DIAXIS_ANY_Z_1 = @as(u32, 4278305281);
pub const DIAXIS_ANY_Z_2 = @as(u32, 4278305282);
pub const DIAXIS_ANY_R_1 = @as(u32, 4278338049);
pub const DIAXIS_ANY_R_2 = @as(u32, 4278338050);
pub const DIAXIS_ANY_U_1 = @as(u32, 4278370817);
pub const DIAXIS_ANY_U_2 = @as(u32, 4278370818);
pub const DIAXIS_ANY_V_1 = @as(u32, 4278403585);
pub const DIAXIS_ANY_V_2 = @as(u32, 4278403586);
pub const DIAXIS_ANY_A_1 = @as(u32, 4278436353);
pub const DIAXIS_ANY_A_2 = @as(u32, 4278436354);
pub const DIAXIS_ANY_B_1 = @as(u32, 4278469121);
pub const DIAXIS_ANY_B_2 = @as(u32, 4278469122);
pub const DIAXIS_ANY_C_1 = @as(u32, 4278501889);
pub const DIAXIS_ANY_C_2 = @as(u32, 4278501890);
pub const DIAXIS_ANY_S_1 = @as(u32, 4278534657);
pub const DIAXIS_ANY_S_2 = @as(u32, 4278534658);
pub const DIAXIS_ANY_1 = @as(u32, 4278206977);
pub const DIAXIS_ANY_2 = @as(u32, 4278206978);
pub const DIAXIS_ANY_3 = @as(u32, 4278206979);
pub const DIAXIS_ANY_4 = @as(u32, 4278206980);
pub const DIPOV_ANY_1 = @as(u32, 4278208001);
pub const DIPOV_ANY_2 = @as(u32, 4278208002);
pub const DIPOV_ANY_3 = @as(u32, 4278208003);
pub const DIPOV_ANY_4 = @as(u32, 4278208004);
pub const JOY_PASSDRIVERDATA = @as(i32, 268435456);
pub const JOY_HWS_ISHEADTRACKER = @as(i32, 33554432);
pub const JOY_HWS_ISGAMEPORTDRIVER = @as(i32, 67108864);
pub const JOY_HWS_ISANALOGPORTDRIVER = @as(i32, 134217728);
pub const JOY_HWS_AUTOLOAD = @as(i32, 268435456);
pub const JOY_HWS_NODEVNODE = @as(i32, 536870912);
pub const JOY_HWS_ISGAMEPORTBUS = @as(i32, -2147483648);
pub const JOY_HWS_GAMEPORTBUSBUSY = @as(i32, 1);
pub const JOY_US_VOLATILE = @as(i32, 8);
pub const JOY_OEMPOLL_PASSDRIVERDATA = @as(u32, 7);
pub const BUTTON_BIT_POWER = @as(u32, 1);
pub const BUTTON_BIT_WINDOWS = @as(u32, 2);
pub const BUTTON_BIT_VOLUMEUP = @as(u32, 4);
pub const BUTTON_BIT_VOLUMEDOWN = @as(u32, 8);
pub const BUTTON_BIT_ROTATION_LOCK = @as(u32, 16);
pub const BUTTON_BIT_BACK = @as(u32, 32);
pub const BUTTON_BIT_SEARCH = @as(u32, 64);
pub const BUTTON_BIT_CAMERAFOCUS = @as(u32, 128);
pub const BUTTON_BIT_CAMERASHUTTER = @as(u32, 256);
pub const BUTTON_BIT_RINGERTOGGLE = @as(u32, 512);
pub const BUTTON_BIT_HEADSET = @as(u32, 1024);
pub const BUTTON_BIT_HWKBDEPLOY = @as(u32, 2048);
pub const BUTTON_BIT_CAMERALENS = @as(u32, 4096);
pub const BUTTON_BIT_OEMCUSTOM = @as(u32, 8192);
pub const BUTTON_BIT_OEMCUSTOM2 = @as(u32, 16384);
pub const BUTTON_BIT_OEMCUSTOM3 = @as(u32, 32768);
pub const BUTTON_BIT_ALLBUTTONSMASK = @as(u32, 16383);
pub const IOCTL_BUTTON_SET_ENABLED_ON_IDLE = @as(u32, 721576);
pub const IOCTL_BUTTON_GET_ENABLED_ON_IDLE = @as(u32, 721580);

//--------------------------------------------------------------------------------
// Section: Types (141)
//--------------------------------------------------------------------------------
pub const DICONSTANTFORCE = extern struct {
    lMagnitude: i32,
};

pub const DIRAMPFORCE = extern struct {
    lStart: i32,
    lEnd: i32,
};

pub const DIPERIODIC = extern struct {
    dwMagnitude: u32,
    lOffset: i32,
    dwPhase: u32,
    dwPeriod: u32,
};

pub const DICONDITION = extern struct {
    lOffset: i32,
    lPositiveCoefficient: i32,
    lNegativeCoefficient: i32,
    dwPositiveSaturation: u32,
    dwNegativeSaturation: u32,
    lDeadBand: i32,
};

pub const DICUSTOMFORCE = extern struct {
    cChannels: u32,
    dwSamplePeriod: u32,
    cSamples: u32,
    rglForceData: ?*i32,
};

pub const DIENVELOPE = extern struct {
    dwSize: u32,
    dwAttackLevel: u32,
    dwAttackTime: u32,
    dwFadeLevel: u32,
    dwFadeTime: u32,
};

pub const DIEFFECT_DX5 = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwDuration: u32,
    dwSamplePeriod: u32,
    dwGain: u32,
    dwTriggerButton: u32,
    dwTriggerRepeatInterval: u32,
    cAxes: u32,
    rgdwAxes: ?*u32,
    rglDirection: ?*i32,
    lpEnvelope: ?*DIENVELOPE,
    cbTypeSpecificParams: u32,
    lpvTypeSpecificParams: ?*anyopaque,
};

pub const DIEFFECT = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwDuration: u32,
    dwSamplePeriod: u32,
    dwGain: u32,
    dwTriggerButton: u32,
    dwTriggerRepeatInterval: u32,
    cAxes: u32,
    rgdwAxes: ?*u32,
    rglDirection: ?*i32,
    lpEnvelope: ?*DIENVELOPE,
    cbTypeSpecificParams: u32,
    lpvTypeSpecificParams: ?*anyopaque,
    dwStartDelay: u32,
};

pub const DIFILEEFFECT = extern struct {
    dwSize: u32,
    GuidEffect: Guid,
    lpDiEffect: ?*DIEFFECT,
    szFriendlyName: [260]CHAR,
};

pub const LPDIENUMEFFECTSINFILECALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIFILEEFFECT,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIFILEEFFECT,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const DIEFFESCAPE = extern struct {
    dwSize: u32,
    dwCommand: u32,
    lpvInBuffer: ?*anyopaque,
    cbInBuffer: u32,
    lpvOutBuffer: ?*anyopaque,
    cbOutBuffer: u32,
};

const IID_IDirectInputEffect_Value = Guid.initString("e7e1f7c0-88d2-11d0-9ad0-00a0c9a06e35");
pub const IID_IDirectInputEffect = &IID_IDirectInputEffect_Value;
pub const IDirectInputEffect = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectGuid: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: ?*DIEFFECT,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: ?*DIEFFECT,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetParameters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: ?*DIEFFECT,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: ?*DIEFFECT,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Start: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Stop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Download: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unload: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Escape: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffect,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffect,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32, param2: ?*const Guid) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_GetEffectGuid(self: *const T, param0: ?*Guid) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).GetEffectGuid(@as(*const IDirectInputEffect, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_GetParameters(self: *const T, param0: ?*DIEFFECT, param1: u32) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).GetParameters(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_SetParameters(self: *const T, param0: ?*DIEFFECT, param1: u32) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).SetParameters(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_Start(self: *const T, param0: u32, param1: u32) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Start(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_Stop(self: *const T) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Stop(@as(*const IDirectInputEffect, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_GetEffectStatus(self: *const T, param0: ?*u32) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).GetEffectStatus(@as(*const IDirectInputEffect, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_Download(self: *const T) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Download(@as(*const IDirectInputEffect, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_Unload(self: *const T) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Unload(@as(*const IDirectInputEffect, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffect_Escape(self: *const T, param0: ?*DIEFFESCAPE) HRESULT {
                return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputEffect, @ptrCast(self)), param0);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DIDEVCAPS_DX3 = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwDevType: u32,
    dwAxes: u32,
    dwButtons: u32,
    dwPOVs: u32,
};

pub const DIDEVCAPS = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwDevType: u32,
    dwAxes: u32,
    dwButtons: u32,
    dwPOVs: u32,
    dwFFSamplePeriod: u32,
    dwFFMinTimeResolution: u32,
    dwFirmwareRevision: u32,
    dwHardwareRevision: u32,
    dwFFDriverVersion: u32,
};

pub const DIOBJECTDATAFORMAT = extern struct {
    pguid: ?*const Guid,
    dwOfs: u32,
    dwType: u32,
    dwFlags: u32,
};

pub const DIDATAFORMAT = extern struct {
    dwSize: u32,
    dwObjSize: u32,
    dwFlags: u32,
    dwDataSize: u32,
    dwNumObjs: u32,
    rgodf: ?*DIOBJECTDATAFORMAT,
};

pub const DIACTIONA = extern struct {
    uAppData: usize,
    dwSemantic: u32,
    dwFlags: u32,
    Anonymous: extern union {
        lptszActionName: ?[*:0]const u8,
        uResIdString: u32,
    },
    guidInstance: Guid,
    dwObjID: u32,
    dwHow: u32,
};

pub const DIACTIONW = extern struct {
    uAppData: usize,
    dwSemantic: u32,
    dwFlags: u32,
    Anonymous: extern union {
        lptszActionName: ?[*:0]const u16,
        uResIdString: u32,
    },
    guidInstance: Guid,
    dwObjID: u32,
    dwHow: u32,
};

pub const DIACTIONFORMATA = extern struct {
    dwSize: u32,
    dwActionSize: u32,
    dwDataSize: u32,
    dwNumActions: u32,
    rgoAction: ?*DIACTIONA,
    guidActionMap: Guid,
    dwGenre: u32,
    dwBufferSize: u32,
    lAxisMin: i32,
    lAxisMax: i32,
    hInstString: ?HINSTANCE,
    ftTimeStamp: FILETIME,
    dwCRC: u32,
    tszActionMap: [260]CHAR,
};

pub const DIACTIONFORMATW = extern struct {
    dwSize: u32,
    dwActionSize: u32,
    dwDataSize: u32,
    dwNumActions: u32,
    rgoAction: ?*DIACTIONW,
    guidActionMap: Guid,
    dwGenre: u32,
    dwBufferSize: u32,
    lAxisMin: i32,
    lAxisMax: i32,
    hInstString: ?HINSTANCE,
    ftTimeStamp: FILETIME,
    dwCRC: u32,
    tszActionMap: [260]u16,
};

pub const DICOLORSET = extern struct {
    dwSize: u32,
    cTextFore: u32,
    cTextHighlight: u32,
    cCalloutLine: u32,
    cCalloutHighlight: u32,
    cBorder: u32,
    cControlFill: u32,
    cHighlightFill: u32,
    cAreaFill: u32,
};

pub const DICONFIGUREDEVICESPARAMSA = extern struct {
    dwSize: u32,
    dwcUsers: u32,
    lptszUserNames: ?PSTR,
    dwcFormats: u32,
    lprgFormats: ?*DIACTIONFORMATA,
    hwnd: ?HWND,
    dics: DICOLORSET,
    lpUnkDDSTarget: ?*IUnknown,
};

pub const DICONFIGUREDEVICESPARAMSW = extern struct {
    dwSize: u32,
    dwcUsers: u32,
    lptszUserNames: ?PWSTR,
    dwcFormats: u32,
    lprgFormats: ?*DIACTIONFORMATW,
    hwnd: ?HWND,
    dics: DICOLORSET,
    lpUnkDDSTarget: ?*IUnknown,
};

pub const DIDEVICEIMAGEINFOA = extern struct {
    tszImagePath: [260]CHAR,
    dwFlags: u32,
    dwViewID: u32,
    rcOverlay: RECT,
    dwObjID: u32,
    dwcValidPts: u32,
    rgptCalloutLine: [5]POINT,
    rcCalloutRect: RECT,
    dwTextAlign: u32,
};

pub const DIDEVICEIMAGEINFOW = extern struct {
    tszImagePath: [260]u16,
    dwFlags: u32,
    dwViewID: u32,
    rcOverlay: RECT,
    dwObjID: u32,
    dwcValidPts: u32,
    rgptCalloutLine: [5]POINT,
    rcCalloutRect: RECT,
    dwTextAlign: u32,
};

pub const DIDEVICEIMAGEINFOHEADERA = extern struct {
    dwSize: u32,
    dwSizeImageInfo: u32,
    dwcViews: u32,
    dwcButtons: u32,
    dwcAxes: u32,
    dwcPOVs: u32,
    dwBufferSize: u32,
    dwBufferUsed: u32,
    lprgImageInfoArray: ?*DIDEVICEIMAGEINFOA,
};

pub const DIDEVICEIMAGEINFOHEADERW = extern struct {
    dwSize: u32,
    dwSizeImageInfo: u32,
    dwcViews: u32,
    dwcButtons: u32,
    dwcAxes: u32,
    dwcPOVs: u32,
    dwBufferSize: u32,
    dwBufferUsed: u32,
    lprgImageInfoArray: ?*DIDEVICEIMAGEINFOW,
};

pub const DIDEVICEOBJECTINSTANCE_DX3A = extern struct {
    dwSize: u32,
    guidType: Guid,
    dwOfs: u32,
    dwType: u32,
    dwFlags: u32,
    tszName: [260]CHAR,
};

pub const DIDEVICEOBJECTINSTANCE_DX3W = extern struct {
    dwSize: u32,
    guidType: Guid,
    dwOfs: u32,
    dwType: u32,
    dwFlags: u32,
    tszName: [260]u16,
};

pub const DIDEVICEOBJECTINSTANCEA = extern struct {
    dwSize: u32,
    guidType: Guid,
    dwOfs: u32,
    dwType: u32,
    dwFlags: u32,
    tszName: [260]CHAR,
    dwFFMaxForce: u32,
    dwFFForceResolution: u32,
    wCollectionNumber: u16,
    wDesignatorIndex: u16,
    wUsagePage: u16,
    wUsage: u16,
    dwDimension: u32,
    wExponent: u16,
    wReportId: u16,
};

pub const DIDEVICEOBJECTINSTANCEW = extern struct {
    dwSize: u32,
    guidType: Guid,
    dwOfs: u32,
    dwType: u32,
    dwFlags: u32,
    tszName: [260]u16,
    dwFFMaxForce: u32,
    dwFFForceResolution: u32,
    wCollectionNumber: u16,
    wDesignatorIndex: u16,
    wUsagePage: u16,
    wUsage: u16,
    dwDimension: u32,
    wExponent: u16,
    wReportId: u16,
};

pub const LPDIENUMDEVICEOBJECTSCALLBACKA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIDEVICEOBJECTINSTANCEA,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIDEVICEOBJECTINSTANCEA,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDIENUMDEVICEOBJECTSCALLBACKW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIDEVICEOBJECTINSTANCEW,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIDEVICEOBJECTINSTANCEW,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const DIPROPHEADER = extern struct {
    dwSize: u32,
    dwHeaderSize: u32,
    dwObj: u32,
    dwHow: u32,
};

pub const DIPROPDWORD = extern struct {
    diph: DIPROPHEADER,
    dwData: u32,
};

pub const DIPROPPOINTER = extern struct {
    diph: DIPROPHEADER,
    uData: usize,
};

pub const DIPROPRANGE = extern struct {
    diph: DIPROPHEADER,
    lMin: i32,
    lMax: i32,
};

pub const DIPROPCAL = extern struct {
    diph: DIPROPHEADER,
    lMin: i32,
    lCenter: i32,
    lMax: i32,
};

pub const DIPROPCALPOV = extern struct {
    diph: DIPROPHEADER,
    lMin: [5]i32,
    lMax: [5]i32,
};

pub const DIPROPGUIDANDPATH = extern struct {
    diph: DIPROPHEADER,
    guidClass: Guid,
    wszPath: [260]u16,
};

pub const DIPROPSTRING = extern struct {
    diph: DIPROPHEADER,
    wsz: [260]u16,
};

pub const CPOINT = extern struct {
    lP: i32,
    dwLog: u32,
};

pub const DIPROPCPOINTS = extern struct {
    diph: DIPROPHEADER,
    dwCPointsNum: u32,
    cp: [8]CPOINT,
};

pub const DIDEVICEOBJECTDATA_DX3 = extern struct {
    dwOfs: u32,
    dwData: u32,
    dwTimeStamp: u32,
    dwSequence: u32,
};

pub const DIDEVICEOBJECTDATA = extern struct {
    dwOfs: u32,
    dwData: u32,
    dwTimeStamp: u32,
    dwSequence: u32,
    uAppData: usize,
};

pub const DIDEVICEINSTANCE_DX3A = extern struct {
    dwSize: u32,
    guidInstance: Guid,
    guidProduct: Guid,
    dwDevType: u32,
    tszInstanceName: [260]CHAR,
    tszProductName: [260]CHAR,
};

pub const DIDEVICEINSTANCE_DX3W = extern struct {
    dwSize: u32,
    guidInstance: Guid,
    guidProduct: Guid,
    dwDevType: u32,
    tszInstanceName: [260]u16,
    tszProductName: [260]u16,
};

pub const DIDEVICEINSTANCEA = extern struct {
    dwSize: u32,
    guidInstance: Guid,
    guidProduct: Guid,
    dwDevType: u32,
    tszInstanceName: [260]CHAR,
    tszProductName: [260]CHAR,
    guidFFDriver: Guid,
    wUsagePage: u16,
    wUsage: u16,
};

pub const DIDEVICEINSTANCEW = extern struct {
    dwSize: u32,
    guidInstance: Guid,
    guidProduct: Guid,
    dwDevType: u32,
    tszInstanceName: [260]u16,
    tszProductName: [260]u16,
    guidFFDriver: Guid,
    wUsagePage: u16,
    wUsage: u16,
};

const IID_IDirectInputDeviceW_Value = Guid.initString("5944e681-c92e-11cf-bfc7-444553540000");
pub const IID_IDirectInputDeviceW = &IID_IDirectInputDeviceW_Value;
pub const IDirectInputDeviceW = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Acquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unacquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDataFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEventNotification: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCooperativeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetObjectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDEVICEOBJECTINSTANCEW,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDEVICEOBJECTINSTANCEW,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDEVICEINSTANCEW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?*DIDEVICEINSTANCEW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceW,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceW,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_GetCapabilities(self: *const T, param0: ?*DIDEVCAPS) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).GetCapabilities(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_EnumObjects(self: *const T, param0: ?LPDIENUMDEVICEOBJECTSCALLBACKW, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).EnumObjects(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_GetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).GetProperty(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_SetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).SetProperty(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_Acquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).Acquire(@as(*const IDirectInputDeviceW, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_Unacquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).Unacquire(@as(*const IDirectInputDeviceW, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_GetDeviceState(self: *const T, param0: u32, param1: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).GetDeviceState(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_GetDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).GetDeviceData(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_SetDataFormat(self: *const T, param0: ?*DIDATAFORMAT) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).SetDataFormat(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_SetEventNotification(self: *const T, param0: ?HANDLE) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).SetEventNotification(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_SetCooperativeLevel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).SetCooperativeLevel(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_GetObjectInfo(self: *const T, param0: ?*DIDEVICEOBJECTINSTANCEW, param1: u32, param2: u32) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).GetObjectInfo(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_GetDeviceInfo(self: *const T, param0: ?*DIDEVICEINSTANCEW) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).GetDeviceInfo(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceW_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32, param2: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDeviceW.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputDeviceW, @ptrCast(self)), param0, param1, param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputDeviceA_Value = Guid.initString("5944e680-c92e-11cf-bfc7-444553540000");
pub const IID_IDirectInputDeviceA = &IID_IDirectInputDeviceA_Value;
pub const IDirectInputDeviceA = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Acquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unacquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDataFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEventNotification: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCooperativeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetObjectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDEVICEOBJECTINSTANCEA,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDEVICEOBJECTINSTANCEA,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDEVICEINSTANCEA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?*DIDEVICEINSTANCEA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDeviceA,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDeviceA,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_GetCapabilities(self: *const T, param0: ?*DIDEVCAPS) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).GetCapabilities(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_EnumObjects(self: *const T, param0: ?LPDIENUMDEVICEOBJECTSCALLBACKA, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).EnumObjects(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_GetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).GetProperty(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_SetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).SetProperty(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_Acquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).Acquire(@as(*const IDirectInputDeviceA, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_Unacquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).Unacquire(@as(*const IDirectInputDeviceA, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_GetDeviceState(self: *const T, param0: u32, param1: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).GetDeviceState(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_GetDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).GetDeviceData(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_SetDataFormat(self: *const T, param0: ?*DIDATAFORMAT) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).SetDataFormat(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_SetEventNotification(self: *const T, param0: ?HANDLE) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).SetEventNotification(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_SetCooperativeLevel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).SetCooperativeLevel(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_GetObjectInfo(self: *const T, param0: ?*DIDEVICEOBJECTINSTANCEA, param1: u32, param2: u32) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).GetObjectInfo(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_GetDeviceInfo(self: *const T, param0: ?*DIDEVICEINSTANCEA) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).GetDeviceInfo(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDeviceA_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32, param2: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDeviceA.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputDeviceA, @ptrCast(self)), param0, param1, param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DIEFFECTINFOA = extern struct {
    dwSize: u32,
    guid: Guid,
    dwEffType: u32,
    dwStaticParams: u32,
    dwDynamicParams: u32,
    tszName: [260]CHAR,
};

pub const DIEFFECTINFOW = extern struct {
    dwSize: u32,
    guid: Guid,
    dwEffType: u32,
    dwStaticParams: u32,
    dwDynamicParams: u32,
    tszName: [260]u16,
};

pub const LPDIENUMEFFECTSCALLBACKA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIEFFECTINFOA,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIEFFECTINFOA,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDIENUMEFFECTSCALLBACKW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIEFFECTINFOW,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIEFFECTINFOW,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDIENUMCREATEDEFFECTOBJECTSCALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*IDirectInputEffect,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*IDirectInputEffect,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

const IID_IDirectInputDevice2W_Value = Guid.initString("5944e683-c92e-11cf-bfc7-444553540000");
pub const IID_IDirectInputDevice2W = &IID_IDirectInputDevice2W_Value;
pub const IDirectInputDevice2W = extern struct {
    pub const VTable = extern struct {
        base: IDirectInputDeviceW.VTable,
        CreateEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumEffects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: ?LPDIENUMEFFECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: ?LPDIENUMEFFECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: ?*DIEFFECTINFOW,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: ?*DIEFFECTINFOW,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetForceFeedbackState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendForceFeedbackCommand: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCreatedEffectObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Escape: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Poll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2W,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2W,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInputDeviceW.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_CreateEffect(self: *const T, param0: ?*const Guid, param1: ?*DIEFFECT, param2: ?*?*IDirectInputEffect, param3: ?*IUnknown) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).CreateEffect(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_EnumEffects(self: *const T, param0: ?LPDIENUMEFFECTSCALLBACKW, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).EnumEffects(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_GetEffectInfo(self: *const T, param0: ?*DIEFFECTINFOW, param1: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).GetEffectInfo(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_GetForceFeedbackState(self: *const T, param0: ?*u32) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).GetForceFeedbackState(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_SendForceFeedbackCommand(self: *const T, param0: u32) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).SendForceFeedbackCommand(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_EnumCreatedEffectObjects(self: *const T, param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).EnumCreatedEffectObjects(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_Escape(self: *const T, param0: ?*DIEFFESCAPE) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_Poll(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).Poll(@as(*const IDirectInputDevice2W, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2W_SendDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice2W.VTable, @ptrCast(self.vtable)).SendDeviceData(@as(*const IDirectInputDevice2W, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputDevice2A_Value = Guid.initString("5944e682-c92e-11cf-bfc7-444553540000");
pub const IID_IDirectInputDevice2A = &IID_IDirectInputDevice2A_Value;
pub const IDirectInputDevice2A = extern struct {
    pub const VTable = extern struct {
        base: IDirectInputDeviceA.VTable,
        CreateEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumEffects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: ?LPDIENUMEFFECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: ?LPDIENUMEFFECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: ?*DIEFFECTINFOA,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: ?*DIEFFECTINFOA,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetForceFeedbackState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendForceFeedbackCommand: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCreatedEffectObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Escape: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Poll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice2A,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice2A,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInputDeviceA.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_CreateEffect(self: *const T, param0: ?*const Guid, param1: ?*DIEFFECT, param2: ?*?*IDirectInputEffect, param3: ?*IUnknown) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).CreateEffect(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_EnumEffects(self: *const T, param0: ?LPDIENUMEFFECTSCALLBACKA, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).EnumEffects(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_GetEffectInfo(self: *const T, param0: ?*DIEFFECTINFOA, param1: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).GetEffectInfo(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_GetForceFeedbackState(self: *const T, param0: ?*u32) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).GetForceFeedbackState(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_SendForceFeedbackCommand(self: *const T, param0: u32) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).SendForceFeedbackCommand(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_EnumCreatedEffectObjects(self: *const T, param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).EnumCreatedEffectObjects(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_Escape(self: *const T, param0: ?*DIEFFESCAPE) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_Poll(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).Poll(@as(*const IDirectInputDevice2A, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice2A_SendDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice2A.VTable, @ptrCast(self.vtable)).SendDeviceData(@as(*const IDirectInputDevice2A, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputDevice7W_Value = Guid.initString("57d7c6bd-2356-11d3-8e9d-00c04f6844ae");
pub const IID_IDirectInputDevice7W = &IID_IDirectInputDevice7W_Value;
pub const IDirectInputDevice7W = extern struct {
    pub const VTable = extern struct {
        base: IDirectInputDevice2W.VTable,
        EnumEffectsInFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice7W,
                param0: ?[*:0]const u16,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice7W,
                param0: ?[*:0]const u16,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WriteEffectToFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice7W,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice7W,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInputDevice2W.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice7W_EnumEffectsInFile(self: *const T, param0: ?[*:0]const u16, param1: ?LPDIENUMEFFECTSINFILECALLBACK, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice7W.VTable, @ptrCast(self.vtable)).EnumEffectsInFile(@as(*const IDirectInputDevice7W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice7W_WriteEffectToFile(self: *const T, param0: ?[*:0]const u16, param1: u32, param2: ?*DIFILEEFFECT, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice7W.VTable, @ptrCast(self.vtable)).WriteEffectToFile(@as(*const IDirectInputDevice7W, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputDevice7A_Value = Guid.initString("57d7c6bc-2356-11d3-8e9d-00c04f6844ae");
pub const IID_IDirectInputDevice7A = &IID_IDirectInputDevice7A_Value;
pub const IDirectInputDevice7A = extern struct {
    pub const VTable = extern struct {
        base: IDirectInputDevice2A.VTable,
        EnumEffectsInFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice7A,
                param0: ?[*:0]const u8,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice7A,
                param0: ?[*:0]const u8,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WriteEffectToFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice7A,
                param0: ?[*:0]const u8,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice7A,
                param0: ?[*:0]const u8,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInputDevice2A.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice7A_EnumEffectsInFile(self: *const T, param0: ?[*:0]const u8, param1: ?LPDIENUMEFFECTSINFILECALLBACK, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice7A.VTable, @ptrCast(self.vtable)).EnumEffectsInFile(@as(*const IDirectInputDevice7A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice7A_WriteEffectToFile(self: *const T, param0: ?[*:0]const u8, param1: u32, param2: ?*DIFILEEFFECT, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice7A.VTable, @ptrCast(self.vtable)).WriteEffectToFile(@as(*const IDirectInputDevice7A, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputDevice8W_Value = Guid.initString("54d41081-dc15-4833-a41b-748f73a38179");
pub const IID_IDirectInputDevice8W = &IID_IDirectInputDevice8W_Value;
pub const IDirectInputDevice8W = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Acquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unacquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDataFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEventNotification: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCooperativeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetObjectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVICEOBJECTINSTANCEW,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVICEOBJECTINSTANCEW,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVICEINSTANCEW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVICEINSTANCEW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumEffects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?LPDIENUMEFFECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?LPDIENUMEFFECTSCALLBACKW,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIEFFECTINFOW,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIEFFECTINFOW,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetForceFeedbackState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendForceFeedbackCommand: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCreatedEffectObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Escape: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Poll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumEffectsInFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?[*:0]const u16,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?[*:0]const u16,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WriteEffectToFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BuildActionMap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIACTIONFORMATW,
                param1: ?[*:0]const u16,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIACTIONFORMATW,
                param1: ?[*:0]const u16,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetActionMap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIACTIONFORMATW,
                param1: ?[*:0]const u16,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIACTIONFORMATW,
                param1: ?[*:0]const u16,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetImageInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVICEIMAGEINFOHEADERW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8W,
                param0: ?*DIDEVICEIMAGEINFOHEADERW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetCapabilities(self: *const T, param0: ?*DIDEVCAPS) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetCapabilities(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_EnumObjects(self: *const T, param0: ?LPDIENUMDEVICEOBJECTSCALLBACKW, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).EnumObjects(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetProperty(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SetProperty(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_Acquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).Acquire(@as(*const IDirectInputDevice8W, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_Unacquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).Unacquire(@as(*const IDirectInputDevice8W, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetDeviceState(self: *const T, param0: u32, param1: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetDeviceState(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetDeviceData(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SetDataFormat(self: *const T, param0: ?*DIDATAFORMAT) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SetDataFormat(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SetEventNotification(self: *const T, param0: ?HANDLE) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SetEventNotification(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SetCooperativeLevel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SetCooperativeLevel(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetObjectInfo(self: *const T, param0: ?*DIDEVICEOBJECTINSTANCEW, param1: u32, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetObjectInfo(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetDeviceInfo(self: *const T, param0: ?*DIDEVICEINSTANCEW) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetDeviceInfo(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32, param2: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_CreateEffect(self: *const T, param0: ?*const Guid, param1: ?*DIEFFECT, param2: ?*?*IDirectInputEffect, param3: ?*IUnknown) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).CreateEffect(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_EnumEffects(self: *const T, param0: ?LPDIENUMEFFECTSCALLBACKW, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).EnumEffects(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetEffectInfo(self: *const T, param0: ?*DIEFFECTINFOW, param1: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetEffectInfo(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetForceFeedbackState(self: *const T, param0: ?*u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetForceFeedbackState(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SendForceFeedbackCommand(self: *const T, param0: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SendForceFeedbackCommand(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_EnumCreatedEffectObjects(self: *const T, param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).EnumCreatedEffectObjects(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_Escape(self: *const T, param0: ?*DIEFFESCAPE) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_Poll(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).Poll(@as(*const IDirectInputDevice8W, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SendDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SendDeviceData(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_EnumEffectsInFile(self: *const T, param0: ?[*:0]const u16, param1: ?LPDIENUMEFFECTSINFILECALLBACK, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).EnumEffectsInFile(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_WriteEffectToFile(self: *const T, param0: ?[*:0]const u16, param1: u32, param2: ?*DIFILEEFFECT, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).WriteEffectToFile(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_BuildActionMap(self: *const T, param0: ?*DIACTIONFORMATW, param1: ?[*:0]const u16, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).BuildActionMap(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_SetActionMap(self: *const T, param0: ?*DIACTIONFORMATW, param1: ?[*:0]const u16, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).SetActionMap(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8W_GetImageInfo(self: *const T, param0: ?*DIDEVICEIMAGEINFOHEADERW) HRESULT {
                return @as(*const IDirectInputDevice8W.VTable, @ptrCast(self.vtable)).GetImageInfo(@as(*const IDirectInputDevice8W, @ptrCast(self)), param0);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputDevice8A_Value = Guid.initString("54d41080-dc15-4833-a41b-748f73a38179");
pub const IID_IDirectInputDevice8A = &IID_IDirectInputDevice8A_Value;
pub const IDirectInputDevice8A = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCapabilities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVCAPS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?LPDIENUMDEVICEOBJECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetProperty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*const Guid,
                param1: ?*DIPROPHEADER,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Acquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unacquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDataFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDATAFORMAT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetEventNotification: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?HANDLE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCooperativeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetObjectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVICEOBJECTINSTANCEA,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVICEOBJECTINSTANCEA,
                param1: u32,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVICEINSTANCEA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVICEINSTANCEA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?HINSTANCE,
                param1: u32,
                param2: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*const Guid,
                param1: ?*DIEFFECT,
                param2: ?*?*IDirectInputEffect,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumEffects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?LPDIENUMEFFECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?LPDIENUMEFFECTSCALLBACKA,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIEFFECTINFOA,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIEFFECTINFOA,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetForceFeedbackState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendForceFeedbackCommand: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumCreatedEffectObjects: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,
                param1: ?*anyopaque,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Escape: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Poll: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendDeviceData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: u32,
                param1: ?*DIDEVICEOBJECTDATA,
                param2: ?*u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumEffectsInFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?[*:0]const u8,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?[*:0]const u8,
                param1: ?LPDIENUMEFFECTSINFILECALLBACK,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        WriteEffectToFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?[*:0]const u8,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?[*:0]const u8,
                param1: u32,
                param2: ?*DIFILEEFFECT,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        BuildActionMap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIACTIONFORMATA,
                param1: ?[*:0]const u8,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIACTIONFORMATA,
                param1: ?[*:0]const u8,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetActionMap: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIACTIONFORMATA,
                param1: ?[*:0]const u8,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIACTIONFORMATA,
                param1: ?[*:0]const u8,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetImageInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVICEIMAGEINFOHEADERA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputDevice8A,
                param0: ?*DIDEVICEIMAGEINFOHEADERA,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetCapabilities(self: *const T, param0: ?*DIDEVCAPS) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetCapabilities(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_EnumObjects(self: *const T, param0: ?LPDIENUMDEVICEOBJECTSCALLBACKA, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).EnumObjects(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetProperty(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SetProperty(self: *const T, param0: ?*const Guid, param1: ?*DIPROPHEADER) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SetProperty(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_Acquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).Acquire(@as(*const IDirectInputDevice8A, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_Unacquire(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).Unacquire(@as(*const IDirectInputDevice8A, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetDeviceState(self: *const T, param0: u32, param1: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetDeviceState(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetDeviceData(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SetDataFormat(self: *const T, param0: ?*DIDATAFORMAT) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SetDataFormat(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SetEventNotification(self: *const T, param0: ?HANDLE) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SetEventNotification(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SetCooperativeLevel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SetCooperativeLevel(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetObjectInfo(self: *const T, param0: ?*DIDEVICEOBJECTINSTANCEA, param1: u32, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetObjectInfo(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetDeviceInfo(self: *const T, param0: ?*DIDEVICEINSTANCEA) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetDeviceInfo(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32, param2: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_CreateEffect(self: *const T, param0: ?*const Guid, param1: ?*DIEFFECT, param2: ?*?*IDirectInputEffect, param3: ?*IUnknown) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).CreateEffect(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_EnumEffects(self: *const T, param0: ?LPDIENUMEFFECTSCALLBACKA, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).EnumEffects(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetEffectInfo(self: *const T, param0: ?*DIEFFECTINFOA, param1: ?*const Guid) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetEffectInfo(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetForceFeedbackState(self: *const T, param0: ?*u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetForceFeedbackState(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SendForceFeedbackCommand(self: *const T, param0: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SendForceFeedbackCommand(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_EnumCreatedEffectObjects(self: *const T, param0: ?LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, param1: ?*anyopaque, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).EnumCreatedEffectObjects(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_Escape(self: *const T, param0: ?*DIEFFESCAPE) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_Poll(self: *const T) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).Poll(@as(*const IDirectInputDevice8A, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SendDeviceData(self: *const T, param0: u32, param1: ?*DIDEVICEOBJECTDATA, param2: ?*u32, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SendDeviceData(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_EnumEffectsInFile(self: *const T, param0: ?[*:0]const u8, param1: ?LPDIENUMEFFECTSINFILECALLBACK, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).EnumEffectsInFile(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_WriteEffectToFile(self: *const T, param0: ?[*:0]const u8, param1: u32, param2: ?*DIFILEEFFECT, param3: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).WriteEffectToFile(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_BuildActionMap(self: *const T, param0: ?*DIACTIONFORMATA, param1: ?[*:0]const u8, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).BuildActionMap(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_SetActionMap(self: *const T, param0: ?*DIACTIONFORMATA, param1: ?[*:0]const u8, param2: u32) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).SetActionMap(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputDevice8A_GetImageInfo(self: *const T, param0: ?*DIDEVICEIMAGEINFOHEADERA) HRESULT {
                return @as(*const IDirectInputDevice8A.VTable, @ptrCast(self.vtable)).GetImageInfo(@as(*const IDirectInputDevice8A, @ptrCast(self)), param0);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DIMOUSESTATE = extern struct {
    lX: i32,
    lY: i32,
    lZ: i32,
    rgbButtons: [4]u8,
};

pub const DIMOUSESTATE2 = extern struct {
    lX: i32,
    lY: i32,
    lZ: i32,
    rgbButtons: [8]u8,
};

pub const DIJOYSTATE = extern struct {
    lX: i32,
    lY: i32,
    lZ: i32,
    lRx: i32,
    lRy: i32,
    lRz: i32,
    rglSlider: [2]i32,
    rgdwPOV: [4]u32,
    rgbButtons: [32]u8,
};

pub const DIJOYSTATE2 = extern struct {
    lX: i32,
    lY: i32,
    lZ: i32,
    lRx: i32,
    lRy: i32,
    lRz: i32,
    rglSlider: [2]i32,
    rgdwPOV: [4]u32,
    rgbButtons: [128]u8,
    lVX: i32,
    lVY: i32,
    lVZ: i32,
    lVRx: i32,
    lVRy: i32,
    lVRz: i32,
    rglVSlider: [2]i32,
    lAX: i32,
    lAY: i32,
    lAZ: i32,
    lARx: i32,
    lARy: i32,
    lARz: i32,
    rglASlider: [2]i32,
    lFX: i32,
    lFY: i32,
    lFZ: i32,
    lFRx: i32,
    lFRy: i32,
    lFRz: i32,
    rglFSlider: [2]i32,
};

pub const LPDIENUMDEVICESCALLBACKA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIDEVICEINSTANCEA,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIDEVICEINSTANCEA,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDIENUMDEVICESCALLBACKW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIDEVICEINSTANCEW,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIDEVICEINSTANCEW,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDICONFIGUREDEVICESCALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*IUnknown,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*IUnknown,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDIENUMDEVICESBYSEMANTICSCBA = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIDEVICEINSTANCEA,
        param1: ?*IDirectInputDevice8A,
        param2: u32,
        param3: u32,
        param4: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIDEVICEINSTANCEA,
        param1: ?*IDirectInputDevice8A,
        param2: u32,
        param3: u32,
        param4: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const LPDIENUMDEVICESBYSEMANTICSCBW = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?*DIDEVICEINSTANCEW,
        param1: ?*IDirectInputDevice8W,
        param2: u32,
        param3: u32,
        param4: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?*DIDEVICEINSTANCEW,
        param1: ?*IDirectInputDevice8W,
        param2: u32,
        param3: u32,
        param4: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

const IID_IDirectInputW_Value = Guid.initString("89521361-aa8a-11cf-bfc7-444553540000");
pub const IID_IDirectInputW = &IID_IDirectInputW_Value;
pub const IDirectInputW = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputW,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDeviceW,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputW,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDeviceW,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDevices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputW,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKW,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputW,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKW,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputW,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputW,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputW,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputW,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputW,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputW,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputW_CreateDevice(self: *const T, param0: ?*const Guid, param1: ?*?*IDirectInputDeviceW, param2: ?*IUnknown) HRESULT {
                return @as(*const IDirectInputW.VTable, @ptrCast(self.vtable)).CreateDevice(@as(*const IDirectInputW, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputW_EnumDevices(self: *const T, param0: u32, param1: ?LPDIENUMDEVICESCALLBACKW, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInputW.VTable, @ptrCast(self.vtable)).EnumDevices(@as(*const IDirectInputW, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputW_GetDeviceStatus(self: *const T, param0: ?*const Guid) HRESULT {
                return @as(*const IDirectInputW.VTable, @ptrCast(self.vtable)).GetDeviceStatus(@as(*const IDirectInputW, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputW_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputW.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInputW, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputW_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32) HRESULT {
                return @as(*const IDirectInputW.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputW, @ptrCast(self)), param0, param1);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputA_Value = Guid.initString("89521360-aa8a-11cf-bfc7-444553540000");
pub const IID_IDirectInputA = &IID_IDirectInputA_Value;
pub const IDirectInputA = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputA,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDeviceA,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputA,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDeviceA,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDevices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputA,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKA,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputA,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKA,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputA,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputA,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputA,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputA,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputA,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputA,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputA_CreateDevice(self: *const T, param0: ?*const Guid, param1: ?*?*IDirectInputDeviceA, param2: ?*IUnknown) HRESULT {
                return @as(*const IDirectInputA.VTable, @ptrCast(self.vtable)).CreateDevice(@as(*const IDirectInputA, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputA_EnumDevices(self: *const T, param0: u32, param1: ?LPDIENUMDEVICESCALLBACKA, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInputA.VTable, @ptrCast(self.vtable)).EnumDevices(@as(*const IDirectInputA, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputA_GetDeviceStatus(self: *const T, param0: ?*const Guid) HRESULT {
                return @as(*const IDirectInputA.VTable, @ptrCast(self.vtable)).GetDeviceStatus(@as(*const IDirectInputA, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputA_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputA.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInputA, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputA_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32) HRESULT {
                return @as(*const IDirectInputA.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputA, @ptrCast(self)), param0, param1);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInput2W_Value = Guid.initString("5944e663-aa8a-11cf-bfc7-444553540000");
pub const IID_IDirectInput2W = &IID_IDirectInput2W_Value;
pub const IDirectInput2W = extern struct {
    pub const VTable = extern struct {
        base: IDirectInputW.VTable,
        FindDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput2W,
                param0: ?*const Guid,
                param1: ?[*:0]const u16,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput2W,
                param0: ?*const Guid,
                param1: ?[*:0]const u16,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInputW.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput2W_FindDevice(self: *const T, param0: ?*const Guid, param1: ?[*:0]const u16, param2: ?*Guid) HRESULT {
                return @as(*const IDirectInput2W.VTable, @ptrCast(self.vtable)).FindDevice(@as(*const IDirectInput2W, @ptrCast(self)), param0, param1, param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInput2A_Value = Guid.initString("5944e662-aa8a-11cf-bfc7-444553540000");
pub const IID_IDirectInput2A = &IID_IDirectInput2A_Value;
pub const IDirectInput2A = extern struct {
    pub const VTable = extern struct {
        base: IDirectInputA.VTable,
        FindDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput2A,
                param0: ?*const Guid,
                param1: ?[*:0]const u8,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput2A,
                param0: ?*const Guid,
                param1: ?[*:0]const u8,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInputA.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput2A_FindDevice(self: *const T, param0: ?*const Guid, param1: ?[*:0]const u8, param2: ?*Guid) HRESULT {
                return @as(*const IDirectInput2A.VTable, @ptrCast(self.vtable)).FindDevice(@as(*const IDirectInput2A, @ptrCast(self)), param0, param1, param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInput7W_Value = Guid.initString("9a4cb685-236d-11d3-8e9d-00c04f6844ae");
pub const IID_IDirectInput7W = &IID_IDirectInput7W_Value;
pub const IDirectInput7W = extern struct {
    pub const VTable = extern struct {
        base: IDirectInput2W.VTable,
        CreateDeviceEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput7W,
                param0: ?*const Guid,
                param1: ?*const Guid,
                param2: ?*?*anyopaque,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput7W,
                param0: ?*const Guid,
                param1: ?*const Guid,
                param2: ?*?*anyopaque,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInput2W.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput7W_CreateDeviceEx(self: *const T, param0: ?*const Guid, param1: ?*const Guid, param2: ?*?*anyopaque, param3: ?*IUnknown) HRESULT {
                return @as(*const IDirectInput7W.VTable, @ptrCast(self.vtable)).CreateDeviceEx(@as(*const IDirectInput7W, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInput7A_Value = Guid.initString("9a4cb684-236d-11d3-8e9d-00c04f6844ae");
pub const IID_IDirectInput7A = &IID_IDirectInput7A_Value;
pub const IDirectInput7A = extern struct {
    pub const VTable = extern struct {
        base: IDirectInput2A.VTable,
        CreateDeviceEx: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput7A,
                param0: ?*const Guid,
                param1: ?*const Guid,
                param2: ?*?*anyopaque,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput7A,
                param0: ?*const Guid,
                param1: ?*const Guid,
                param2: ?*?*anyopaque,
                param3: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDirectInput2A.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput7A_CreateDeviceEx(self: *const T, param0: ?*const Guid, param1: ?*const Guid, param2: ?*?*anyopaque, param3: ?*IUnknown) HRESULT {
                return @as(*const IDirectInput7A.VTable, @ptrCast(self.vtable)).CreateDeviceEx(@as(*const IDirectInput7A, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInput8W_Value = Guid.initString("bf798031-483a-4da2-aa99-5d64ed369700");
pub const IID_IDirectInput8W = &IID_IDirectInput8W_Value;
pub const IDirectInput8W = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDevice8W,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDevice8W,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDevices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKW,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKW,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?*const Guid,
                param1: ?[*:0]const u16,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?*const Guid,
                param1: ?[*:0]const u16,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDevicesBySemantics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?[*:0]const u16,
                param1: ?*DIACTIONFORMATW,
                param2: ?LPDIENUMDEVICESBYSEMANTICSCBW,
                param3: ?*anyopaque,
                param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?[*:0]const u16,
                param1: ?*DIACTIONFORMATW,
                param2: ?LPDIENUMDEVICESBYSEMANTICSCBW,
                param3: ?*anyopaque,
                param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConfigureDevices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8W,
                param0: ?LPDICONFIGUREDEVICESCALLBACK,
                param1: ?*DICONFIGUREDEVICESPARAMSW,
                param2: u32,
                param3: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8W,
                param0: ?LPDICONFIGUREDEVICESCALLBACK,
                param1: ?*DICONFIGUREDEVICESPARAMSW,
                param2: u32,
                param3: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_CreateDevice(self: *const T, param0: ?*const Guid, param1: ?*?*IDirectInputDevice8W, param2: ?*IUnknown) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).CreateDevice(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_EnumDevices(self: *const T, param0: u32, param1: ?LPDIENUMDEVICESCALLBACKW, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).EnumDevices(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_GetDeviceStatus(self: *const T, param0: ?*const Guid) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).GetDeviceStatus(@as(*const IDirectInput8W, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_FindDevice(self: *const T, param0: ?*const Guid, param1: ?[*:0]const u16, param2: ?*Guid) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).FindDevice(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_EnumDevicesBySemantics(self: *const T, param0: ?[*:0]const u16, param1: ?*DIACTIONFORMATW, param2: ?LPDIENUMDEVICESBYSEMANTICSCBW, param3: ?*anyopaque, param4: u32) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).EnumDevicesBySemantics(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2, param3, param4);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8W_ConfigureDevices(self: *const T, param0: ?LPDICONFIGUREDEVICESCALLBACK, param1: ?*DICONFIGUREDEVICESPARAMSW, param2: u32, param3: ?*anyopaque) HRESULT {
                return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).ConfigureDevices(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInput8A_Value = Guid.initString("bf798030-483a-4da2-aa99-5d64ed369700");
pub const IID_IDirectInput8A = &IID_IDirectInput8A_Value;
pub const IDirectInput8A = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDevice8A,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?*const Guid,
                param1: ?*?*IDirectInputDevice8A,
                param2: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDevices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKA,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: u32,
                param1: ?LPDIENUMDEVICESCALLBACKA,
                param2: ?*anyopaque,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDeviceStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RunControlPanel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Initialize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?HINSTANCE,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindDevice: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?*const Guid,
                param1: ?[*:0]const u8,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?*const Guid,
                param1: ?[*:0]const u8,
                param2: ?*Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumDevicesBySemantics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?[*:0]const u8,
                param1: ?*DIACTIONFORMATA,
                param2: ?LPDIENUMDEVICESBYSEMANTICSCBA,
                param3: ?*anyopaque,
                param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?[*:0]const u8,
                param1: ?*DIACTIONFORMATA,
                param2: ?LPDIENUMDEVICESBYSEMANTICSCBA,
                param3: ?*anyopaque,
                param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConfigureDevices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInput8A,
                param0: ?LPDICONFIGUREDEVICESCALLBACK,
                param1: ?*DICONFIGUREDEVICESPARAMSA,
                param2: u32,
                param3: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInput8A,
                param0: ?LPDICONFIGUREDEVICESCALLBACK,
                param1: ?*DICONFIGUREDEVICESPARAMSA,
                param2: u32,
                param3: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_CreateDevice(self: *const T, param0: ?*const Guid, param1: ?*?*IDirectInputDevice8A, param2: ?*IUnknown) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).CreateDevice(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_EnumDevices(self: *const T, param0: u32, param1: ?LPDIENUMDEVICESCALLBACKA, param2: ?*anyopaque, param3: u32) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).EnumDevices(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_GetDeviceStatus(self: *const T, param0: ?*const Guid) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).GetDeviceStatus(@as(*const IDirectInput8A, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_FindDevice(self: *const T, param0: ?*const Guid, param1: ?[*:0]const u8, param2: ?*Guid) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).FindDevice(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_EnumDevicesBySemantics(self: *const T, param0: ?[*:0]const u8, param1: ?*DIACTIONFORMATA, param2: ?LPDIENUMDEVICESBYSEMANTICSCBA, param3: ?*anyopaque, param4: u32) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).EnumDevicesBySemantics(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1, param2, param3, param4);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInput8A_ConfigureDevices(self: *const T, param0: ?LPDICONFIGUREDEVICESCALLBACK, param1: ?*DICONFIGUREDEVICESPARAMSA, param2: u32, param3: ?*anyopaque) HRESULT {
                return @as(*const IDirectInput8A.VTable, @ptrCast(self.vtable)).ConfigureDevices(@as(*const IDirectInput8A, @ptrCast(self)), param0, param1, param2, param3);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const LPFNSHOWJOYCPL = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        hWnd: ?HWND,
    ) callconv(@import("std").os.windows.WINAPI) void,
    else => *const fn (
        hWnd: ?HWND,
    ) callconv(@import("std").os.windows.WINAPI) void,
};

pub const DIOBJECTATTRIBUTES = extern struct {
    dwFlags: u32,
    wUsagePage: u16,
    wUsage: u16,
};

pub const DIFFOBJECTATTRIBUTES = extern struct {
    dwFFMaxForce: u32,
    dwFFForceResolution: u32,
};

pub const DIOBJECTCALIBRATION = extern struct {
    lMin: i32,
    lCenter: i32,
    lMax: i32,
};

pub const DIPOVCALIBRATION = extern struct {
    lMin: [5]i32,
    lMax: [5]i32,
};

pub const DIEFFECTATTRIBUTES = extern struct {
    dwEffectId: u32,
    dwEffType: u32,
    dwStaticParams: u32,
    dwDynamicParams: u32,
    dwCoords: u32,
};

pub const DIFFDEVICEATTRIBUTES = extern struct {
    dwFlags: u32,
    dwFFSamplePeriod: u32,
    dwFFMinTimeResolution: u32,
};

pub const DIDRIVERVERSIONS = extern struct {
    dwSize: u32,
    dwFirmwareRevision: u32,
    dwHardwareRevision: u32,
    dwFFDriverVersion: u32,
};

pub const DIDEVICESTATE = extern struct {
    dwSize: u32,
    dwState: u32,
    dwLoad: u32,
};

pub const DIHIDFFINITINFO = extern struct {
    dwSize: u32,
    pwszDeviceInterface: ?PWSTR,
    GuidInstance: Guid,
};

const IID_IDirectInputEffectDriver_Value = Guid.initString("02538130-898f-11d0-9ad0-00a0c9a06e35");
pub const IID_IDirectInputEffectDriver = &IID_IDirectInputEffectDriver_Value;
pub const IDirectInputEffectDriver = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DeviceID: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: u32,
                param3: u32,
                param4: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: u32,
                param3: u32,
                param4: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVersions: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: ?*DIDRIVERVERSIONS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: ?*DIDRIVERVERSIONS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Escape: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: ?*DIEFFESCAPE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetGain: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendForceFeedbackCommand: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetForceFeedbackState: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: ?*DIDEVICESTATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: ?*DIDEVICESTATE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DownloadEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: ?*u32,
                param3: ?*DIEFFECT,
                param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: ?*u32,
                param3: ?*DIEFFECT,
                param4: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DestroyEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StartEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: u32,
                param3: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        StopEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetEffectStatus: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputEffectDriver,
                param0: u32,
                param1: u32,
                param2: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_DeviceID(self: *const T, param0: u32, param1: u32, param2: u32, param3: u32, param4: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).DeviceID(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1, param2, param3, param4);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_GetVersions(self: *const T, param0: ?*DIDRIVERVERSIONS) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).GetVersions(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_Escape(self: *const T, param0: u32, param1: u32, param2: ?*DIEFFESCAPE) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_SetGain(self: *const T, param0: u32, param1: u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).SetGain(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_SendForceFeedbackCommand(self: *const T, param0: u32, param1: u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).SendForceFeedbackCommand(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_GetForceFeedbackState(self: *const T, param0: u32, param1: ?*DIDEVICESTATE) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).GetForceFeedbackState(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_DownloadEffect(self: *const T, param0: u32, param1: u32, param2: ?*u32, param3: ?*DIEFFECT, param4: u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).DownloadEffect(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1, param2, param3, param4);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_DestroyEffect(self: *const T, param0: u32, param1: u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).DestroyEffect(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_StartEffect(self: *const T, param0: u32, param1: u32, param2: u32, param3: u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).StartEffect(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_StopEffect(self: *const T, param0: u32, param1: u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).StopEffect(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputEffectDriver_GetEffectStatus(self: *const T, param0: u32, param1: u32, param2: ?*u32) HRESULT {
                return @as(*const IDirectInputEffectDriver.VTable, @ptrCast(self.vtable)).GetEffectStatus(@as(*const IDirectInputEffectDriver, @ptrCast(self)), param0, param1, param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const JOYPOS = extern struct {
    dwX: u32,
    dwY: u32,
    dwZ: u32,
    dwR: u32,
    dwU: u32,
    dwV: u32,
};

pub const JOYRANGE = extern struct {
    jpMin: JOYPOS,
    jpMax: JOYPOS,
    jpCenter: JOYPOS,
};

pub const JOYREGUSERVALUES = extern struct {
    dwTimeOut: u32,
    jrvRanges: JOYRANGE,
    jpDeadZone: JOYPOS,
};

pub const JOYREGHWSETTINGS = extern struct {
    dwFlags: u32,
    dwNumButtons: u32,
};

pub const JOYREGHWVALUES = extern struct {
    jrvHardware: JOYRANGE,
    dwPOVValues: [4]u32,
    dwCalFlags: u32,
};

pub const JOYREGHWCONFIG = extern struct {
    hws: JOYREGHWSETTINGS,
    dwUsageSettings: u32,
    hwv: JOYREGHWVALUES,
    dwType: u32,
    dwReserved: u32,
};

pub const JOYCALIBRATE = extern struct {
    wXbase: u32,
    wXdelta: u32,
    wYbase: u32,
    wYdelta: u32,
    wZbase: u32,
    wZdelta: u32,
};

pub const LPDIJOYTYPECALLBACK = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        param0: ?[*:0]const u16,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
    else => *const fn (
        param0: ?[*:0]const u16,
        param1: ?*anyopaque,
    ) callconv(@import("std").os.windows.WINAPI) BOOL,
};

pub const DIJOYTYPEINFO_DX5 = extern struct {
    dwSize: u32,
    hws: JOYREGHWSETTINGS,
    clsidConfig: Guid,
    wszDisplayName: [256]u16,
    wszCallout: [260]u16,
};

pub const DIJOYTYPEINFO_DX6 = extern struct {
    dwSize: u32,
    hws: JOYREGHWSETTINGS,
    clsidConfig: Guid,
    wszDisplayName: [256]u16,
    wszCallout: [260]u16,
    wszHardwareId: [256]u16,
    dwFlags1: u32,
};

pub const DIJOYTYPEINFO = extern struct {
    dwSize: u32,
    hws: JOYREGHWSETTINGS,
    clsidConfig: Guid,
    wszDisplayName: [256]u16,
    wszCallout: [260]u16,
    wszHardwareId: [256]u16,
    dwFlags1: u32,
    dwFlags2: u32,
    wszMapFile: [256]u16,
};

pub const DIJOYCONFIG_DX5 = extern struct {
    dwSize: u32,
    guidInstance: Guid,
    hwc: JOYREGHWCONFIG,
    dwGain: u32,
    wszType: [256]u16,
    wszCallout: [256]u16,
};

pub const DIJOYCONFIG = extern struct {
    dwSize: u32,
    guidInstance: Guid,
    hwc: JOYREGHWCONFIG,
    dwGain: u32,
    wszType: [256]u16,
    wszCallout: [256]u16,
    guidGameport: Guid,
};

pub const DIJOYUSERVALUES = extern struct {
    dwSize: u32,
    ruv: JOYREGUSERVALUES,
    wszGlobalDriver: [256]u16,
    wszGameportEmulator: [256]u16,
};

const IID_IDirectInputJoyConfig_Value = Guid.initString("1de12ab1-c9f5-11cf-bfc7-444553540000");
pub const IID_IDirectInputJoyConfig = &IID_IDirectInputJoyConfig_Value;
pub const IDirectInputJoyConfig = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Acquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unacquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCooperativeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumTypes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?LPDIJOYTYPECALLBACK,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?LPDIJOYTYPECALLBACK,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTypeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTypeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUserValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetUserValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddNewHardware: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?HWND,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?HWND,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenTypeKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenConfigKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
                param1: u32,
                param2: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig,
                param0: u32,
                param1: u32,
                param2: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_Acquire(self: *const T) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).Acquire(@as(*const IDirectInputJoyConfig, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_Unacquire(self: *const T) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).Unacquire(@as(*const IDirectInputJoyConfig, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_SetCooperativeLevel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).SetCooperativeLevel(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_SendNotify(self: *const T) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).SendNotify(@as(*const IDirectInputJoyConfig, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_EnumTypes(self: *const T, param0: ?LPDIJOYTYPECALLBACK, param1: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).EnumTypes(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_GetTypeInfo(self: *const T, param0: ?[*:0]const u16, param1: ?*DIJOYTYPEINFO, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).GetTypeInfo(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_SetTypeInfo(self: *const T, param0: ?[*:0]const u16, param1: ?*DIJOYTYPEINFO, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).SetTypeInfo(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_DeleteType(self: *const T, param0: ?[*:0]const u16) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).DeleteType(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_GetConfig(self: *const T, param0: u32, param1: ?*DIJOYCONFIG, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).GetConfig(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_SetConfig(self: *const T, param0: u32, param1: ?*DIJOYCONFIG, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).SetConfig(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_DeleteConfig(self: *const T, param0: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).DeleteConfig(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_GetUserValues(self: *const T, param0: ?*DIJOYUSERVALUES, param1: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).GetUserValues(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_SetUserValues(self: *const T, param0: ?*DIJOYUSERVALUES, param1: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).SetUserValues(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_AddNewHardware(self: *const T, param0: ?HWND, param1: ?*const Guid) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).AddNewHardware(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_OpenTypeKey(self: *const T, param0: ?[*:0]const u16, param1: u32, param2: ?*?HKEY) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).OpenTypeKey(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig_OpenConfigKey(self: *const T, param0: u32, param1: u32, param2: ?*?HKEY) HRESULT {
                return @as(*const IDirectInputJoyConfig.VTable, @ptrCast(self.vtable)).OpenConfigKey(@as(*const IDirectInputJoyConfig, @ptrCast(self)), param0, param1, param2);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDirectInputJoyConfig8_Value = Guid.initString("eb0d7dfa-1990-4f27-b4d6-edf2eec4a44c");
pub const IID_IDirectInputJoyConfig8 = &IID_IDirectInputJoyConfig8_Value;
pub const IDirectInputJoyConfig8 = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Acquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Unacquire: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCooperativeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?HWND,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SendNotify: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnumTypes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?LPDIJOYTYPECALLBACK,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?LPDIJOYTYPECALLBACK,
                param1: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTypeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTypeInfo: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
                param3: ?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
                param1: ?*DIJOYTYPEINFO,
                param2: u32,
                param3: ?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: u32,
                param1: ?*DIJOYCONFIG,
                param2: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DeleteConfig: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUserValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetUserValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?*DIJOYUSERVALUES,
                param1: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddNewHardware: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?HWND,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?HWND,
                param1: ?*const Guid,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenTypeKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?[*:0]const u16,
                param1: u32,
                param2: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        OpenAppStatusKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDirectInputJoyConfig8,
                param0: ?*?HKEY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_Acquire(self: *const T) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).Acquire(@as(*const IDirectInputJoyConfig8, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_Unacquire(self: *const T) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).Unacquire(@as(*const IDirectInputJoyConfig8, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_SetCooperativeLevel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).SetCooperativeLevel(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_SendNotify(self: *const T) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).SendNotify(@as(*const IDirectInputJoyConfig8, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_EnumTypes(self: *const T, param0: ?LPDIJOYTYPECALLBACK, param1: ?*anyopaque) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).EnumTypes(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_GetTypeInfo(self: *const T, param0: ?[*:0]const u16, param1: ?*DIJOYTYPEINFO, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).GetTypeInfo(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_SetTypeInfo(self: *const T, param0: ?[*:0]const u16, param1: ?*DIJOYTYPEINFO, param2: u32, param3: ?PWSTR) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).SetTypeInfo(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1, param2, param3);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_DeleteType(self: *const T, param0: ?[*:0]const u16) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).DeleteType(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_GetConfig(self: *const T, param0: u32, param1: ?*DIJOYCONFIG, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).GetConfig(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_SetConfig(self: *const T, param0: u32, param1: ?*DIJOYCONFIG, param2: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).SetConfig(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_DeleteConfig(self: *const T, param0: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).DeleteConfig(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_GetUserValues(self: *const T, param0: ?*DIJOYUSERVALUES, param1: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).GetUserValues(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_SetUserValues(self: *const T, param0: ?*DIJOYUSERVALUES, param1: u32) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).SetUserValues(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_AddNewHardware(self: *const T, param0: ?HWND, param1: ?*const Guid) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).AddNewHardware(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_OpenTypeKey(self: *const T, param0: ?[*:0]const u16, param1: u32, param2: ?*?HKEY) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).OpenTypeKey(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0, param1, param2);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDirectInputJoyConfig8_OpenAppStatusKey(self: *const T, param0: ?*?HKEY) HRESULT {
                return @as(*const IDirectInputJoyConfig8.VTable, @ptrCast(self.vtable)).OpenAppStatusKey(@as(*const IDirectInputJoyConfig8, @ptrCast(self)), param0);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const KEYBOARD_INPUT_DATA = extern struct {
    UnitId: u16,
    MakeCode: u16,
    Flags: u16,
    Reserved: u16,
    ExtraInformation: u32,
};

pub const KEYBOARD_TYPEMATIC_PARAMETERS = extern struct {
    UnitId: u16,
    Rate: u16,
    Delay: u16,
};

pub const KEYBOARD_ID = extern struct {
    Type: u8,
    Subtype: u8,
};

pub const KEYBOARD_ATTRIBUTES = extern struct {
    KeyboardIdentifier: KEYBOARD_ID,
    KeyboardMode: u16,
    NumberOfFunctionKeys: u16,
    NumberOfIndicators: u16,
    NumberOfKeysTotal: u16,
    InputDataQueueLength: u32,
    KeyRepeatMinimum: KEYBOARD_TYPEMATIC_PARAMETERS,
    KeyRepeatMaximum: KEYBOARD_TYPEMATIC_PARAMETERS,
};

pub const KEYBOARD_EXTENDED_ATTRIBUTES = extern struct {
    Version: u8,
    FormFactor: u8,
    KeyType: u8,
    PhysicalLayout: u8,
    VendorSpecificPhysicalLayout: u8,
    IETFLanguageTagIndex: u8,
    ImplementedInputAssistControls: u8,
};

pub const KEYBOARD_INDICATOR_PARAMETERS = extern struct {
    UnitId: u16,
    LedFlags: u16,
};

pub const INDICATOR_LIST = extern struct {
    MakeCode: u16,
    IndicatorFlags: u16,
};

pub const KEYBOARD_INDICATOR_TRANSLATION = extern struct {
    NumberOfIndicatorKeys: u16,
    IndicatorList: [1]INDICATOR_LIST,
};

pub const KEYBOARD_UNIT_ID_PARAMETER = extern struct {
    UnitId: u16,
};

pub const KEYBOARD_IME_STATUS = extern struct {
    UnitId: u16,
    ImeOpen: u32,
    ImeConvMode: u32,
};

pub const MOUSE_INPUT_DATA = extern struct {
    UnitId: u16,
    Flags: u16,
    Anonymous: extern union {
        Buttons: u32,
        Anonymous: extern struct {
            ButtonFlags: u16,
            ButtonData: u16,
        },
    },
    RawButtons: u32,
    LastX: i32,
    LastY: i32,
    ExtraInformation: u32,
};

pub const MOUSE_ATTRIBUTES = extern struct {
    MouseIdentifier: u16,
    NumberOfButtons: u16,
    SampleRate: u16,
    InputDataQueueLength: u32,
};

pub const MOUSE_UNIT_ID_PARAMETER = extern struct {
    UnitId: u16,
};

pub const HIDP_REPORT_TYPE = enum(i32) {
    Input = 0,
    Output = 1,
    Feature = 2,
};
pub const HidP_Input = HIDP_REPORT_TYPE.Input;
pub const HidP_Output = HIDP_REPORT_TYPE.Output;
pub const HidP_Feature = HIDP_REPORT_TYPE.Feature;

pub const USAGE_AND_PAGE = extern struct {
    Usage: u16,
    UsagePage: u16,
};

pub const HIDP_BUTTON_CAPS = extern struct {
    UsagePage: u16,
    ReportID: u8,
    IsAlias: BOOLEAN,
    BitField: u16,
    LinkCollection: u16,
    LinkUsage: u16,
    LinkUsagePage: u16,
    IsRange: BOOLEAN,
    IsStringRange: BOOLEAN,
    IsDesignatorRange: BOOLEAN,
    IsAbsolute: BOOLEAN,
    ReportCount: u16,
    Reserved2: u16,
    Reserved: [9]u32,
    Anonymous: extern union {
        Range: extern struct {
            UsageMin: u16,
            UsageMax: u16,
            StringMin: u16,
            StringMax: u16,
            DesignatorMin: u16,
            DesignatorMax: u16,
            DataIndexMin: u16,
            DataIndexMax: u16,
        },
        NotRange: extern struct {
            Usage: u16,
            Reserved1: u16,
            StringIndex: u16,
            Reserved2: u16,
            DesignatorIndex: u16,
            Reserved3: u16,
            DataIndex: u16,
            Reserved4: u16,
        },
    },
};

pub const HIDP_VALUE_CAPS = extern struct {
    UsagePage: u16,
    ReportID: u8,
    IsAlias: BOOLEAN,
    BitField: u16,
    LinkCollection: u16,
    LinkUsage: u16,
    LinkUsagePage: u16,
    IsRange: BOOLEAN,
    IsStringRange: BOOLEAN,
    IsDesignatorRange: BOOLEAN,
    IsAbsolute: BOOLEAN,
    HasNull: BOOLEAN,
    Reserved: u8,
    BitSize: u16,
    ReportCount: u16,
    Reserved2: [5]u16,
    UnitsExp: u32,
    Units: u32,
    LogicalMin: i32,
    LogicalMax: i32,
    PhysicalMin: i32,
    PhysicalMax: i32,
    Anonymous: extern union {
        Range: extern struct {
            UsageMin: u16,
            UsageMax: u16,
            StringMin: u16,
            StringMax: u16,
            DesignatorMin: u16,
            DesignatorMax: u16,
            DataIndexMin: u16,
            DataIndexMax: u16,
        },
        NotRange: extern struct {
            Usage: u16,
            Reserved1: u16,
            StringIndex: u16,
            Reserved2: u16,
            DesignatorIndex: u16,
            Reserved3: u16,
            DataIndex: u16,
            Reserved4: u16,
        },
    },
};

pub const HIDP_LINK_COLLECTION_NODE = extern struct {
    LinkUsage: u16 align(4),
    LinkUsagePage: u16 align(4),
    Parent: u16 align(4),
    NumberOfChildren: u16 align(4),
    NextSibling: u16 align(4),
    FirstChild: u16 align(4),
    _bitfield: u32 align(4),
    UserContext: ?*anyopaque align(4),
};

pub const _HIDP_PREPARSED_DATA = extern struct {
    placeholder: usize, // TODO: why is this type empty?
};

pub const HIDP_CAPS = extern struct {
    Usage: u16,
    UsagePage: u16,
    InputReportByteLength: u16,
    OutputReportByteLength: u16,
    FeatureReportByteLength: u16,
    Reserved: [17]u16,
    NumberLinkCollectionNodes: u16,
    NumberInputButtonCaps: u16,
    NumberInputValueCaps: u16,
    NumberInputDataIndices: u16,
    NumberOutputButtonCaps: u16,
    NumberOutputValueCaps: u16,
    NumberOutputDataIndices: u16,
    NumberFeatureButtonCaps: u16,
    NumberFeatureValueCaps: u16,
    NumberFeatureDataIndices: u16,
};

pub const HIDP_DATA = extern struct {
    DataIndex: u16,
    Reserved: u16,
    Anonymous: extern union {
        RawValue: u32,
        On: BOOLEAN,
    },
};

pub const HIDP_UNKNOWN_TOKEN = extern struct {
    Token: u8,
    Reserved: [3]u8,
    BitField: u32,
};

pub const HIDP_EXTENDED_ATTRIBUTES = extern struct {
    NumGlobalUnknowns: u8 align(4),
    Reserved: [3]u8 align(4),
    GlobalUnknowns: ?*HIDP_UNKNOWN_TOKEN align(4),
    Data: [1]u32 align(4),
};

pub const HIDP_BUTTON_ARRAY_DATA = extern struct {
    ArrayIndex: u16,
    On: BOOLEAN,
};

pub const HIDP_KEYBOARD_DIRECTION = enum(i32) {
    Break = 0,
    Make = 1,
};
pub const HidP_Keyboard_Break = HIDP_KEYBOARD_DIRECTION.Break;
pub const HidP_Keyboard_Make = HIDP_KEYBOARD_DIRECTION.Make;

pub const HIDP_KEYBOARD_MODIFIER_STATE = extern struct {
    Anonymous: extern union {
        Anonymous: extern struct {
            _bitfield: u32,
        },
        ul: u32,
    },
};

pub const PHIDP_INSERT_SCANCODES = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        Context: ?*anyopaque,
        // TODO: what to do with BytesParamIndex 2?
        NewScanCodes: ?[*]u8,
        Length: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOLEAN,
    else => *const fn (
        Context: ?*anyopaque,
        // TODO: what to do with BytesParamIndex 2?
        NewScanCodes: ?[*]u8,
        Length: u32,
    ) callconv(@import("std").os.windows.WINAPI) BOOLEAN,
};

pub const PFN_HidP_GetVersionInternal = switch (@import("builtin").zig_backend) {
    .stage1 => fn (
        Version: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) NTSTATUS,
    else => *const fn (
        Version: ?*u32,
    ) callconv(@import("std").os.windows.WINAPI) NTSTATUS,
};

pub const HIDD_CONFIGURATION = extern struct {
    cookie: ?*anyopaque align(4),
    size: u32 align(4),
    RingBufferSize: u32 align(4),
};

pub const HIDD_ATTRIBUTES = extern struct {
    Size: u32,
    VendorID: u16,
    ProductID: u16,
    VersionNumber: u16,
};

pub const HID_XFER_PACKET = extern struct {
    reportBuffer: ?*u8,
    reportBufferLen: u32,
    reportId: u8,
};

pub const HID_COLLECTION_INFORMATION = extern struct {
    DescriptorSize: u32,
    Polled: BOOLEAN,
    Reserved1: [1]u8,
    VendorID: u16,
    ProductID: u16,
    VersionNumber: u16,
};

pub const HID_DRIVER_CONFIG = extern struct {
    Size: u32,
    RingBufferSize: u32,
};

pub const GPIOBUTTONS_BUTTON_TYPE = enum(i32) {
    POWER = 0,
    WINDOWS = 1,
    VOLUME_UP = 2,
    VOLUME_DOWN = 3,
    ROTATION_LOCK = 4,
    BACK = 5,
    SEARCH = 6,
    CAMERA_FOCUS = 7,
    CAMERA_SHUTTER = 8,
    RINGER_TOGGLE = 9,
    HEADSET = 10,
    HWKB_DEPLOY = 11,
    CAMERA_LENS = 12,
    OEM_CUSTOM = 13,
    OEM_CUSTOM2 = 14,
    OEM_CUSTOM3 = 15,
    // COUNT_MIN = 5, this enum value conflicts with BACK
    COUNT = 16,
};
pub const GPIO_BUTTON_POWER = GPIOBUTTONS_BUTTON_TYPE.POWER;
pub const GPIO_BUTTON_WINDOWS = GPIOBUTTONS_BUTTON_TYPE.WINDOWS;
pub const GPIO_BUTTON_VOLUME_UP = GPIOBUTTONS_BUTTON_TYPE.VOLUME_UP;
pub const GPIO_BUTTON_VOLUME_DOWN = GPIOBUTTONS_BUTTON_TYPE.VOLUME_DOWN;
pub const GPIO_BUTTON_ROTATION_LOCK = GPIOBUTTONS_BUTTON_TYPE.ROTATION_LOCK;
pub const GPIO_BUTTON_BACK = GPIOBUTTONS_BUTTON_TYPE.BACK;
pub const GPIO_BUTTON_SEARCH = GPIOBUTTONS_BUTTON_TYPE.SEARCH;
pub const GPIO_BUTTON_CAMERA_FOCUS = GPIOBUTTONS_BUTTON_TYPE.CAMERA_FOCUS;
pub const GPIO_BUTTON_CAMERA_SHUTTER = GPIOBUTTONS_BUTTON_TYPE.CAMERA_SHUTTER;
pub const GPIO_BUTTON_RINGER_TOGGLE = GPIOBUTTONS_BUTTON_TYPE.RINGER_TOGGLE;
pub const GPIO_BUTTON_HEADSET = GPIOBUTTONS_BUTTON_TYPE.HEADSET;
pub const GPIO_BUTTON_HWKB_DEPLOY = GPIOBUTTONS_BUTTON_TYPE.HWKB_DEPLOY;
pub const GPIO_BUTTON_CAMERA_LENS = GPIOBUTTONS_BUTTON_TYPE.CAMERA_LENS;
pub const GPIO_BUTTON_OEM_CUSTOM = GPIOBUTTONS_BUTTON_TYPE.OEM_CUSTOM;
pub const GPIO_BUTTON_OEM_CUSTOM2 = GPIOBUTTONS_BUTTON_TYPE.OEM_CUSTOM2;
pub const GPIO_BUTTON_OEM_CUSTOM3 = GPIOBUTTONS_BUTTON_TYPE.OEM_CUSTOM3;
pub const GPIO_BUTTON_COUNT_MIN = GPIOBUTTONS_BUTTON_TYPE.BACK;
pub const GPIO_BUTTON_COUNT = GPIOBUTTONS_BUTTON_TYPE.COUNT;

pub const INPUT_BUTTON_ENABLE_INFO = extern struct {
    ButtonType: GPIOBUTTONS_BUTTON_TYPE,
    Enabled: BOOLEAN,
};

//--------------------------------------------------------------------------------
// Section: Functions (47)
//--------------------------------------------------------------------------------
pub extern "dinput8" fn DirectInput8Create(
    hinst: ?HINSTANCE,
    dwVersion: u32,
    riidltf: ?*const Guid,
    ppvOut: ?*?*anyopaque,
    punkOuter: ?*IUnknown,
) callconv(@import("std").os.windows.WINAPI) HRESULT;

// TODO: this type is limited to platform 'windows5.0'
pub extern "winmm" fn joyConfigChanged(
    dwFlags: u32,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "hid" fn HidP_GetCaps(
    PreparsedData: isize,
    Capabilities: ?*HIDP_CAPS,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetLinkCollectionNodes(
    LinkCollectionNodes: [*]HIDP_LINK_COLLECTION_NODE,
    LinkCollectionNodesLength: ?*u32,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetSpecificButtonCaps(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    ButtonCaps: [*]HIDP_BUTTON_CAPS,
    ButtonCapsLength: ?*u16,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetButtonCaps(
    ReportType: HIDP_REPORT_TYPE,
    ButtonCaps: [*]HIDP_BUTTON_CAPS,
    ButtonCapsLength: ?*u16,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetSpecificValueCaps(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    ValueCaps: [*]HIDP_VALUE_CAPS,
    ValueCapsLength: ?*u16,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetValueCaps(
    ReportType: HIDP_REPORT_TYPE,
    ValueCaps: [*]HIDP_VALUE_CAPS,
    ValueCapsLength: ?*u16,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetExtendedAttributes(
    ReportType: HIDP_REPORT_TYPE,
    DataIndex: u16,
    PreparsedData: isize,
    Attributes: [*]HIDP_EXTENDED_ATTRIBUTES,
    LengthAttributes: ?*u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_InitializeReportForID(
    ReportType: HIDP_REPORT_TYPE,
    ReportID: u8,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 4?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_SetData(
    ReportType: HIDP_REPORT_TYPE,
    DataList: [*]HIDP_DATA,
    DataLength: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 5?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetData(
    ReportType: HIDP_REPORT_TYPE,
    DataList: [*]HIDP_DATA,
    DataLength: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 5?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_MaxDataListLength(
    ReportType: HIDP_REPORT_TYPE,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "hid" fn HidP_SetUsages(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    UsageList: [*:0]u16,
    UsageLength: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_UnsetUsages(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    UsageList: [*:0]u16,
    UsageLength: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetUsages(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    UsageList: [*:0]u16,
    UsageLength: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetUsagesEx(
    ReportType: HIDP_REPORT_TYPE,
    LinkCollection: u16,
    ButtonList: [*]USAGE_AND_PAGE,
    UsageLength: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 6?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_MaxUsageListLength(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) u32;

pub extern "hid" fn HidP_SetUsageValue(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    UsageValue: u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_SetScaledUsageValue(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    UsageValue: i32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_SetUsageValueArray(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    // TODO: what to do with BytesParamIndex 5?
    UsageValue: ?[*]u8,
    UsageValueByteLength: u16,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 8?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetUsageValue(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    UsageValue: ?*u32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetScaledUsageValue(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    UsageValue: ?*i32,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 7?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetUsageValueArray(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    // TODO: what to do with BytesParamIndex 5?
    UsageValue: ?[*]u8,
    UsageValueByteLength: u16,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 8?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_UsageListDifference(
    PreviousUsageList: [*:0]u16,
    CurrentUsageList: [*:0]u16,
    BreakUsageList: [*:0]u16,
    MakeUsageList: [*:0]u16,
    UsageListLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_GetButtonArray(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    ButtonData: [*]HIDP_BUTTON_ARRAY_DATA,
    ButtonDataLength: ?*u16,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 8?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_SetButtonArray(
    ReportType: HIDP_REPORT_TYPE,
    UsagePage: u16,
    LinkCollection: u16,
    Usage: u16,
    ButtonData: [*]HIDP_BUTTON_ARRAY_DATA,
    ButtonDataLength: u16,
    PreparsedData: isize,
    // TODO: what to do with BytesParamIndex 8?
    Report: ?[*]u8,
    ReportLength: u32,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidP_TranslateUsagesToI8042ScanCodes(
    ChangedUsageList: [*:0]u16,
    UsageListLength: u32,
    KeyAction: HIDP_KEYBOARD_DIRECTION,
    ModifierState: ?*HIDP_KEYBOARD_MODIFIER_STATE,
    InsertCodesProcedure: ?PHIDP_INSERT_SCANCODES,
    InsertCodesContext: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) NTSTATUS;

pub extern "hid" fn HidD_GetAttributes(
    HidDeviceObject: ?HANDLE,
    Attributes: ?*HIDD_ATTRIBUTES,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetHidGuid(
    HidGuid: ?*Guid,
) callconv(@import("std").os.windows.WINAPI) void;

pub extern "hid" fn HidD_GetPreparsedData(
    HidDeviceObject: ?HANDLE,
    PreparsedData: ?*isize,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_FreePreparsedData(
    PreparsedData: isize,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_FlushQueue(
    HidDeviceObject: ?HANDLE,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetConfiguration(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Configuration: ?*HIDD_CONFIGURATION,
    ConfigurationLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_SetConfiguration(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Configuration: ?*HIDD_CONFIGURATION,
    ConfigurationLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetFeature(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    ReportBuffer: ?*anyopaque,
    ReportBufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_SetFeature(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    ReportBuffer: ?*anyopaque,
    ReportBufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetInputReport(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    ReportBuffer: ?*anyopaque,
    ReportBufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_SetOutputReport(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    ReportBuffer: ?*anyopaque,
    ReportBufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetNumInputBuffers(
    HidDeviceObject: ?HANDLE,
    NumberBuffers: ?*u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_SetNumInputBuffers(
    HidDeviceObject: ?HANDLE,
    NumberBuffers: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetPhysicalDescriptor(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*anyopaque,
    BufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetManufacturerString(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*anyopaque,
    BufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetProductString(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*anyopaque,
    BufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetIndexedString(
    HidDeviceObject: ?HANDLE,
    StringIndex: u32,
    // TODO: what to do with BytesParamIndex 3?
    Buffer: ?*anyopaque,
    BufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetSerialNumberString(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*anyopaque,
    BufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

pub extern "hid" fn HidD_GetMsGenreDescriptor(
    HidDeviceObject: ?HANDLE,
    // TODO: what to do with BytesParamIndex 2?
    Buffer: ?*anyopaque,
    BufferLength: u32,
) callconv(@import("std").os.windows.WINAPI) BOOLEAN;

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (22)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {
        pub const DIACTION = thismodule.DIACTIONA;
        pub const DIACTIONFORMAT = thismodule.DIACTIONFORMATA;
        pub const DICONFIGUREDEVICESPARAMS = thismodule.DICONFIGUREDEVICESPARAMSA;
        pub const DIDEVICEIMAGEINFO = thismodule.DIDEVICEIMAGEINFOA;
        pub const DIDEVICEIMAGEINFOHEADER = thismodule.DIDEVICEIMAGEINFOHEADERA;
        pub const DIDEVICEOBJECTINSTANCE_DX3 = thismodule.DIDEVICEOBJECTINSTANCE_DX3A;
        pub const DIDEVICEOBJECTINSTANCE = thismodule.DIDEVICEOBJECTINSTANCEA;
        pub const LPDIENUMDEVICEOBJECTSCALLBACK = thismodule.LPDIENUMDEVICEOBJECTSCALLBACKA;
        pub const DIDEVICEINSTANCE_DX3 = thismodule.DIDEVICEINSTANCE_DX3A;
        pub const DIDEVICEINSTANCE = thismodule.DIDEVICEINSTANCEA;
        pub const IDirectInputDevice = thismodule.IDirectInputDeviceA;
        pub const DIEFFECTINFO = thismodule.DIEFFECTINFOA;
        pub const LPDIENUMEFFECTSCALLBACK = thismodule.LPDIENUMEFFECTSCALLBACKA;
        pub const IDirectInputDevice2 = thismodule.IDirectInputDevice2A;
        pub const IDirectInputDevice7 = thismodule.IDirectInputDevice7A;
        pub const IDirectInputDevice8 = thismodule.IDirectInputDevice8A;
        pub const LPDIENUMDEVICESCALLBACK = thismodule.LPDIENUMDEVICESCALLBACKA;
        pub const LPDIENUMDEVICESBYSEMANTICSCB = thismodule.LPDIENUMDEVICESBYSEMANTICSCBA;
        pub const IDirectInput = thismodule.IDirectInputA;
        pub const IDirectInput2 = thismodule.IDirectInput2A;
        pub const IDirectInput7 = thismodule.IDirectInput7A;
        pub const IDirectInput8 = thismodule.IDirectInput8A;
    },
    .wide => struct {
        pub const DIACTION = thismodule.DIACTIONW;
        pub const DIACTIONFORMAT = thismodule.DIACTIONFORMATW;
        pub const DICONFIGUREDEVICESPARAMS = thismodule.DICONFIGUREDEVICESPARAMSW;
        pub const DIDEVICEIMAGEINFO = thismodule.DIDEVICEIMAGEINFOW;
        pub const DIDEVICEIMAGEINFOHEADER = thismodule.DIDEVICEIMAGEINFOHEADERW;
        pub const DIDEVICEOBJECTINSTANCE_DX3 = thismodule.DIDEVICEOBJECTINSTANCE_DX3W;
        pub const DIDEVICEOBJECTINSTANCE = thismodule.DIDEVICEOBJECTINSTANCEW;
        pub const LPDIENUMDEVICEOBJECTSCALLBACK = thismodule.LPDIENUMDEVICEOBJECTSCALLBACKW;
        pub const DIDEVICEINSTANCE_DX3 = thismodule.DIDEVICEINSTANCE_DX3W;
        pub const DIDEVICEINSTANCE = thismodule.DIDEVICEINSTANCEW;
        pub const IDirectInputDevice = thismodule.IDirectInputDeviceW;
        pub const DIEFFECTINFO = thismodule.DIEFFECTINFOW;
        pub const LPDIENUMEFFECTSCALLBACK = thismodule.LPDIENUMEFFECTSCALLBACKW;
        pub const IDirectInputDevice2 = thismodule.IDirectInputDevice2W;
        pub const IDirectInputDevice7 = thismodule.IDirectInputDevice7W;
        pub const IDirectInputDevice8 = thismodule.IDirectInputDevice8W;
        pub const LPDIENUMDEVICESCALLBACK = thismodule.LPDIENUMDEVICESCALLBACKW;
        pub const LPDIENUMDEVICESBYSEMANTICSCB = thismodule.LPDIENUMDEVICESBYSEMANTICSCBW;
        pub const IDirectInput = thismodule.IDirectInputW;
        pub const IDirectInput2 = thismodule.IDirectInput2W;
        pub const IDirectInput7 = thismodule.IDirectInput7W;
        pub const IDirectInput8 = thismodule.IDirectInput8W;
    },
    .unspecified => if (@import("builtin").is_test) struct {
        pub const DIACTION = *opaque {};
        pub const DIACTIONFORMAT = *opaque {};
        pub const DICONFIGUREDEVICESPARAMS = *opaque {};
        pub const DIDEVICEIMAGEINFO = *opaque {};
        pub const DIDEVICEIMAGEINFOHEADER = *opaque {};
        pub const DIDEVICEOBJECTINSTANCE_DX3 = *opaque {};
        pub const DIDEVICEOBJECTINSTANCE = *opaque {};
        pub const LPDIENUMDEVICEOBJECTSCALLBACK = *opaque {};
        pub const DIDEVICEINSTANCE_DX3 = *opaque {};
        pub const DIDEVICEINSTANCE = *opaque {};
        pub const IDirectInputDevice = *opaque {};
        pub const DIEFFECTINFO = *opaque {};
        pub const LPDIENUMEFFECTSCALLBACK = *opaque {};
        pub const IDirectInputDevice2 = *opaque {};
        pub const IDirectInputDevice7 = *opaque {};
        pub const IDirectInputDevice8 = *opaque {};
        pub const LPDIENUMDEVICESCALLBACK = *opaque {};
        pub const LPDIENUMDEVICESBYSEMANTICSCB = *opaque {};
        pub const IDirectInput = *opaque {};
        pub const IDirectInput2 = *opaque {};
        pub const IDirectInput7 = *opaque {};
        pub const IDirectInput8 = *opaque {};
    } else struct {
        pub const DIACTION = @compileError("'DIACTION' requires that UNICODE be set to true or false in the root module");
        pub const DIACTIONFORMAT = @compileError("'DIACTIONFORMAT' requires that UNICODE be set to true or false in the root module");
        pub const DICONFIGUREDEVICESPARAMS = @compileError("'DICONFIGUREDEVICESPARAMS' requires that UNICODE be set to true or false in the root module");
        pub const DIDEVICEIMAGEINFO = @compileError("'DIDEVICEIMAGEINFO' requires that UNICODE be set to true or false in the root module");
        pub const DIDEVICEIMAGEINFOHEADER = @compileError("'DIDEVICEIMAGEINFOHEADER' requires that UNICODE be set to true or false in the root module");
        pub const DIDEVICEOBJECTINSTANCE_DX3 = @compileError("'DIDEVICEOBJECTINSTANCE_DX3' requires that UNICODE be set to true or false in the root module");
        pub const DIDEVICEOBJECTINSTANCE = @compileError("'DIDEVICEOBJECTINSTANCE' requires that UNICODE be set to true or false in the root module");
        pub const LPDIENUMDEVICEOBJECTSCALLBACK = @compileError("'LPDIENUMDEVICEOBJECTSCALLBACK' requires that UNICODE be set to true or false in the root module");
        pub const DIDEVICEINSTANCE_DX3 = @compileError("'DIDEVICEINSTANCE_DX3' requires that UNICODE be set to true or false in the root module");
        pub const DIDEVICEINSTANCE = @compileError("'DIDEVICEINSTANCE' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInputDevice = @compileError("'IDirectInputDevice' requires that UNICODE be set to true or false in the root module");
        pub const DIEFFECTINFO = @compileError("'DIEFFECTINFO' requires that UNICODE be set to true or false in the root module");
        pub const LPDIENUMEFFECTSCALLBACK = @compileError("'LPDIENUMEFFECTSCALLBACK' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInputDevice2 = @compileError("'IDirectInputDevice2' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInputDevice7 = @compileError("'IDirectInputDevice7' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInputDevice8 = @compileError("'IDirectInputDevice8' requires that UNICODE be set to true or false in the root module");
        pub const LPDIENUMDEVICESCALLBACK = @compileError("'LPDIENUMDEVICESCALLBACK' requires that UNICODE be set to true or false in the root module");
        pub const LPDIENUMDEVICESBYSEMANTICSCB = @compileError("'LPDIENUMDEVICESBYSEMANTICSCB' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInput = @compileError("'IDirectInput' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInput2 = @compileError("'IDirectInput2' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInput7 = @compileError("'IDirectInput7' requires that UNICODE be set to true or false in the root module");
        pub const IDirectInput8 = @compileError("'IDirectInput8' requires that UNICODE be set to true or false in the root module");
    },
};
//--------------------------------------------------------------------------------
// Section: Imports (17)
//--------------------------------------------------------------------------------
const Guid = @import("../zig.zig").Guid;
const BOOL = @import("../foundation.zig").BOOL;
const BOOLEAN = @import("../foundation.zig").BOOLEAN;
const CHAR = @import("../foundation.zig").CHAR;
const FILETIME = @import("../foundation.zig").FILETIME;
const HANDLE = @import("../foundation.zig").HANDLE;
const HINSTANCE = @import("../foundation.zig").HINSTANCE;
const HKEY = @import("../system/registry.zig").HKEY;
const HRESULT = @import("../foundation.zig").HRESULT;
const HWND = @import("../foundation.zig").HWND;
const IUnknown = @import("../system/com.zig").IUnknown;
const NTSTATUS = @import("../foundation.zig").NTSTATUS;
const POINT = @import("../foundation.zig").POINT;
const PROPERTYKEY = @import("../ui/shell/properties_system.zig").PROPERTYKEY;
const PSTR = @import("../foundation.zig").PSTR;
const PWSTR = @import("../foundation.zig").PWSTR;
const RECT = @import("../foundation.zig").RECT;

test {
    // The following '_ = <FuncPtrType>' lines are a workaround for https://github.com/ziglang/zig/issues/4476
    if (@hasDecl(@This(), "LPDIENUMEFFECTSINFILECALLBACK")) {
        _ = LPDIENUMEFFECTSINFILECALLBACK;
    }
    if (@hasDecl(@This(), "LPDIENUMDEVICEOBJECTSCALLBACKA")) {
        _ = LPDIENUMDEVICEOBJECTSCALLBACKA;
    }
    if (@hasDecl(@This(), "LPDIENUMDEVICEOBJECTSCALLBACKW")) {
        _ = LPDIENUMDEVICEOBJECTSCALLBACKW;
    }
    if (@hasDecl(@This(), "LPDIENUMEFFECTSCALLBACKA")) {
        _ = LPDIENUMEFFECTSCALLBACKA;
    }
    if (@hasDecl(@This(), "LPDIENUMEFFECTSCALLBACKW")) {
        _ = LPDIENUMEFFECTSCALLBACKW;
    }
    if (@hasDecl(@This(), "LPDIENUMCREATEDEFFECTOBJECTSCALLBACK")) {
        _ = LPDIENUMCREATEDEFFECTOBJECTSCALLBACK;
    }
    if (@hasDecl(@This(), "LPDIENUMDEVICESCALLBACKA")) {
        _ = LPDIENUMDEVICESCALLBACKA;
    }
    if (@hasDecl(@This(), "LPDIENUMDEVICESCALLBACKW")) {
        _ = LPDIENUMDEVICESCALLBACKW;
    }
    if (@hasDecl(@This(), "LPDICONFIGUREDEVICESCALLBACK")) {
        _ = LPDICONFIGUREDEVICESCALLBACK;
    }
    if (@hasDecl(@This(), "LPDIENUMDEVICESBYSEMANTICSCBA")) {
        _ = LPDIENUMDEVICESBYSEMANTICSCBA;
    }
    if (@hasDecl(@This(), "LPDIENUMDEVICESBYSEMANTICSCBW")) {
        _ = LPDIENUMDEVICESBYSEMANTICSCBW;
    }
    if (@hasDecl(@This(), "LPFNSHOWJOYCPL")) {
        _ = LPFNSHOWJOYCPL;
    }
    if (@hasDecl(@This(), "LPDIJOYTYPECALLBACK")) {
        _ = LPDIJOYTYPECALLBACK;
    }
    if (@hasDecl(@This(), "PHIDP_INSERT_SCANCODES")) {
        _ = PHIDP_INSERT_SCANCODES;
    }
    if (@hasDecl(@This(), "PFN_HidP_GetVersionInternal")) {
        _ = PFN_HidP_GetVersionInternal;
    }

    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
