github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/raylib/external/glfw/deps/mingw/dinput.h (about)

     1  /*
     2   * Copyright (C) the Wine project
     3   *
     4   * This library is free software; you can redistribute it and/or
     5   * modify it under the terms of the GNU Lesser General Public
     6   * License as published by the Free Software Foundation; either
     7   * version 2.1 of the License, or (at your option) any later version.
     8   *
     9   * This library is distributed in the hope that it will be useful,
    10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    12   * Lesser General Public License for more details.
    13   *
    14   * You should have received a copy of the GNU Lesser General Public
    15   * License along with this library; if not, write to the Free Software
    16   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
    17   */
    18  
    19  #ifndef __DINPUT_INCLUDED__
    20  #define __DINPUT_INCLUDED__
    21  
    22  #define COM_NO_WINDOWS_H
    23  #include <objbase.h>
    24  #include <_mingw_dxhelper.h>
    25  
    26  #ifndef DIRECTINPUT_VERSION
    27  #define DIRECTINPUT_VERSION	0x0800
    28  #endif
    29  
    30  /* Classes */
    31  DEFINE_GUID(CLSID_DirectInput,		0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    32  DEFINE_GUID(CLSID_DirectInputDevice,	0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    33  
    34  DEFINE_GUID(CLSID_DirectInput8,		0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    35  DEFINE_GUID(CLSID_DirectInputDevice8,	0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    36  
    37  /* Interfaces */
    38  DEFINE_GUID(IID_IDirectInputA,		0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    39  DEFINE_GUID(IID_IDirectInputW,		0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    40  DEFINE_GUID(IID_IDirectInput2A,		0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    41  DEFINE_GUID(IID_IDirectInput2W,		0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    42  DEFINE_GUID(IID_IDirectInput7A,		0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
    43  DEFINE_GUID(IID_IDirectInput7W,		0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
    44  DEFINE_GUID(IID_IDirectInput8A,		0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
    45  DEFINE_GUID(IID_IDirectInput8W,		0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
    46  DEFINE_GUID(IID_IDirectInputDeviceA,	0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    47  DEFINE_GUID(IID_IDirectInputDeviceW,	0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    48  DEFINE_GUID(IID_IDirectInputDevice2A,	0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    49  DEFINE_GUID(IID_IDirectInputDevice2W,	0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    50  DEFINE_GUID(IID_IDirectInputDevice7A,	0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
    51  DEFINE_GUID(IID_IDirectInputDevice7W,	0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
    52  DEFINE_GUID(IID_IDirectInputDevice8A,	0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);
    53  DEFINE_GUID(IID_IDirectInputDevice8W,	0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);
    54  DEFINE_GUID(IID_IDirectInputEffect,	0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    55  
    56  /* Predefined object types */
    57  DEFINE_GUID(GUID_XAxis,	0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    58  DEFINE_GUID(GUID_YAxis,	0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    59  DEFINE_GUID(GUID_ZAxis,	0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    60  DEFINE_GUID(GUID_RxAxis,0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    61  DEFINE_GUID(GUID_RyAxis,0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    62  DEFINE_GUID(GUID_RzAxis,0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    63  DEFINE_GUID(GUID_Slider,0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    64  DEFINE_GUID(GUID_Button,0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    65  DEFINE_GUID(GUID_Key,	0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    66  DEFINE_GUID(GUID_POV,	0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    67  DEFINE_GUID(GUID_Unknown,0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    68  
    69  /* Predefined product GUIDs */
    70  DEFINE_GUID(GUID_SysMouse,	0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    71  DEFINE_GUID(GUID_SysKeyboard,	0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    72  DEFINE_GUID(GUID_Joystick,	0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    73  DEFINE_GUID(GUID_SysMouseEm,	0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    74  DEFINE_GUID(GUID_SysMouseEm2,	0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    75  DEFINE_GUID(GUID_SysKeyboardEm,	0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    76  DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
    77  
    78  /* predefined forcefeedback effects */
    79  DEFINE_GUID(GUID_ConstantForce,	0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    80  DEFINE_GUID(GUID_RampForce,	0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    81  DEFINE_GUID(GUID_Square,	0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    82  DEFINE_GUID(GUID_Sine,		0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    83  DEFINE_GUID(GUID_Triangle,	0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    84  DEFINE_GUID(GUID_SawtoothUp,	0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    85  DEFINE_GUID(GUID_SawtoothDown,	0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    86  DEFINE_GUID(GUID_Spring,	0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    87  DEFINE_GUID(GUID_Damper,	0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    88  DEFINE_GUID(GUID_Inertia,	0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    89  DEFINE_GUID(GUID_Friction,	0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    90  DEFINE_GUID(GUID_CustomForce,	0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
    91  
    92  typedef struct IDirectInputA *LPDIRECTINPUTA;
    93  typedef struct IDirectInputW *LPDIRECTINPUTW;
    94  typedef struct IDirectInput2A *LPDIRECTINPUT2A;
    95  typedef struct IDirectInput2W *LPDIRECTINPUT2W;
    96  typedef struct IDirectInput7A *LPDIRECTINPUT7A;
    97  typedef struct IDirectInput7W *LPDIRECTINPUT7W;
    98  #if DIRECTINPUT_VERSION >= 0x0800
    99  typedef struct IDirectInput8A *LPDIRECTINPUT8A;
   100  typedef struct IDirectInput8W *LPDIRECTINPUT8W;
   101  #endif /* DI8 */
   102  typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;
   103  typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;
   104  #if DIRECTINPUT_VERSION >= 0x0500
   105  typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;
   106  typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;
   107  #endif /* DI5 */
   108  #if DIRECTINPUT_VERSION >= 0x0700
   109  typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;
   110  typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;
   111  #endif /* DI7 */
   112  #if DIRECTINPUT_VERSION >= 0x0800
   113  typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A;
   114  typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W;
   115  #endif /* DI8 */
   116  #if DIRECTINPUT_VERSION >= 0x0500
   117  typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;
   118  #endif /* DI5 */
   119  typedef struct SysKeyboardA *LPSYSKEYBOARDA;
   120  typedef struct SysMouseA *LPSYSMOUSEA;
   121  
   122  #define IID_IDirectInput WINELIB_NAME_AW(IID_IDirectInput)
   123  #define IDirectInput WINELIB_NAME_AW(IDirectInput)
   124  DECL_WINELIB_TYPE_AW(LPDIRECTINPUT)
   125  #define IID_IDirectInput2 WINELIB_NAME_AW(IID_IDirectInput2)
   126  #define IDirectInput2 WINELIB_NAME_AW(IDirectInput2)
   127  DECL_WINELIB_TYPE_AW(LPDIRECTINPUT2)
   128  #define IID_IDirectInput7 WINELIB_NAME_AW(IID_IDirectInput7)
   129  #define IDirectInput7 WINELIB_NAME_AW(IDirectInput7)
   130  DECL_WINELIB_TYPE_AW(LPDIRECTINPUT7)
   131  #if DIRECTINPUT_VERSION >= 0x0800
   132  #define IID_IDirectInput8 WINELIB_NAME_AW(IID_IDirectInput8)
   133  #define IDirectInput8 WINELIB_NAME_AW(IDirectInput8)
   134  DECL_WINELIB_TYPE_AW(LPDIRECTINPUT8)
   135  #endif /* DI8 */
   136  #define IID_IDirectInputDevice WINELIB_NAME_AW(IID_IDirectInputDevice)
   137  #define IDirectInputDevice WINELIB_NAME_AW(IDirectInputDevice)
   138  DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE)
   139  #if DIRECTINPUT_VERSION >= 0x0500
   140  #define IID_IDirectInputDevice2 WINELIB_NAME_AW(IID_IDirectInputDevice2)
   141  #define IDirectInputDevice2 WINELIB_NAME_AW(IDirectInputDevice2)
   142  DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE2)
   143  #endif /* DI5 */
   144  #if DIRECTINPUT_VERSION >= 0x0700
   145  #define IID_IDirectInputDevice7 WINELIB_NAME_AW(IID_IDirectInputDevice7)
   146  #define IDirectInputDevice7 WINELIB_NAME_AW(IDirectInputDevice7)
   147  DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE7)
   148  #endif /* DI7 */
   149  #if DIRECTINPUT_VERSION >= 0x0800
   150  #define IID_IDirectInputDevice8 WINELIB_NAME_AW(IID_IDirectInputDevice8)
   151  #define IDirectInputDevice8 WINELIB_NAME_AW(IDirectInputDevice8)
   152  DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE8)
   153  #endif /* DI8 */
   154  
   155  #define DI_OK                           S_OK
   156  #define DI_NOTATTACHED                  S_FALSE
   157  #define DI_BUFFEROVERFLOW               S_FALSE
   158  #define DI_PROPNOEFFECT                 S_FALSE
   159  #define DI_NOEFFECT                     S_FALSE
   160  #define DI_POLLEDDEVICE                 ((HRESULT)0x00000002L)
   161  #define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003L)
   162  #define DI_EFFECTRESTARTED              ((HRESULT)0x00000004L)
   163  #define DI_TRUNCATED                    ((HRESULT)0x00000008L)
   164  #define DI_SETTINGSNOTSAVED             ((HRESULT)0x0000000BL)
   165  #define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000CL)
   166  #define DI_WRITEPROTECT                 ((HRESULT)0x00000013L)
   167  
   168  #define DIERR_OLDDIRECTINPUTVERSION     \
   169      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
   170  #define DIERR_BETADIRECTINPUTVERSION    \
   171      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)
   172  #define DIERR_BADDRIVERVER              \
   173      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)
   174  #define DIERR_DEVICENOTREG              REGDB_E_CLASSNOTREG
   175  #define DIERR_NOTFOUND                  \
   176      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
   177  #define DIERR_OBJECTNOTFOUND            \
   178      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
   179  #define DIERR_INVALIDPARAM              E_INVALIDARG
   180  #define DIERR_NOINTERFACE               E_NOINTERFACE
   181  #define DIERR_GENERIC                   E_FAIL
   182  #define DIERR_OUTOFMEMORY               E_OUTOFMEMORY
   183  #define DIERR_UNSUPPORTED               E_NOTIMPL
   184  #define DIERR_NOTINITIALIZED            \
   185      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)
   186  #define DIERR_ALREADYINITIALIZED        \
   187      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)
   188  #define DIERR_NOAGGREGATION             CLASS_E_NOAGGREGATION
   189  #define DIERR_OTHERAPPHASPRIO           E_ACCESSDENIED
   190  #define DIERR_INPUTLOST                 \
   191      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)
   192  #define DIERR_ACQUIRED                  \
   193      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)
   194  #define DIERR_NOTACQUIRED               \
   195      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)
   196  #define DIERR_READONLY                  E_ACCESSDENIED
   197  #define DIERR_HANDLEEXISTS              E_ACCESSDENIED
   198  #ifndef E_PENDING
   199  #define E_PENDING                       0x8000000AL
   200  #endif
   201  #define DIERR_INSUFFICIENTPRIVS         0x80040200L
   202  #define DIERR_DEVICEFULL                0x80040201L
   203  #define DIERR_MOREDATA                  0x80040202L
   204  #define DIERR_NOTDOWNLOADED             0x80040203L
   205  #define DIERR_HASEFFECTS                0x80040204L
   206  #define DIERR_NOTEXCLUSIVEACQUIRED      0x80040205L
   207  #define DIERR_INCOMPLETEEFFECT          0x80040206L
   208  #define DIERR_NOTBUFFERED               0x80040207L
   209  #define DIERR_EFFECTPLAYING             0x80040208L
   210  #define DIERR_UNPLUGGED                 0x80040209L
   211  #define DIERR_REPORTFULL                0x8004020AL
   212  #define DIERR_MAPFILEFAIL               0x8004020BL
   213  
   214  #define DIENUM_STOP                     0
   215  #define DIENUM_CONTINUE                 1
   216  
   217  #define DIEDFL_ALLDEVICES               0x00000000
   218  #define DIEDFL_ATTACHEDONLY             0x00000001
   219  #define DIEDFL_FORCEFEEDBACK            0x00000100
   220  #define DIEDFL_INCLUDEALIASES           0x00010000
   221  #define DIEDFL_INCLUDEPHANTOMS          0x00020000
   222  #define DIEDFL_INCLUDEHIDDEN		0x00040000
   223  
   224  #define DIDEVTYPE_DEVICE                1
   225  #define DIDEVTYPE_MOUSE                 2
   226  #define DIDEVTYPE_KEYBOARD              3
   227  #define DIDEVTYPE_JOYSTICK              4
   228  #define DIDEVTYPE_HID                   0x00010000
   229  
   230  #define DI8DEVCLASS_ALL             0
   231  #define DI8DEVCLASS_DEVICE          1
   232  #define DI8DEVCLASS_POINTER         2
   233  #define DI8DEVCLASS_KEYBOARD        3
   234  #define DI8DEVCLASS_GAMECTRL        4
   235  
   236  #define DI8DEVTYPE_DEVICE           0x11
   237  #define DI8DEVTYPE_MOUSE            0x12
   238  #define DI8DEVTYPE_KEYBOARD         0x13
   239  #define DI8DEVTYPE_JOYSTICK         0x14
   240  #define DI8DEVTYPE_GAMEPAD          0x15
   241  #define DI8DEVTYPE_DRIVING          0x16
   242  #define DI8DEVTYPE_FLIGHT           0x17
   243  #define DI8DEVTYPE_1STPERSON        0x18
   244  #define DI8DEVTYPE_DEVICECTRL       0x19
   245  #define DI8DEVTYPE_SCREENPOINTER    0x1A
   246  #define DI8DEVTYPE_REMOTE           0x1B
   247  #define DI8DEVTYPE_SUPPLEMENTAL     0x1C
   248  	
   249  #define DIDEVTYPEMOUSE_UNKNOWN          1
   250  #define DIDEVTYPEMOUSE_TRADITIONAL      2
   251  #define DIDEVTYPEMOUSE_FINGERSTICK      3
   252  #define DIDEVTYPEMOUSE_TOUCHPAD         4
   253  #define DIDEVTYPEMOUSE_TRACKBALL        5
   254  
   255  #define DIDEVTYPEKEYBOARD_UNKNOWN       0
   256  #define DIDEVTYPEKEYBOARD_PCXT          1
   257  #define DIDEVTYPEKEYBOARD_OLIVETTI      2
   258  #define DIDEVTYPEKEYBOARD_PCAT          3
   259  #define DIDEVTYPEKEYBOARD_PCENH         4
   260  #define DIDEVTYPEKEYBOARD_NOKIA1050     5
   261  #define DIDEVTYPEKEYBOARD_NOKIA9140     6
   262  #define DIDEVTYPEKEYBOARD_NEC98         7
   263  #define DIDEVTYPEKEYBOARD_NEC98LAPTOP   8
   264  #define DIDEVTYPEKEYBOARD_NEC98106      9
   265  #define DIDEVTYPEKEYBOARD_JAPAN106     10
   266  #define DIDEVTYPEKEYBOARD_JAPANAX      11
   267  #define DIDEVTYPEKEYBOARD_J3100        12
   268  
   269  #define DIDEVTYPEJOYSTICK_UNKNOWN       1
   270  #define DIDEVTYPEJOYSTICK_TRADITIONAL   2
   271  #define DIDEVTYPEJOYSTICK_FLIGHTSTICK   3
   272  #define DIDEVTYPEJOYSTICK_GAMEPAD       4
   273  #define DIDEVTYPEJOYSTICK_RUDDER        5
   274  #define DIDEVTYPEJOYSTICK_WHEEL         6
   275  #define DIDEVTYPEJOYSTICK_HEADTRACKER   7
   276  
   277  #define DI8DEVTYPEMOUSE_UNKNOWN                     1
   278  #define DI8DEVTYPEMOUSE_TRADITIONAL                 2
   279  #define DI8DEVTYPEMOUSE_FINGERSTICK                 3
   280  #define DI8DEVTYPEMOUSE_TOUCHPAD                    4
   281  #define DI8DEVTYPEMOUSE_TRACKBALL                   5
   282  #define DI8DEVTYPEMOUSE_ABSOLUTE                    6
   283  
   284  #define DI8DEVTYPEKEYBOARD_UNKNOWN                  0
   285  #define DI8DEVTYPEKEYBOARD_PCXT                     1
   286  #define DI8DEVTYPEKEYBOARD_OLIVETTI                 2
   287  #define DI8DEVTYPEKEYBOARD_PCAT                     3
   288  #define DI8DEVTYPEKEYBOARD_PCENH                    4
   289  #define DI8DEVTYPEKEYBOARD_NOKIA1050                5
   290  #define DI8DEVTYPEKEYBOARD_NOKIA9140                6
   291  #define DI8DEVTYPEKEYBOARD_NEC98                    7
   292  #define DI8DEVTYPEKEYBOARD_NEC98LAPTOP              8
   293  #define DI8DEVTYPEKEYBOARD_NEC98106                 9
   294  #define DI8DEVTYPEKEYBOARD_JAPAN106                10
   295  #define DI8DEVTYPEKEYBOARD_JAPANAX                 11
   296  #define DI8DEVTYPEKEYBOARD_J3100                   12
   297  
   298  #define DI8DEVTYPE_LIMITEDGAMESUBTYPE               1
   299  
   300  #define DI8DEVTYPEJOYSTICK_LIMITED                  DI8DEVTYPE_LIMITEDGAMESUBTYPE
   301  #define DI8DEVTYPEJOYSTICK_STANDARD                 2
   302  
   303  #define DI8DEVTYPEGAMEPAD_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE
   304  #define DI8DEVTYPEGAMEPAD_STANDARD                  2
   305  #define DI8DEVTYPEGAMEPAD_TILT                      3
   306  
   307  #define DI8DEVTYPEDRIVING_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE
   308  #define DI8DEVTYPEDRIVING_COMBINEDPEDALS            2
   309  #define DI8DEVTYPEDRIVING_DUALPEDALS                3
   310  #define DI8DEVTYPEDRIVING_THREEPEDALS               4
   311  #define DI8DEVTYPEDRIVING_HANDHELD                  5
   312  
   313  #define DI8DEVTYPEFLIGHT_LIMITED                    DI8DEVTYPE_LIMITEDGAMESUBTYPE
   314  #define DI8DEVTYPEFLIGHT_STICK                      2
   315  #define DI8DEVTYPEFLIGHT_YOKE                       3
   316  #define DI8DEVTYPEFLIGHT_RC                         4
   317  
   318  #define DI8DEVTYPE1STPERSON_LIMITED                 DI8DEVTYPE_LIMITEDGAMESUBTYPE
   319  #define DI8DEVTYPE1STPERSON_UNKNOWN                 2
   320  #define DI8DEVTYPE1STPERSON_SIXDOF                  3
   321  #define DI8DEVTYPE1STPERSON_SHOOTER                 4
   322  
   323  #define DI8DEVTYPESCREENPTR_UNKNOWN                 2
   324  #define DI8DEVTYPESCREENPTR_LIGHTGUN                3
   325  #define DI8DEVTYPESCREENPTR_LIGHTPEN                4
   326  #define DI8DEVTYPESCREENPTR_TOUCH                   5
   327  
   328  #define DI8DEVTYPEREMOTE_UNKNOWN                    2
   329  
   330  #define DI8DEVTYPEDEVICECTRL_UNKNOWN                2
   331  #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION         3
   332  #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4
   333  
   334  #define DI8DEVTYPESUPPLEMENTAL_UNKNOWN              2
   335  #define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER    3
   336  #define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER          4
   337  #define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER          5
   338  #define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE       6
   339  #define DI8DEVTYPESUPPLEMENTAL_SHIFTER              7
   340  #define DI8DEVTYPESUPPLEMENTAL_THROTTLE             8
   341  #define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE        9
   342  #define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS      10
   343  #define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS          11
   344  #define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS         12
   345  #define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS        13
   346  	
   347  #define GET_DIDEVICE_TYPE(dwDevType)     LOBYTE(dwDevType)
   348  #define GET_DIDEVICE_SUBTYPE(dwDevType)  HIBYTE(dwDevType)
   349  
   350  typedef struct DIDEVICEOBJECTINSTANCE_DX3A {
   351      DWORD   dwSize;
   352      GUID    guidType;
   353      DWORD   dwOfs;
   354      DWORD   dwType;
   355      DWORD   dwFlags;
   356      CHAR    tszName[MAX_PATH];
   357  } DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;
   358  typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;
   359  typedef struct DIDEVICEOBJECTINSTANCE_DX3W {
   360      DWORD   dwSize;
   361      GUID    guidType;
   362      DWORD   dwOfs;
   363      DWORD   dwType;
   364      DWORD   dwFlags;
   365      WCHAR   tszName[MAX_PATH];
   366  } DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;
   367  typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;
   368  
   369  DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE_DX3)
   370  DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE_DX3)
   371  DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE_DX3)
   372  
   373  typedef struct DIDEVICEOBJECTINSTANCEA {
   374      DWORD	dwSize;
   375      GUID	guidType;
   376      DWORD	dwOfs;
   377      DWORD	dwType;
   378      DWORD	dwFlags;
   379      CHAR	tszName[MAX_PATH];
   380  #if(DIRECTINPUT_VERSION >= 0x0500)
   381      DWORD	dwFFMaxForce;
   382      DWORD	dwFFForceResolution;
   383      WORD	wCollectionNumber;
   384      WORD	wDesignatorIndex;
   385      WORD	wUsagePage;
   386      WORD	wUsage;
   387      DWORD	dwDimension;
   388      WORD	wExponent;
   389      WORD	wReserved;
   390  #endif /* DIRECTINPUT_VERSION >= 0x0500 */
   391  } DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;
   392  typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;
   393  
   394  typedef struct DIDEVICEOBJECTINSTANCEW {
   395      DWORD	dwSize;
   396      GUID	guidType;
   397      DWORD	dwOfs;
   398      DWORD	dwType;
   399      DWORD	dwFlags;
   400      WCHAR	tszName[MAX_PATH];
   401  #if(DIRECTINPUT_VERSION >= 0x0500)
   402      DWORD	dwFFMaxForce;
   403      DWORD	dwFFForceResolution;
   404      WORD	wCollectionNumber;
   405      WORD	wDesignatorIndex;
   406      WORD	wUsagePage;
   407      WORD	wUsage;
   408      DWORD	dwDimension;
   409      WORD	wExponent;
   410      WORD	wReserved;
   411  #endif /* DIRECTINPUT_VERSION >= 0x0500 */
   412  } DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;
   413  typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;
   414  
   415  DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE)
   416  DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE)
   417  DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE)
   418  
   419  typedef struct DIDEVICEINSTANCE_DX3A {
   420      DWORD   dwSize;
   421      GUID    guidInstance;
   422      GUID    guidProduct;
   423      DWORD   dwDevType;
   424      CHAR    tszInstanceName[MAX_PATH];
   425      CHAR    tszProductName[MAX_PATH];
   426  } DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;
   427  typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;
   428  typedef struct DIDEVICEINSTANCE_DX3W {
   429      DWORD   dwSize;
   430      GUID    guidInstance;
   431      GUID    guidProduct;
   432      DWORD   dwDevType;
   433      WCHAR   tszInstanceName[MAX_PATH];
   434      WCHAR   tszProductName[MAX_PATH];
   435  } DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;
   436  typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;
   437  
   438  DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE_DX3)
   439  DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE_DX3)
   440  DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE_DX3)
   441  
   442  typedef struct DIDEVICEINSTANCEA {
   443      DWORD	dwSize;
   444      GUID	guidInstance;
   445      GUID	guidProduct;
   446      DWORD	dwDevType;
   447      CHAR	tszInstanceName[MAX_PATH];
   448      CHAR	tszProductName[MAX_PATH];
   449  #if(DIRECTINPUT_VERSION >= 0x0500)
   450      GUID	guidFFDriver;
   451      WORD	wUsagePage;
   452      WORD	wUsage;
   453  #endif /* DIRECTINPUT_VERSION >= 0x0500 */
   454  } DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;
   455  typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
   456  
   457  typedef struct DIDEVICEINSTANCEW {
   458      DWORD	dwSize;
   459      GUID	guidInstance;
   460      GUID	guidProduct;
   461      DWORD	dwDevType;
   462      WCHAR	tszInstanceName[MAX_PATH];
   463      WCHAR	tszProductName[MAX_PATH];
   464  #if(DIRECTINPUT_VERSION >= 0x0500)
   465      GUID	guidFFDriver;
   466      WORD	wUsagePage;
   467      WORD	wUsage;
   468  #endif /* DIRECTINPUT_VERSION >= 0x0500 */
   469  } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
   470  typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
   471  
   472  DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE)
   473  DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE)
   474  DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE)
   475  
   476  typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID);
   477  typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID);
   478  DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK)
   479  
   480  #define DIEDBS_MAPPEDPRI1		0x00000001
   481  #define DIEDBS_MAPPEDPRI2		0x00000002
   482  #define DIEDBS_RECENTDEVICE		0x00000010
   483  #define DIEDBS_NEWDEVICE		0x00000020
   484  
   485  #define DIEDBSFL_ATTACHEDONLY		0x00000000
   486  #define DIEDBSFL_THISUSER		0x00000010
   487  #define DIEDBSFL_FORCEFEEDBACK		DIEDFL_FORCEFEEDBACK
   488  #define DIEDBSFL_AVAILABLEDEVICES	0x00001000
   489  #define DIEDBSFL_MULTIMICEKEYBOARDS	0x00002000
   490  #define DIEDBSFL_NONGAMINGDEVICES	0x00004000
   491  #define DIEDBSFL_VALID			0x00007110
   492  
   493  #if DIRECTINPUT_VERSION >= 0x0800
   494  typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA,LPDIRECTINPUTDEVICE8A,DWORD,DWORD,LPVOID);
   495  typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW,LPDIRECTINPUTDEVICE8W,DWORD,DWORD,LPVOID);
   496  DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESBYSEMANTICSCB)
   497  #endif
   498  
   499  typedef BOOL (CALLBACK *LPDICONFIGUREDEVICESCALLBACK)(LPUNKNOWN,LPVOID);
   500  
   501  typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA,LPVOID);
   502  typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID);
   503  DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
   504  
   505  #if DIRECTINPUT_VERSION >= 0x0500
   506  typedef BOOL (CALLBACK *LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
   507  #endif
   508  
   509  #define DIK_ESCAPE          0x01
   510  #define DIK_1               0x02
   511  #define DIK_2               0x03
   512  #define DIK_3               0x04
   513  #define DIK_4               0x05
   514  #define DIK_5               0x06
   515  #define DIK_6               0x07
   516  #define DIK_7               0x08
   517  #define DIK_8               0x09
   518  #define DIK_9               0x0A
   519  #define DIK_0               0x0B
   520  #define DIK_MINUS           0x0C    /* - on main keyboard */
   521  #define DIK_EQUALS          0x0D
   522  #define DIK_BACK            0x0E    /* backspace */
   523  #define DIK_TAB             0x0F
   524  #define DIK_Q               0x10
   525  #define DIK_W               0x11
   526  #define DIK_E               0x12
   527  #define DIK_R               0x13
   528  #define DIK_T               0x14
   529  #define DIK_Y               0x15
   530  #define DIK_U               0x16
   531  #define DIK_I               0x17
   532  #define DIK_O               0x18
   533  #define DIK_P               0x19
   534  #define DIK_LBRACKET        0x1A
   535  #define DIK_RBRACKET        0x1B
   536  #define DIK_RETURN          0x1C    /* Enter on main keyboard */
   537  #define DIK_LCONTROL        0x1D
   538  #define DIK_A               0x1E
   539  #define DIK_S               0x1F
   540  #define DIK_D               0x20
   541  #define DIK_F               0x21
   542  #define DIK_G               0x22
   543  #define DIK_H               0x23
   544  #define DIK_J               0x24
   545  #define DIK_K               0x25
   546  #define DIK_L               0x26
   547  #define DIK_SEMICOLON       0x27
   548  #define DIK_APOSTROPHE      0x28
   549  #define DIK_GRAVE           0x29    /* accent grave */
   550  #define DIK_LSHIFT          0x2A
   551  #define DIK_BACKSLASH       0x2B
   552  #define DIK_Z               0x2C
   553  #define DIK_X               0x2D
   554  #define DIK_C               0x2E
   555  #define DIK_V               0x2F
   556  #define DIK_B               0x30
   557  #define DIK_N               0x31
   558  #define DIK_M               0x32
   559  #define DIK_COMMA           0x33
   560  #define DIK_PERIOD          0x34    /* . on main keyboard */
   561  #define DIK_SLASH           0x35    /* / on main keyboard */
   562  #define DIK_RSHIFT          0x36
   563  #define DIK_MULTIPLY        0x37    /* * on numeric keypad */
   564  #define DIK_LMENU           0x38    /* left Alt */
   565  #define DIK_SPACE           0x39
   566  #define DIK_CAPITAL         0x3A
   567  #define DIK_F1              0x3B
   568  #define DIK_F2              0x3C
   569  #define DIK_F3              0x3D
   570  #define DIK_F4              0x3E
   571  #define DIK_F5              0x3F
   572  #define DIK_F6              0x40
   573  #define DIK_F7              0x41
   574  #define DIK_F8              0x42
   575  #define DIK_F9              0x43
   576  #define DIK_F10             0x44
   577  #define DIK_NUMLOCK         0x45
   578  #define DIK_SCROLL          0x46    /* Scroll Lock */
   579  #define DIK_NUMPAD7         0x47
   580  #define DIK_NUMPAD8         0x48
   581  #define DIK_NUMPAD9         0x49
   582  #define DIK_SUBTRACT        0x4A    /* - on numeric keypad */
   583  #define DIK_NUMPAD4         0x4B
   584  #define DIK_NUMPAD5         0x4C
   585  #define DIK_NUMPAD6         0x4D
   586  #define DIK_ADD             0x4E    /* + on numeric keypad */
   587  #define DIK_NUMPAD1         0x4F
   588  #define DIK_NUMPAD2         0x50
   589  #define DIK_NUMPAD3         0x51
   590  #define DIK_NUMPAD0         0x52
   591  #define DIK_DECIMAL         0x53    /* . on numeric keypad */
   592  #define DIK_OEM_102         0x56    /* < > | on UK/Germany keyboards */
   593  #define DIK_F11             0x57
   594  #define DIK_F12             0x58
   595  #define DIK_F13             0x64    /*                     (NEC PC98) */
   596  #define DIK_F14             0x65    /*                     (NEC PC98) */
   597  #define DIK_F15             0x66    /*                     (NEC PC98) */
   598  #define DIK_KANA            0x70    /* (Japanese keyboard)            */
   599  #define DIK_ABNT_C1         0x73    /* / ? on Portugese (Brazilian) keyboards */
   600  #define DIK_CONVERT         0x79    /* (Japanese keyboard)            */
   601  #define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */
   602  #define DIK_YEN             0x7D    /* (Japanese keyboard)            */
   603  #define DIK_ABNT_C2         0x7E    /* Numpad . on Portugese (Brazilian) keyboards */
   604  #define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */
   605  #define DIK_CIRCUMFLEX      0x90    /* (Japanese keyboard)            */
   606  #define DIK_AT              0x91    /*                     (NEC PC98) */
   607  #define DIK_COLON           0x92    /*                     (NEC PC98) */
   608  #define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */
   609  #define DIK_KANJI           0x94    /* (Japanese keyboard)            */
   610  #define DIK_STOP            0x95    /*                     (NEC PC98) */
   611  #define DIK_AX              0x96    /*                     (Japan AX) */
   612  #define DIK_UNLABELED       0x97    /*                        (J3100) */
   613  #define DIK_NEXTTRACK       0x99    /* Next Track */
   614  #define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */
   615  #define DIK_RCONTROL        0x9D
   616  #define DIK_MUTE	    0xA0    /* Mute */
   617  #define DIK_CALCULATOR      0xA1    /* Calculator */
   618  #define DIK_PLAYPAUSE       0xA2    /* Play / Pause */
   619  #define DIK_MEDIASTOP       0xA4    /* Media Stop */
   620  #define DIK_VOLUMEDOWN      0xAE    /* Volume - */
   621  #define DIK_VOLUMEUP        0xB0    /* Volume + */
   622  #define DIK_WEBHOME         0xB2    /* Web home */
   623  #define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */
   624  #define DIK_DIVIDE          0xB5    /* / on numeric keypad */
   625  #define DIK_SYSRQ           0xB7
   626  #define DIK_RMENU           0xB8    /* right Alt */
   627  #define DIK_PAUSE           0xC5    /* Pause */
   628  #define DIK_HOME            0xC7    /* Home on arrow keypad */
   629  #define DIK_UP              0xC8    /* UpArrow on arrow keypad */
   630  #define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */
   631  #define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */
   632  #define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */
   633  #define DIK_END             0xCF    /* End on arrow keypad */
   634  #define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */
   635  #define DIK_NEXT            0xD1    /* PgDn on arrow keypad */
   636  #define DIK_INSERT          0xD2    /* Insert on arrow keypad */
   637  #define DIK_DELETE          0xD3    /* Delete on arrow keypad */
   638  #define DIK_LWIN            0xDB    /* Left Windows key */
   639  #define DIK_RWIN            0xDC    /* Right Windows key */
   640  #define DIK_APPS            0xDD    /* AppMenu key */
   641  #define DIK_POWER           0xDE
   642  #define DIK_SLEEP           0xDF
   643  #define DIK_WAKE            0xE3    /* System Wake */
   644  #define DIK_WEBSEARCH       0xE5    /* Web Search */
   645  #define DIK_WEBFAVORITES    0xE6    /* Web Favorites */
   646  #define DIK_WEBREFRESH      0xE7    /* Web Refresh */
   647  #define DIK_WEBSTOP         0xE8    /* Web Stop */
   648  #define DIK_WEBFORWARD      0xE9    /* Web Forward */
   649  #define DIK_WEBBACK         0xEA    /* Web Back */
   650  #define DIK_MYCOMPUTER      0xEB    /* My Computer */
   651  #define DIK_MAIL            0xEC    /* Mail */
   652  #define DIK_MEDIASELECT     0xED    /* Media Select */
   653  
   654  #define DIK_BACKSPACE       DIK_BACK            /* backspace */
   655  #define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */
   656  #define DIK_LALT            DIK_LMENU           /* left Alt */
   657  #define DIK_CAPSLOCK        DIK_CAPITAL         /* CapsLock */
   658  #define DIK_NUMPADMINUS     DIK_SUBTRACT        /* - on numeric keypad */
   659  #define DIK_NUMPADPLUS      DIK_ADD             /* + on numeric keypad */
   660  #define DIK_NUMPADPERIOD    DIK_DECIMAL         /* . on numeric keypad */
   661  #define DIK_NUMPADSLASH     DIK_DIVIDE          /* / on numeric keypad */
   662  #define DIK_RALT            DIK_RMENU           /* right Alt */
   663  #define DIK_UPARROW         DIK_UP              /* UpArrow on arrow keypad */
   664  #define DIK_PGUP            DIK_PRIOR           /* PgUp on arrow keypad */
   665  #define DIK_LEFTARROW       DIK_LEFT            /* LeftArrow on arrow keypad */
   666  #define DIK_RIGHTARROW      DIK_RIGHT           /* RightArrow on arrow keypad */
   667  #define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */
   668  #define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */
   669  
   670  #define DIDFT_ALL		0x00000000
   671  #define DIDFT_RELAXIS		0x00000001
   672  #define DIDFT_ABSAXIS		0x00000002
   673  #define DIDFT_AXIS		0x00000003
   674  #define DIDFT_PSHBUTTON		0x00000004
   675  #define DIDFT_TGLBUTTON		0x00000008
   676  #define DIDFT_BUTTON		0x0000000C
   677  #define DIDFT_POV		0x00000010
   678  #define DIDFT_COLLECTION	0x00000040
   679  #define DIDFT_NODATA		0x00000080
   680  #define DIDFT_ANYINSTANCE	0x00FFFF00
   681  #define DIDFT_INSTANCEMASK	DIDFT_ANYINSTANCE
   682  #define DIDFT_MAKEINSTANCE(n)	((WORD)(n) << 8)
   683  #define DIDFT_GETTYPE(n)	LOBYTE(n)
   684  #define DIDFT_GETINSTANCE(n)	LOWORD((n) >> 8)
   685  #define DIDFT_FFACTUATOR	0x01000000
   686  #define DIDFT_FFEFFECTTRIGGER	0x02000000
   687  #if DIRECTINPUT_VERSION >= 0x050a
   688  #define DIDFT_OUTPUT		0x10000000
   689  #define DIDFT_VENDORDEFINED	0x04000000
   690  #define DIDFT_ALIAS		0x08000000
   691  #endif /* DI5a */
   692  #ifndef DIDFT_OPTIONAL
   693  #define DIDFT_OPTIONAL		0x80000000
   694  #endif
   695  #define DIDFT_ENUMCOLLECTION(n)	((WORD)(n) << 8)
   696  #define DIDFT_NOCOLLECTION	0x00FFFF00
   697  
   698  #define DIDF_ABSAXIS		0x00000001
   699  #define DIDF_RELAXIS		0x00000002
   700  
   701  #define DIGDD_PEEK		0x00000001
   702  
   703  #define DISEQUENCE_COMPARE(dwSq1,cmp,dwSq2) ((int)((dwSq1) - (dwSq2)) cmp 0)
   704  
   705  typedef struct DIDEVICEOBJECTDATA_DX3 {
   706      DWORD	dwOfs;
   707      DWORD	dwData;
   708      DWORD	dwTimeStamp;
   709      DWORD	dwSequence;
   710  } DIDEVICEOBJECTDATA_DX3,*LPDIDEVICEOBJECTDATA_DX3;
   711  typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX3;
   712  
   713  typedef struct DIDEVICEOBJECTDATA {
   714      DWORD	dwOfs;
   715      DWORD	dwData;
   716      DWORD	dwTimeStamp;
   717      DWORD	dwSequence;
   718  #if(DIRECTINPUT_VERSION >= 0x0800)
   719      UINT_PTR	uAppData;
   720  #endif /* DIRECTINPUT_VERSION >= 0x0800 */
   721  } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
   722  typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;
   723  
   724  typedef struct _DIOBJECTDATAFORMAT {
   725      const GUID *pguid;
   726      DWORD	dwOfs;
   727      DWORD	dwType;
   728      DWORD	dwFlags;
   729  } DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;
   730  typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;
   731  
   732  typedef struct _DIDATAFORMAT {
   733      DWORD			dwSize;
   734      DWORD			dwObjSize;
   735      DWORD			dwFlags;
   736      DWORD			dwDataSize;
   737      DWORD			dwNumObjs;
   738      LPDIOBJECTDATAFORMAT	rgodf;
   739  } DIDATAFORMAT, *LPDIDATAFORMAT;
   740  typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
   741  
   742  #if DIRECTINPUT_VERSION >= 0x0500
   743  #define DIDOI_FFACTUATOR	0x00000001
   744  #define DIDOI_FFEFFECTTRIGGER	0x00000002
   745  #define DIDOI_POLLED		0x00008000
   746  #define DIDOI_ASPECTPOSITION	0x00000100
   747  #define DIDOI_ASPECTVELOCITY	0x00000200
   748  #define DIDOI_ASPECTACCEL	0x00000300
   749  #define DIDOI_ASPECTFORCE	0x00000400
   750  #define DIDOI_ASPECTMASK	0x00000F00
   751  #endif /* DI5 */
   752  #if DIRECTINPUT_VERSION >= 0x050a
   753  #define DIDOI_GUIDISUSAGE	0x00010000
   754  #endif /* DI5a */
   755  
   756  typedef struct DIPROPHEADER {
   757      DWORD	dwSize;
   758      DWORD	dwHeaderSize;
   759      DWORD	dwObj;
   760      DWORD	dwHow;
   761  } DIPROPHEADER,*LPDIPROPHEADER;
   762  typedef const DIPROPHEADER *LPCDIPROPHEADER;
   763  
   764  #define DIPH_DEVICE	0
   765  #define DIPH_BYOFFSET	1
   766  #define DIPH_BYID	2
   767  #if DIRECTINPUT_VERSION >= 0x050a
   768  #define DIPH_BYUSAGE	3
   769  
   770  #define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage)
   771  #endif /* DI5a */
   772  
   773  typedef struct DIPROPDWORD {
   774  	DIPROPHEADER	diph;
   775  	DWORD		dwData;
   776  } DIPROPDWORD, *LPDIPROPDWORD;
   777  typedef const DIPROPDWORD *LPCDIPROPDWORD;
   778  
   779  typedef struct DIPROPRANGE {
   780  	DIPROPHEADER	diph;
   781  	LONG		lMin;
   782  	LONG		lMax;
   783  } DIPROPRANGE, *LPDIPROPRANGE;
   784  typedef const DIPROPRANGE *LPCDIPROPRANGE;
   785  
   786  #define DIPROPRANGE_NOMIN	((LONG)0x80000000)
   787  #define DIPROPRANGE_NOMAX	((LONG)0x7FFFFFFF)
   788  
   789  #if DIRECTINPUT_VERSION >= 0x050a
   790  typedef struct DIPROPCAL {
   791  	DIPROPHEADER diph;
   792  	LONG	lMin;
   793  	LONG	lCenter;
   794  	LONG	lMax;
   795  } DIPROPCAL, *LPDIPROPCAL;
   796  typedef const DIPROPCAL *LPCDIPROPCAL;
   797  
   798  typedef struct DIPROPCALPOV {
   799  	DIPROPHEADER	diph;
   800  	LONG		lMin[5];
   801  	LONG		lMax[5];
   802  } DIPROPCALPOV, *LPDIPROPCALPOV;
   803  typedef const DIPROPCALPOV *LPCDIPROPCALPOV;
   804  
   805  typedef struct DIPROPGUIDANDPATH {
   806  	DIPROPHEADER diph;
   807  	GUID    guidClass;
   808  	WCHAR   wszPath[MAX_PATH];
   809  } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;
   810  typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
   811  
   812  typedef struct DIPROPSTRING {
   813          DIPROPHEADER diph;
   814          WCHAR        wsz[MAX_PATH];
   815  } DIPROPSTRING, *LPDIPROPSTRING;
   816  typedef const DIPROPSTRING *LPCDIPROPSTRING;
   817  #endif /* DI5a */
   818  
   819  #if DIRECTINPUT_VERSION >= 0x0800
   820  typedef struct DIPROPPOINTER {
   821  	DIPROPHEADER diph;
   822  	UINT_PTR     uData;
   823  } DIPROPPOINTER, *LPDIPROPPOINTER;
   824  typedef const DIPROPPOINTER *LPCDIPROPPOINTER;
   825  #endif /* DI8 */
   826  
   827  /* special property GUIDs */
   828  #ifdef __cplusplus
   829  #define MAKEDIPROP(prop)	(*(const GUID *)(prop))
   830  #else
   831  #define MAKEDIPROP(prop)	((REFGUID)(prop))
   832  #endif
   833  #define DIPROP_BUFFERSIZE	MAKEDIPROP(1)
   834  #define DIPROP_AXISMODE		MAKEDIPROP(2)
   835  
   836  #define DIPROPAXISMODE_ABS	0
   837  #define DIPROPAXISMODE_REL	1
   838  
   839  #define DIPROP_GRANULARITY	MAKEDIPROP(3)
   840  #define DIPROP_RANGE		MAKEDIPROP(4)
   841  #define DIPROP_DEADZONE		MAKEDIPROP(5)
   842  #define DIPROP_SATURATION	MAKEDIPROP(6)
   843  #define DIPROP_FFGAIN		MAKEDIPROP(7)
   844  #define DIPROP_FFLOAD		MAKEDIPROP(8)
   845  #define DIPROP_AUTOCENTER	MAKEDIPROP(9)
   846  
   847  #define DIPROPAUTOCENTER_OFF	0
   848  #define DIPROPAUTOCENTER_ON	1
   849  
   850  #define DIPROP_CALIBRATIONMODE	MAKEDIPROP(10)
   851  
   852  #define DIPROPCALIBRATIONMODE_COOKED	0
   853  #define DIPROPCALIBRATIONMODE_RAW	1
   854  
   855  #if DIRECTINPUT_VERSION >= 0x050a
   856  #define DIPROP_CALIBRATION	MAKEDIPROP(11)
   857  #define DIPROP_GUIDANDPATH	MAKEDIPROP(12)
   858  #define DIPROP_INSTANCENAME	MAKEDIPROP(13)
   859  #define DIPROP_PRODUCTNAME	MAKEDIPROP(14)
   860  #endif
   861  
   862  #if DIRECTINPUT_VERSION >= 0x5B2
   863  #define DIPROP_JOYSTICKID	MAKEDIPROP(15)
   864  #define DIPROP_GETPORTDISPLAYNAME	MAKEDIPROP(16)
   865  #endif
   866  
   867  #if DIRECTINPUT_VERSION >= 0x0700
   868  #define DIPROP_PHYSICALRANGE	MAKEDIPROP(18)
   869  #define DIPROP_LOGICALRANGE	MAKEDIPROP(19)
   870  #endif
   871  
   872  #if(DIRECTINPUT_VERSION >= 0x0800)
   873  #define DIPROP_KEYNAME		MAKEDIPROP(20)
   874  #define DIPROP_CPOINTS		MAKEDIPROP(21)
   875  #define DIPROP_APPDATA		MAKEDIPROP(22)
   876  #define DIPROP_SCANCODE		MAKEDIPROP(23)
   877  #define DIPROP_VIDPID		MAKEDIPROP(24)
   878  #define DIPROP_USERNAME		MAKEDIPROP(25)
   879  #define DIPROP_TYPENAME		MAKEDIPROP(26)
   880  
   881  #define MAXCPOINTSNUM		8
   882  
   883  typedef struct _CPOINT {
   884      LONG	lP;
   885      DWORD	dwLog;
   886  } CPOINT, *PCPOINT;
   887  
   888  typedef struct DIPROPCPOINTS {
   889      DIPROPHEADER diph;
   890      DWORD	dwCPointsNum;
   891      CPOINT	cp[MAXCPOINTSNUM];
   892  } DIPROPCPOINTS, *LPDIPROPCPOINTS;
   893  typedef const DIPROPCPOINTS *LPCDIPROPCPOINTS;
   894  #endif /* DI8 */
   895  
   896  
   897  typedef struct DIDEVCAPS_DX3 {
   898      DWORD	dwSize;
   899      DWORD	dwFlags;
   900      DWORD	dwDevType;
   901      DWORD	dwAxes;
   902      DWORD	dwButtons;
   903      DWORD	dwPOVs;
   904  } DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;
   905  
   906  typedef struct DIDEVCAPS {
   907      DWORD	dwSize;
   908      DWORD	dwFlags;
   909      DWORD	dwDevType;
   910      DWORD	dwAxes;
   911      DWORD	dwButtons;
   912      DWORD	dwPOVs;
   913  #if(DIRECTINPUT_VERSION >= 0x0500)
   914      DWORD	dwFFSamplePeriod;
   915      DWORD	dwFFMinTimeResolution;
   916      DWORD	dwFirmwareRevision;
   917      DWORD	dwHardwareRevision;
   918      DWORD	dwFFDriverVersion;
   919  #endif /* DIRECTINPUT_VERSION >= 0x0500 */
   920  } DIDEVCAPS,*LPDIDEVCAPS;
   921  
   922  #define DIDC_ATTACHED		0x00000001
   923  #define DIDC_POLLEDDEVICE	0x00000002
   924  #define DIDC_EMULATED		0x00000004
   925  #define DIDC_POLLEDDATAFORMAT	0x00000008
   926  #define DIDC_FORCEFEEDBACK	0x00000100
   927  #define DIDC_FFATTACK		0x00000200
   928  #define DIDC_FFFADE		0x00000400
   929  #define DIDC_SATURATION		0x00000800
   930  #define DIDC_POSNEGCOEFFICIENTS	0x00001000
   931  #define DIDC_POSNEGSATURATION	0x00002000
   932  #define DIDC_DEADBAND		0x00004000
   933  #define DIDC_STARTDELAY		0x00008000
   934  #define DIDC_ALIAS		0x00010000
   935  #define DIDC_PHANTOM		0x00020000
   936  #define DIDC_HIDDEN		0x00040000
   937  
   938  
   939  /* SetCooperativeLevel dwFlags */
   940  #define DISCL_EXCLUSIVE		0x00000001
   941  #define DISCL_NONEXCLUSIVE	0x00000002
   942  #define DISCL_FOREGROUND	0x00000004
   943  #define DISCL_BACKGROUND	0x00000008
   944  #define DISCL_NOWINKEY          0x00000010
   945  
   946  #if (DIRECTINPUT_VERSION >= 0x0500)
   947  /* Device FF flags */
   948  #define DISFFC_RESET            0x00000001
   949  #define DISFFC_STOPALL          0x00000002
   950  #define DISFFC_PAUSE            0x00000004
   951  #define DISFFC_CONTINUE         0x00000008
   952  #define DISFFC_SETACTUATORSON   0x00000010
   953  #define DISFFC_SETACTUATORSOFF  0x00000020
   954  
   955  #define DIGFFS_EMPTY            0x00000001
   956  #define DIGFFS_STOPPED          0x00000002
   957  #define DIGFFS_PAUSED           0x00000004
   958  #define DIGFFS_ACTUATORSON      0x00000010
   959  #define DIGFFS_ACTUATORSOFF     0x00000020
   960  #define DIGFFS_POWERON          0x00000040
   961  #define DIGFFS_POWEROFF         0x00000080
   962  #define DIGFFS_SAFETYSWITCHON   0x00000100
   963  #define DIGFFS_SAFETYSWITCHOFF  0x00000200
   964  #define DIGFFS_USERFFSWITCHON   0x00000400
   965  #define DIGFFS_USERFFSWITCHOFF  0x00000800
   966  #define DIGFFS_DEVICELOST       0x80000000
   967  
   968  /* Effect flags */
   969  #define DIEFT_ALL		0x00000000
   970  
   971  #define DIEFT_CONSTANTFORCE	0x00000001
   972  #define DIEFT_RAMPFORCE		0x00000002
   973  #define DIEFT_PERIODIC		0x00000003
   974  #define DIEFT_CONDITION		0x00000004
   975  #define DIEFT_CUSTOMFORCE	0x00000005
   976  #define DIEFT_HARDWARE		0x000000FF
   977  #define DIEFT_FFATTACK		0x00000200
   978  #define DIEFT_FFFADE		0x00000400
   979  #define DIEFT_SATURATION	0x00000800
   980  #define DIEFT_POSNEGCOEFFICIENTS 0x00001000
   981  #define DIEFT_POSNEGSATURATION	0x00002000
   982  #define DIEFT_DEADBAND		0x00004000
   983  #define DIEFT_STARTDELAY	0x00008000
   984  #define DIEFT_GETTYPE(n)	LOBYTE(n)
   985  
   986  #define DIEFF_OBJECTIDS         0x00000001
   987  #define DIEFF_OBJECTOFFSETS     0x00000002
   988  #define DIEFF_CARTESIAN         0x00000010
   989  #define DIEFF_POLAR             0x00000020
   990  #define DIEFF_SPHERICAL         0x00000040
   991  
   992  #define DIEP_DURATION           0x00000001
   993  #define DIEP_SAMPLEPERIOD       0x00000002
   994  #define DIEP_GAIN               0x00000004
   995  #define DIEP_TRIGGERBUTTON      0x00000008
   996  #define DIEP_TRIGGERREPEATINTERVAL 0x00000010
   997  #define DIEP_AXES               0x00000020
   998  #define DIEP_DIRECTION          0x00000040
   999  #define DIEP_ENVELOPE           0x00000080
  1000  #define DIEP_TYPESPECIFICPARAMS 0x00000100
  1001  #if(DIRECTINPUT_VERSION >= 0x0600)
  1002  #define DIEP_STARTDELAY         0x00000200
  1003  #define DIEP_ALLPARAMS_DX5      0x000001FF
  1004  #define DIEP_ALLPARAMS          0x000003FF
  1005  #else
  1006  #define DIEP_ALLPARAMS          0x000001FF
  1007  #endif /* DIRECTINPUT_VERSION >= 0x0600 */
  1008  #define DIEP_START              0x20000000
  1009  #define DIEP_NORESTART          0x40000000
  1010  #define DIEP_NODOWNLOAD         0x80000000
  1011  #define DIEB_NOTRIGGER          0xFFFFFFFF
  1012  
  1013  #define DIES_SOLO               0x00000001
  1014  #define DIES_NODOWNLOAD         0x80000000
  1015  
  1016  #define DIEGES_PLAYING          0x00000001
  1017  #define DIEGES_EMULATED         0x00000002
  1018  
  1019  #define DI_DEGREES		100
  1020  #define DI_FFNOMINALMAX		10000
  1021  #define DI_SECONDS		1000000
  1022  
  1023  typedef struct DICONSTANTFORCE {
  1024  	LONG			lMagnitude;
  1025  } DICONSTANTFORCE, *LPDICONSTANTFORCE;
  1026  typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;
  1027  
  1028  typedef struct DIRAMPFORCE {
  1029  	LONG			lStart;
  1030  	LONG			lEnd;
  1031  } DIRAMPFORCE, *LPDIRAMPFORCE;
  1032  typedef const DIRAMPFORCE *LPCDIRAMPFORCE;
  1033  
  1034  typedef struct DIPERIODIC {
  1035  	DWORD			dwMagnitude;
  1036  	LONG			lOffset;
  1037  	DWORD			dwPhase;
  1038  	DWORD			dwPeriod;
  1039  } DIPERIODIC, *LPDIPERIODIC;
  1040  typedef const DIPERIODIC *LPCDIPERIODIC;
  1041  
  1042  typedef struct DICONDITION {
  1043  	LONG			lOffset;
  1044  	LONG			lPositiveCoefficient;
  1045  	LONG			lNegativeCoefficient;
  1046  	DWORD			dwPositiveSaturation;
  1047  	DWORD			dwNegativeSaturation;
  1048  	LONG			lDeadBand;
  1049  } DICONDITION, *LPDICONDITION;
  1050  typedef const DICONDITION *LPCDICONDITION;
  1051  
  1052  typedef struct DICUSTOMFORCE {
  1053  	DWORD			cChannels;
  1054  	DWORD			dwSamplePeriod;
  1055  	DWORD			cSamples;
  1056  	LPLONG			rglForceData;
  1057  } DICUSTOMFORCE, *LPDICUSTOMFORCE;
  1058  typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;
  1059  
  1060  typedef struct DIENVELOPE {
  1061  	DWORD			dwSize;
  1062  	DWORD			dwAttackLevel;
  1063  	DWORD			dwAttackTime;
  1064  	DWORD			dwFadeLevel;
  1065  	DWORD			dwFadeTime;
  1066  } DIENVELOPE, *LPDIENVELOPE;
  1067  typedef const DIENVELOPE *LPCDIENVELOPE;
  1068  
  1069  typedef struct DIEFFECT_DX5 {
  1070  	DWORD			dwSize;
  1071  	DWORD			dwFlags;
  1072  	DWORD			dwDuration;
  1073  	DWORD			dwSamplePeriod;
  1074  	DWORD			dwGain;
  1075  	DWORD			dwTriggerButton;
  1076  	DWORD			dwTriggerRepeatInterval;
  1077  	DWORD			cAxes;
  1078  	LPDWORD			rgdwAxes;
  1079  	LPLONG			rglDirection;
  1080  	LPDIENVELOPE		lpEnvelope;
  1081  	DWORD			cbTypeSpecificParams;
  1082  	LPVOID			lpvTypeSpecificParams;
  1083  } DIEFFECT_DX5, *LPDIEFFECT_DX5;
  1084  typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;
  1085  
  1086  typedef struct DIEFFECT {
  1087  	DWORD			dwSize;
  1088  	DWORD			dwFlags;
  1089  	DWORD			dwDuration;
  1090  	DWORD			dwSamplePeriod;
  1091  	DWORD			dwGain;
  1092  	DWORD			dwTriggerButton;
  1093  	DWORD			dwTriggerRepeatInterval;
  1094  	DWORD			cAxes;
  1095  	LPDWORD			rgdwAxes;
  1096  	LPLONG			rglDirection;
  1097  	LPDIENVELOPE		lpEnvelope;
  1098  	DWORD			cbTypeSpecificParams;
  1099  	LPVOID			lpvTypeSpecificParams;
  1100  #if(DIRECTINPUT_VERSION >= 0x0600)
  1101  	DWORD			dwStartDelay;
  1102  #endif /* DIRECTINPUT_VERSION >= 0x0600 */
  1103  } DIEFFECT, *LPDIEFFECT;
  1104  typedef const DIEFFECT *LPCDIEFFECT;
  1105  typedef DIEFFECT DIEFFECT_DX6;
  1106  typedef LPDIEFFECT LPDIEFFECT_DX6;
  1107  
  1108  typedef struct DIEFFECTINFOA {
  1109  	DWORD			dwSize;
  1110  	GUID			guid;
  1111  	DWORD			dwEffType;
  1112  	DWORD			dwStaticParams;
  1113  	DWORD			dwDynamicParams;
  1114  	CHAR			tszName[MAX_PATH];
  1115  } DIEFFECTINFOA, *LPDIEFFECTINFOA;
  1116  typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;
  1117  
  1118  typedef struct DIEFFECTINFOW {
  1119  	DWORD			dwSize;
  1120  	GUID			guid;
  1121  	DWORD			dwEffType;
  1122  	DWORD			dwStaticParams;
  1123  	DWORD			dwDynamicParams;
  1124  	WCHAR			tszName[MAX_PATH];
  1125  } DIEFFECTINFOW, *LPDIEFFECTINFOW;
  1126  typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
  1127  
  1128  DECL_WINELIB_TYPE_AW(DIEFFECTINFO)
  1129  DECL_WINELIB_TYPE_AW(LPDIEFFECTINFO)
  1130  DECL_WINELIB_TYPE_AW(LPCDIEFFECTINFO)
  1131  
  1132  typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
  1133  typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
  1134  
  1135  typedef struct DIEFFESCAPE {
  1136  	DWORD	dwSize;
  1137  	DWORD	dwCommand;
  1138  	LPVOID	lpvInBuffer;
  1139  	DWORD	cbInBuffer;
  1140  	LPVOID	lpvOutBuffer;
  1141  	DWORD	cbOutBuffer;
  1142  } DIEFFESCAPE, *LPDIEFFESCAPE;
  1143  
  1144  typedef struct DIJOYSTATE {
  1145  	LONG	lX;
  1146  	LONG	lY;
  1147  	LONG	lZ;
  1148  	LONG	lRx;
  1149  	LONG	lRy;
  1150  	LONG	lRz;
  1151  	LONG	rglSlider[2];
  1152  	DWORD	rgdwPOV[4];
  1153  	BYTE	rgbButtons[32];
  1154  } DIJOYSTATE, *LPDIJOYSTATE;
  1155  
  1156  typedef struct DIJOYSTATE2 {
  1157  	LONG	lX;
  1158  	LONG	lY;
  1159  	LONG	lZ;
  1160  	LONG	lRx;
  1161  	LONG	lRy;
  1162  	LONG	lRz;
  1163  	LONG	rglSlider[2];
  1164  	DWORD	rgdwPOV[4];
  1165  	BYTE	rgbButtons[128];
  1166  	LONG	lVX;		/* 'v' as in velocity */
  1167  	LONG	lVY;
  1168  	LONG	lVZ;
  1169  	LONG	lVRx;
  1170  	LONG	lVRy;
  1171  	LONG	lVRz;
  1172  	LONG	rglVSlider[2];
  1173  	LONG	lAX;		/* 'a' as in acceleration */
  1174  	LONG	lAY;
  1175  	LONG	lAZ;
  1176  	LONG	lARx;
  1177  	LONG	lARy;
  1178  	LONG	lARz;
  1179  	LONG	rglASlider[2];
  1180  	LONG	lFX;		/* 'f' as in force */
  1181  	LONG	lFY;
  1182  	LONG	lFZ;
  1183  	LONG	lFRx;		/* 'fr' as in rotational force aka torque */
  1184  	LONG	lFRy;
  1185  	LONG	lFRz;
  1186  	LONG	rglFSlider[2];
  1187  } DIJOYSTATE2, *LPDIJOYSTATE2;
  1188  
  1189  #define DIJOFS_X		FIELD_OFFSET(DIJOYSTATE, lX)
  1190  #define DIJOFS_Y		FIELD_OFFSET(DIJOYSTATE, lY)
  1191  #define DIJOFS_Z		FIELD_OFFSET(DIJOYSTATE, lZ)
  1192  #define DIJOFS_RX		FIELD_OFFSET(DIJOYSTATE, lRx)
  1193  #define DIJOFS_RY		FIELD_OFFSET(DIJOYSTATE, lRy)
  1194  #define DIJOFS_RZ		FIELD_OFFSET(DIJOYSTATE, lRz)
  1195  #define DIJOFS_SLIDER(n)	(FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
  1196                                                          (n) * sizeof(LONG))
  1197  #define DIJOFS_POV(n)		(FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
  1198                                                          (n) * sizeof(DWORD))
  1199  #define DIJOFS_BUTTON(n)	(FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
  1200  #define DIJOFS_BUTTON0		DIJOFS_BUTTON(0)
  1201  #define DIJOFS_BUTTON1		DIJOFS_BUTTON(1)
  1202  #define DIJOFS_BUTTON2		DIJOFS_BUTTON(2)
  1203  #define DIJOFS_BUTTON3		DIJOFS_BUTTON(3)
  1204  #define DIJOFS_BUTTON4		DIJOFS_BUTTON(4)
  1205  #define DIJOFS_BUTTON5		DIJOFS_BUTTON(5)
  1206  #define DIJOFS_BUTTON6		DIJOFS_BUTTON(6)
  1207  #define DIJOFS_BUTTON7		DIJOFS_BUTTON(7)
  1208  #define DIJOFS_BUTTON8		DIJOFS_BUTTON(8)
  1209  #define DIJOFS_BUTTON9		DIJOFS_BUTTON(9)
  1210  #define DIJOFS_BUTTON10		DIJOFS_BUTTON(10)
  1211  #define DIJOFS_BUTTON11		DIJOFS_BUTTON(11)
  1212  #define DIJOFS_BUTTON12		DIJOFS_BUTTON(12)
  1213  #define DIJOFS_BUTTON13		DIJOFS_BUTTON(13)
  1214  #define DIJOFS_BUTTON14		DIJOFS_BUTTON(14)
  1215  #define DIJOFS_BUTTON15		DIJOFS_BUTTON(15)
  1216  #define DIJOFS_BUTTON16		DIJOFS_BUTTON(16)
  1217  #define DIJOFS_BUTTON17		DIJOFS_BUTTON(17)
  1218  #define DIJOFS_BUTTON18		DIJOFS_BUTTON(18)
  1219  #define DIJOFS_BUTTON19		DIJOFS_BUTTON(19)
  1220  #define DIJOFS_BUTTON20		DIJOFS_BUTTON(20)
  1221  #define DIJOFS_BUTTON21		DIJOFS_BUTTON(21)
  1222  #define DIJOFS_BUTTON22		DIJOFS_BUTTON(22)
  1223  #define DIJOFS_BUTTON23		DIJOFS_BUTTON(23)
  1224  #define DIJOFS_BUTTON24		DIJOFS_BUTTON(24)
  1225  #define DIJOFS_BUTTON25		DIJOFS_BUTTON(25)
  1226  #define DIJOFS_BUTTON26		DIJOFS_BUTTON(26)
  1227  #define DIJOFS_BUTTON27		DIJOFS_BUTTON(27)
  1228  #define DIJOFS_BUTTON28		DIJOFS_BUTTON(28)
  1229  #define DIJOFS_BUTTON29		DIJOFS_BUTTON(29)
  1230  #define DIJOFS_BUTTON30		DIJOFS_BUTTON(30)
  1231  #define DIJOFS_BUTTON31		DIJOFS_BUTTON(31)
  1232  #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  1233  
  1234  /* DInput 7 structures, types */
  1235  #if(DIRECTINPUT_VERSION >= 0x0700)
  1236  typedef struct DIFILEEFFECT {
  1237    DWORD       dwSize;
  1238    GUID        GuidEffect;
  1239    LPCDIEFFECT lpDiEffect;
  1240    CHAR        szFriendlyName[MAX_PATH];
  1241  } DIFILEEFFECT, *LPDIFILEEFFECT;
  1242  
  1243  typedef const DIFILEEFFECT *LPCDIFILEEFFECT;
  1244  typedef BOOL (CALLBACK *LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID);
  1245  #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  1246  
  1247  /* DInput 8 structures and types */
  1248  #if DIRECTINPUT_VERSION >= 0x0800
  1249  typedef struct _DIACTIONA {
  1250  	UINT_PTR	uAppData;
  1251  	DWORD		dwSemantic;
  1252  	DWORD		dwFlags;
  1253  	__GNU_EXTENSION union {
  1254  		LPCSTR	lptszActionName;
  1255  		UINT	uResIdString;
  1256  	} DUMMYUNIONNAME;
  1257  	GUID		guidInstance;
  1258  	DWORD		dwObjID;
  1259  	DWORD		dwHow;
  1260  } DIACTIONA, *LPDIACTIONA;
  1261  typedef const DIACTIONA *LPCDIACTIONA;
  1262  
  1263  typedef struct _DIACTIONW {
  1264  	UINT_PTR	uAppData;
  1265  	DWORD		dwSemantic;
  1266  	DWORD		dwFlags;
  1267  	__GNU_EXTENSION union {
  1268  		LPCWSTR	lptszActionName;
  1269  		UINT	uResIdString;
  1270  	} DUMMYUNIONNAME;
  1271  	GUID		guidInstance;
  1272  	DWORD		dwObjID;
  1273  	DWORD		dwHow;
  1274  } DIACTIONW, *LPDIACTIONW;
  1275  typedef const DIACTIONW *LPCDIACTIONW;
  1276  
  1277  DECL_WINELIB_TYPE_AW(DIACTION)
  1278  DECL_WINELIB_TYPE_AW(LPDIACTION)
  1279  DECL_WINELIB_TYPE_AW(LPCDIACTION)
  1280  
  1281  #define DIA_FORCEFEEDBACK	0x00000001
  1282  #define DIA_APPMAPPED		0x00000002
  1283  #define DIA_APPNOMAP		0x00000004
  1284  #define DIA_NORANGE		0x00000008
  1285  #define DIA_APPFIXED		0x00000010
  1286  
  1287  #define DIAH_UNMAPPED		0x00000000
  1288  #define DIAH_USERCONFIG		0x00000001
  1289  #define DIAH_APPREQUESTED	0x00000002
  1290  #define DIAH_HWAPP		0x00000004
  1291  #define DIAH_HWDEFAULT		0x00000008
  1292  #define DIAH_DEFAULT		0x00000020
  1293  #define DIAH_ERROR		0x80000000
  1294  
  1295  typedef struct _DIACTIONFORMATA {
  1296  	DWORD		dwSize;
  1297  	DWORD		dwActionSize;
  1298  	DWORD		dwDataSize;
  1299  	DWORD		dwNumActions;
  1300  	LPDIACTIONA	rgoAction;
  1301  	GUID		guidActionMap;
  1302  	DWORD		dwGenre;
  1303  	DWORD		dwBufferSize;
  1304  	LONG		lAxisMin;
  1305  	LONG		lAxisMax;
  1306  	HINSTANCE	hInstString;
  1307  	FILETIME	ftTimeStamp;
  1308  	DWORD		dwCRC;
  1309  	CHAR		tszActionMap[MAX_PATH];
  1310  } DIACTIONFORMATA, *LPDIACTIONFORMATA;
  1311  typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA;
  1312  
  1313  typedef struct _DIACTIONFORMATW {
  1314  	DWORD		dwSize;
  1315  	DWORD		dwActionSize;
  1316  	DWORD		dwDataSize;
  1317  	DWORD		dwNumActions;
  1318  	LPDIACTIONW	rgoAction;
  1319  	GUID		guidActionMap;
  1320  	DWORD		dwGenre;
  1321  	DWORD		dwBufferSize;
  1322  	LONG		lAxisMin;
  1323  	LONG		lAxisMax;
  1324  	HINSTANCE	hInstString;
  1325  	FILETIME	ftTimeStamp;
  1326  	DWORD		dwCRC;
  1327  	WCHAR		tszActionMap[MAX_PATH];
  1328  } DIACTIONFORMATW, *LPDIACTIONFORMATW;
  1329  typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW;
  1330  
  1331  DECL_WINELIB_TYPE_AW(DIACTIONFORMAT)
  1332  DECL_WINELIB_TYPE_AW(LPDIACTIONFORMAT)
  1333  DECL_WINELIB_TYPE_AW(LPCDIACTIONFORMAT)
  1334  
  1335  #define DIAFTS_NEWDEVICELOW	0xFFFFFFFF
  1336  #define DIAFTS_NEWDEVICEHIGH	0xFFFFFFFF
  1337  #define DIAFTS_UNUSEDDEVICELOW	0x00000000
  1338  #define DIAFTS_UNUSEDDEVICEHIGH	0x00000000
  1339  
  1340  #define DIDBAM_DEFAULT		0x00000000
  1341  #define DIDBAM_PRESERVE		0x00000001
  1342  #define DIDBAM_INITIALIZE	0x00000002
  1343  #define DIDBAM_HWDEFAULTS	0x00000004
  1344  
  1345  #define DIDSAM_DEFAULT		0x00000000
  1346  #define DIDSAM_NOUSER		0x00000001
  1347  #define DIDSAM_FORCESAVE	0x00000002
  1348  
  1349  #define DICD_DEFAULT		0x00000000
  1350  #define DICD_EDIT		0x00000001
  1351  
  1352  #ifndef D3DCOLOR_DEFINED
  1353  typedef DWORD D3DCOLOR;
  1354  #define D3DCOLOR_DEFINED
  1355  #endif
  1356  
  1357  typedef struct _DICOLORSET {
  1358  	DWORD		dwSize;
  1359  	D3DCOLOR	cTextFore;
  1360  	D3DCOLOR	cTextHighlight;
  1361  	D3DCOLOR	cCalloutLine;
  1362  	D3DCOLOR	cCalloutHighlight;
  1363  	D3DCOLOR	cBorder;
  1364  	D3DCOLOR	cControlFill;
  1365  	D3DCOLOR	cHighlightFill;
  1366  	D3DCOLOR	cAreaFill;
  1367  } DICOLORSET, *LPDICOLORSET;
  1368  typedef const DICOLORSET *LPCDICOLORSET;
  1369  
  1370  typedef struct _DICONFIGUREDEVICESPARAMSA {
  1371  	DWORD			dwSize;
  1372  	DWORD			dwcUsers;
  1373  	LPSTR			lptszUserNames;
  1374  	DWORD			dwcFormats;
  1375  	LPDIACTIONFORMATA	lprgFormats;
  1376  	HWND			hwnd;
  1377  	DICOLORSET		dics;
  1378  	LPUNKNOWN		lpUnkDDSTarget;
  1379  } DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA;
  1380  typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA;
  1381  
  1382  typedef struct _DICONFIGUREDEVICESPARAMSW {
  1383  	DWORD			dwSize;
  1384  	DWORD			dwcUsers;
  1385  	LPWSTR			lptszUserNames;
  1386  	DWORD			dwcFormats;
  1387  	LPDIACTIONFORMATW	lprgFormats;
  1388  	HWND			hwnd;
  1389  	DICOLORSET		dics;
  1390  	LPUNKNOWN		lpUnkDDSTarget;
  1391  } DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW;
  1392  typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW;
  1393  
  1394  DECL_WINELIB_TYPE_AW(DICONFIGUREDEVICESPARAMS)
  1395  DECL_WINELIB_TYPE_AW(LPDICONFIGUREDEVICESPARAMS)
  1396  DECL_WINELIB_TYPE_AW(LPCDICONFIGUREDEVICESPARAMS)
  1397  
  1398  #define DIDIFT_CONFIGURATION	0x00000001
  1399  #define DIDIFT_OVERLAY		0x00000002
  1400  
  1401  #define DIDAL_CENTERED		0x00000000
  1402  #define DIDAL_LEFTALIGNED	0x00000001
  1403  #define DIDAL_RIGHTALIGNED	0x00000002
  1404  #define DIDAL_MIDDLE		0x00000000
  1405  #define DIDAL_TOPALIGNED	0x00000004
  1406  #define DIDAL_BOTTOMALIGNED	0x00000008
  1407  
  1408  typedef struct _DIDEVICEIMAGEINFOA {
  1409  	CHAR	tszImagePath[MAX_PATH];
  1410  	DWORD	dwFlags;
  1411  	DWORD	dwViewID;
  1412  	RECT	rcOverlay;
  1413  	DWORD	dwObjID;
  1414  	DWORD	dwcValidPts;
  1415  	POINT	rgptCalloutLine[5];
  1416  	RECT	rcCalloutRect;
  1417  	DWORD	dwTextAlign;
  1418  } DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA;
  1419  typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA;
  1420  
  1421  typedef struct _DIDEVICEIMAGEINFOW {
  1422  	WCHAR	tszImagePath[MAX_PATH];
  1423  	DWORD	dwFlags;
  1424  	DWORD	dwViewID;
  1425  	RECT	rcOverlay;
  1426  	DWORD	dwObjID;
  1427  	DWORD	dwcValidPts;
  1428  	POINT	rgptCalloutLine[5];
  1429  	RECT	rcCalloutRect;
  1430  	DWORD	dwTextAlign;
  1431  } DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW;
  1432  typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW;
  1433  
  1434  DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFO)
  1435  DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFO)
  1436  DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFO)
  1437  
  1438  typedef struct _DIDEVICEIMAGEINFOHEADERA {
  1439  	DWORD	dwSize;
  1440  	DWORD	dwSizeImageInfo;
  1441  	DWORD	dwcViews;
  1442  	DWORD	dwcButtons;
  1443  	DWORD	dwcAxes;
  1444  	DWORD	dwcPOVs;
  1445  	DWORD	dwBufferSize;
  1446  	DWORD	dwBufferUsed;
  1447  	LPDIDEVICEIMAGEINFOA	lprgImageInfoArray;
  1448  } DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA;
  1449  typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA;
  1450  
  1451  typedef struct _DIDEVICEIMAGEINFOHEADERW {
  1452  	DWORD	dwSize;
  1453  	DWORD	dwSizeImageInfo;
  1454  	DWORD	dwcViews;
  1455  	DWORD	dwcButtons;
  1456  	DWORD	dwcAxes;
  1457  	DWORD	dwcPOVs;
  1458  	DWORD	dwBufferSize;
  1459  	DWORD	dwBufferUsed;
  1460  	LPDIDEVICEIMAGEINFOW	lprgImageInfoArray;
  1461  } DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW;
  1462  typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW;
  1463  
  1464  DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFOHEADER)
  1465  DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFOHEADER)
  1466  DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFOHEADER)
  1467  
  1468  #endif /* DI8 */
  1469  
  1470  
  1471  /*****************************************************************************
  1472   * IDirectInputEffect interface
  1473   */
  1474  #if (DIRECTINPUT_VERSION >= 0x0500)
  1475  #undef INTERFACE
  1476  #define INTERFACE IDirectInputEffect
  1477  DECLARE_INTERFACE_(IDirectInputEffect,IUnknown)
  1478  {
  1479      /*** IUnknown methods ***/
  1480      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1481      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1482      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1483      /*** IDirectInputEffect methods ***/
  1484      STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID) PURE;
  1485      STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;
  1486      STDMETHOD(GetParameters)(THIS_ LPDIEFFECT, DWORD) PURE;
  1487      STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT, DWORD) PURE;
  1488      STDMETHOD(Start)(THIS_ DWORD, DWORD) PURE;
  1489      STDMETHOD(Stop)(THIS) PURE;
  1490      STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;
  1491      STDMETHOD(Download)(THIS) PURE;
  1492      STDMETHOD(Unload)(THIS) PURE;
  1493      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1494  };
  1495  
  1496  #if !defined(__cplusplus) || defined(CINTERFACE)
  1497  /*** IUnknown methods ***/
  1498  #define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1499  #define IDirectInputEffect_AddRef(p)             (p)->lpVtbl->AddRef(p)
  1500  #define IDirectInputEffect_Release(p)            (p)->lpVtbl->Release(p)
  1501  /*** IDirectInputEffect methods ***/
  1502  #define IDirectInputEffect_Initialize(p,a,b,c)    (p)->lpVtbl->Initialize(p,a,b,c)
  1503  #define IDirectInputEffect_GetEffectGuid(p,a)     (p)->lpVtbl->GetEffectGuid(p,a)
  1504  #define IDirectInputEffect_GetParameters(p,a,b)   (p)->lpVtbl->GetParameters(p,a,b)
  1505  #define IDirectInputEffect_SetParameters(p,a,b)   (p)->lpVtbl->SetParameters(p,a,b)
  1506  #define IDirectInputEffect_Start(p,a,b)           (p)->lpVtbl->Start(p,a,b)
  1507  #define IDirectInputEffect_Stop(p)                (p)->lpVtbl->Stop(p)
  1508  #define IDirectInputEffect_GetEffectStatus(p,a)   (p)->lpVtbl->GetEffectStatus(p,a)
  1509  #define IDirectInputEffect_Download(p)            (p)->lpVtbl->Download(p)
  1510  #define IDirectInputEffect_Unload(p)              (p)->lpVtbl->Unload(p)
  1511  #define IDirectInputEffect_Escape(p,a)            (p)->lpVtbl->Escape(p,a)
  1512  #else
  1513  /*** IUnknown methods ***/
  1514  #define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1515  #define IDirectInputEffect_AddRef(p)             (p)->AddRef()
  1516  #define IDirectInputEffect_Release(p)            (p)->Release()
  1517  /*** IDirectInputEffect methods ***/
  1518  #define IDirectInputEffect_Initialize(p,a,b,c)    (p)->Initialize(a,b,c)
  1519  #define IDirectInputEffect_GetEffectGuid(p,a)     (p)->GetEffectGuid(a)
  1520  #define IDirectInputEffect_GetParameters(p,a,b)   (p)->GetParameters(a,b)
  1521  #define IDirectInputEffect_SetParameters(p,a,b)   (p)->SetParameters(a,b)
  1522  #define IDirectInputEffect_Start(p,a,b)           (p)->Start(a,b)
  1523  #define IDirectInputEffect_Stop(p)                (p)->Stop()
  1524  #define IDirectInputEffect_GetEffectStatus(p,a)   (p)->GetEffectStatus(a)
  1525  #define IDirectInputEffect_Download(p)            (p)->Download()
  1526  #define IDirectInputEffect_Unload(p)              (p)->Unload()
  1527  #define IDirectInputEffect_Escape(p,a)            (p)->Escape(a)
  1528  #endif
  1529  
  1530  #endif /* DI5 */
  1531  
  1532  
  1533  /*****************************************************************************
  1534   * IDirectInputDeviceA interface
  1535   */
  1536  #undef INTERFACE
  1537  #define INTERFACE IDirectInputDeviceA
  1538  DECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown)
  1539  {
  1540      /*** IUnknown methods ***/
  1541      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1542      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1543      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1544      /*** IDirectInputDeviceA methods ***/
  1545      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1546      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1547      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1548      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1549      STDMETHOD(Acquire)(THIS) PURE;
  1550      STDMETHOD(Unacquire)(THIS) PURE;
  1551      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1552      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1553      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1554      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1555      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1556      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1557      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
  1558      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1559      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1560  };
  1561  
  1562  /*****************************************************************************
  1563   * IDirectInputDeviceW interface
  1564   */
  1565  #undef INTERFACE
  1566  #define INTERFACE IDirectInputDeviceW
  1567  DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)
  1568  {
  1569      /*** IUnknown methods ***/
  1570      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1571      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1572      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1573      /*** IDirectInputDeviceW methods ***/
  1574      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1575      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1576      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1577      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1578      STDMETHOD(Acquire)(THIS) PURE;
  1579      STDMETHOD(Unacquire)(THIS) PURE;
  1580      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1581      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1582      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1583      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1584      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1585      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1586      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
  1587      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1588      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1589  };
  1590  
  1591  #if !defined(__cplusplus) || defined(CINTERFACE)
  1592  /*** IUnknown methods ***/
  1593  #define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1594  #define IDirectInputDevice_AddRef(p)             (p)->lpVtbl->AddRef(p)
  1595  #define IDirectInputDevice_Release(p)            (p)->lpVtbl->Release(p)
  1596  /*** IDirectInputDevice methods ***/
  1597  #define IDirectInputDevice_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
  1598  #define IDirectInputDevice_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
  1599  #define IDirectInputDevice_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
  1600  #define IDirectInputDevice_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
  1601  #define IDirectInputDevice_Acquire(p)                 (p)->lpVtbl->Acquire(p)
  1602  #define IDirectInputDevice_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
  1603  #define IDirectInputDevice_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
  1604  #define IDirectInputDevice_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1605  #define IDirectInputDevice_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
  1606  #define IDirectInputDevice_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
  1607  #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1608  #define IDirectInputDevice_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1609  #define IDirectInputDevice_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
  1610  #define IDirectInputDevice_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
  1611  #define IDirectInputDevice_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
  1612  #else
  1613  /*** IUnknown methods ***/
  1614  #define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1615  #define IDirectInputDevice_AddRef(p)             (p)->AddRef()
  1616  #define IDirectInputDevice_Release(p)            (p)->Release()
  1617  /*** IDirectInputDevice methods ***/
  1618  #define IDirectInputDevice_GetCapabilities(p,a)       (p)->GetCapabilities(a)
  1619  #define IDirectInputDevice_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
  1620  #define IDirectInputDevice_GetProperty(p,a,b)         (p)->GetProperty(a,b)
  1621  #define IDirectInputDevice_SetProperty(p,a,b)         (p)->SetProperty(a,b)
  1622  #define IDirectInputDevice_Acquire(p)                 (p)->Acquire()
  1623  #define IDirectInputDevice_Unacquire(p)               (p)->Unacquire()
  1624  #define IDirectInputDevice_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
  1625  #define IDirectInputDevice_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
  1626  #define IDirectInputDevice_SetDataFormat(p,a)         (p)->SetDataFormat(a)
  1627  #define IDirectInputDevice_SetEventNotification(p,a)  (p)->SetEventNotification(a)
  1628  #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1629  #define IDirectInputDevice_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
  1630  #define IDirectInputDevice_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
  1631  #define IDirectInputDevice_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
  1632  #define IDirectInputDevice_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
  1633  #endif
  1634  
  1635  
  1636  #if (DIRECTINPUT_VERSION >= 0x0500)
  1637  /*****************************************************************************
  1638   * IDirectInputDevice2A interface
  1639   */
  1640  #undef INTERFACE
  1641  #define INTERFACE IDirectInputDevice2A
  1642  DECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA)
  1643  {
  1644      /*** IUnknown methods ***/
  1645      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1646      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1647      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1648      /*** IDirectInputDeviceA methods ***/
  1649      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1650      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1651      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1652      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1653      STDMETHOD(Acquire)(THIS) PURE;
  1654      STDMETHOD(Unacquire)(THIS) PURE;
  1655      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1656      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1657      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1658      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1659      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1660      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1661      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
  1662      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1663      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1664      /*** IDirectInputDevice2A methods ***/
  1665      STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
  1666      STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
  1667      STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
  1668      STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
  1669      STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
  1670      STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
  1671      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
  1672      STDMETHOD(Poll)(THIS) PURE;
  1673      STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
  1674  };
  1675  
  1676  /*****************************************************************************
  1677   * IDirectInputDevice2W interface
  1678   */
  1679  #undef INTERFACE
  1680  #define INTERFACE IDirectInputDevice2W
  1681  DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)
  1682  {
  1683      /*** IUnknown methods ***/
  1684      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1685      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1686      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1687      /*** IDirectInputDeviceW methods ***/
  1688      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1689      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1690      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1691      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1692      STDMETHOD(Acquire)(THIS) PURE;
  1693      STDMETHOD(Unacquire)(THIS) PURE;
  1694      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1695      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1696      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1697      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1698      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1699      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1700      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
  1701      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1702      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1703      /*** IDirectInputDevice2W methods ***/
  1704      STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
  1705      STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
  1706      STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
  1707      STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
  1708      STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
  1709      STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
  1710      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
  1711      STDMETHOD(Poll)(THIS) PURE;
  1712      STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
  1713  };
  1714  
  1715  #if !defined(__cplusplus) || defined(CINTERFACE)
  1716  /*** IUnknown methods ***/
  1717  #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1718  #define IDirectInputDevice2_AddRef(p)             (p)->lpVtbl->AddRef(p)
  1719  #define IDirectInputDevice2_Release(p)            (p)->lpVtbl->Release(p)
  1720  /*** IDirectInputDevice methods ***/
  1721  #define IDirectInputDevice2_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
  1722  #define IDirectInputDevice2_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
  1723  #define IDirectInputDevice2_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
  1724  #define IDirectInputDevice2_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
  1725  #define IDirectInputDevice2_Acquire(p)                 (p)->lpVtbl->Acquire(p)
  1726  #define IDirectInputDevice2_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
  1727  #define IDirectInputDevice2_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
  1728  #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1729  #define IDirectInputDevice2_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
  1730  #define IDirectInputDevice2_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
  1731  #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1732  #define IDirectInputDevice2_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1733  #define IDirectInputDevice2_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
  1734  #define IDirectInputDevice2_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
  1735  #define IDirectInputDevice2_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
  1736  /*** IDirectInputDevice2 methods ***/
  1737  #define IDirectInputDevice2_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  1738  #define IDirectInputDevice2_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)
  1739  #define IDirectInputDevice2_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)
  1740  #define IDirectInputDevice2_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)
  1741  #define IDirectInputDevice2_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  1742  #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  1743  #define IDirectInputDevice2_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)
  1744  #define IDirectInputDevice2_Poll(p)                           (p)->lpVtbl->Poll(p)
  1745  #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  1746  #else
  1747  /*** IUnknown methods ***/
  1748  #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1749  #define IDirectInputDevice2_AddRef(p)             (p)->AddRef()
  1750  #define IDirectInputDevice2_Release(p)            (p)->Release()
  1751  /*** IDirectInputDevice methods ***/
  1752  #define IDirectInputDevice2_GetCapabilities(p,a)       (p)->GetCapabilities(a)
  1753  #define IDirectInputDevice2_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
  1754  #define IDirectInputDevice2_GetProperty(p,a,b)         (p)->GetProperty(a,b)
  1755  #define IDirectInputDevice2_SetProperty(p,a,b)         (p)->SetProperty(a,b)
  1756  #define IDirectInputDevice2_Acquire(p)                 (p)->Acquire()
  1757  #define IDirectInputDevice2_Unacquire(p)               (p)->Unacquire()
  1758  #define IDirectInputDevice2_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
  1759  #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
  1760  #define IDirectInputDevice2_SetDataFormat(p,a)         (p)->SetDataFormat(a)
  1761  #define IDirectInputDevice2_SetEventNotification(p,a)  (p)->SetEventNotification(a)
  1762  #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1763  #define IDirectInputDevice2_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
  1764  #define IDirectInputDevice2_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
  1765  #define IDirectInputDevice2_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
  1766  #define IDirectInputDevice2_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
  1767  /*** IDirectInputDevice2 methods ***/
  1768  #define IDirectInputDevice2_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)
  1769  #define IDirectInputDevice2_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)
  1770  #define IDirectInputDevice2_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)
  1771  #define IDirectInputDevice2_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)
  1772  #define IDirectInputDevice2_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)
  1773  #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  1774  #define IDirectInputDevice2_Escape(p,a)                       (p)->Escape(a)
  1775  #define IDirectInputDevice2_Poll(p)                           (p)->Poll()
  1776  #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)
  1777  #endif
  1778  #endif /* DI5 */
  1779  
  1780  #if DIRECTINPUT_VERSION >= 0x0700
  1781  /*****************************************************************************
  1782   * IDirectInputDevice7A interface
  1783   */
  1784  #undef INTERFACE
  1785  #define INTERFACE IDirectInputDevice7A
  1786  DECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A)
  1787  {
  1788      /*** IUnknown methods ***/
  1789      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1790      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1791      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1792      /*** IDirectInputDeviceA methods ***/
  1793      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1794      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1795      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1796      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1797      STDMETHOD(Acquire)(THIS) PURE;
  1798      STDMETHOD(Unacquire)(THIS) PURE;
  1799      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1800      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1801      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1802      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1803      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1804      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1805      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
  1806      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1807      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1808      /*** IDirectInputDevice2A methods ***/
  1809      STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
  1810      STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
  1811      STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
  1812      STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
  1813      STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
  1814      STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
  1815      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
  1816      STDMETHOD(Poll)(THIS) PURE;
  1817      STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
  1818      /*** IDirectInputDevice7A methods ***/
  1819      STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
  1820      STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
  1821  };
  1822  
  1823  /*****************************************************************************
  1824   * IDirectInputDevice7W interface
  1825   */
  1826  #undef INTERFACE
  1827  #define INTERFACE IDirectInputDevice7W
  1828  DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)
  1829  {
  1830      /*** IUnknown methods ***/
  1831      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1832      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1833      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1834      /*** IDirectInputDeviceW methods ***/
  1835      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1836      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1837      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1838      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1839      STDMETHOD(Acquire)(THIS) PURE;
  1840      STDMETHOD(Unacquire)(THIS) PURE;
  1841      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1842      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1843      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1844      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1845      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1846      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1847      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
  1848      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1849      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1850      /*** IDirectInputDevice2W methods ***/
  1851      STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
  1852      STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
  1853      STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
  1854      STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
  1855      STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
  1856      STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
  1857      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
  1858      STDMETHOD(Poll)(THIS) PURE;
  1859      STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
  1860      /*** IDirectInputDevice7W methods ***/
  1861      STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
  1862      STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
  1863  };
  1864  
  1865  #if !defined(__cplusplus) || defined(CINTERFACE)
  1866  /*** IUnknown methods ***/
  1867  #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1868  #define IDirectInputDevice7_AddRef(p)             (p)->lpVtbl->AddRef(p)
  1869  #define IDirectInputDevice7_Release(p)            (p)->lpVtbl->Release(p)
  1870  /*** IDirectInputDevice methods ***/
  1871  #define IDirectInputDevice7_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
  1872  #define IDirectInputDevice7_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
  1873  #define IDirectInputDevice7_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
  1874  #define IDirectInputDevice7_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
  1875  #define IDirectInputDevice7_Acquire(p)                 (p)->lpVtbl->Acquire(p)
  1876  #define IDirectInputDevice7_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
  1877  #define IDirectInputDevice7_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
  1878  #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1879  #define IDirectInputDevice7_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
  1880  #define IDirectInputDevice7_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
  1881  #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1882  #define IDirectInputDevice7_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1883  #define IDirectInputDevice7_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
  1884  #define IDirectInputDevice7_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
  1885  #define IDirectInputDevice7_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
  1886  /*** IDirectInputDevice2 methods ***/
  1887  #define IDirectInputDevice7_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  1888  #define IDirectInputDevice7_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)
  1889  #define IDirectInputDevice7_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)
  1890  #define IDirectInputDevice7_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)
  1891  #define IDirectInputDevice7_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  1892  #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  1893  #define IDirectInputDevice7_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)
  1894  #define IDirectInputDevice7_Poll(p)                           (p)->lpVtbl->Poll(p)
  1895  #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  1896  /*** IDirectInputDevice7 methods ***/
  1897  #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
  1898  #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
  1899  #else
  1900  /*** IUnknown methods ***/
  1901  #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1902  #define IDirectInputDevice7_AddRef(p)             (p)->AddRef()
  1903  #define IDirectInputDevice7_Release(p)            (p)->Release()
  1904  /*** IDirectInputDevice methods ***/
  1905  #define IDirectInputDevice7_GetCapabilities(p,a)       (p)->GetCapabilities(a)
  1906  #define IDirectInputDevice7_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
  1907  #define IDirectInputDevice7_GetProperty(p,a,b)         (p)->GetProperty(a,b)
  1908  #define IDirectInputDevice7_SetProperty(p,a,b)         (p)->SetProperty(a,b)
  1909  #define IDirectInputDevice7_Acquire(p)                 (p)->Acquire()
  1910  #define IDirectInputDevice7_Unacquire(p)               (p)->Unacquire()
  1911  #define IDirectInputDevice7_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
  1912  #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
  1913  #define IDirectInputDevice7_SetDataFormat(p,a)         (p)->SetDataFormat(a)
  1914  #define IDirectInputDevice7_SetEventNotification(p,a)  (p)->SetEventNotification(a)
  1915  #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1916  #define IDirectInputDevice7_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
  1917  #define IDirectInputDevice7_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
  1918  #define IDirectInputDevice7_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
  1919  #define IDirectInputDevice7_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
  1920  /*** IDirectInputDevice2 methods ***/
  1921  #define IDirectInputDevice7_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)
  1922  #define IDirectInputDevice7_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)
  1923  #define IDirectInputDevice7_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)
  1924  #define IDirectInputDevice7_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)
  1925  #define IDirectInputDevice7_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)
  1926  #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  1927  #define IDirectInputDevice7_Escape(p,a)                       (p)->Escape(a)
  1928  #define IDirectInputDevice7_Poll(p)                           (p)->Poll()
  1929  #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)
  1930  /*** IDirectInputDevice7 methods ***/
  1931  #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
  1932  #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
  1933  #endif
  1934  
  1935  #endif /* DI7 */
  1936  
  1937  #if DIRECTINPUT_VERSION >= 0x0800
  1938  /*****************************************************************************
  1939   * IDirectInputDevice8A interface
  1940   */
  1941  #undef INTERFACE
  1942  #define INTERFACE IDirectInputDevice8A
  1943  DECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A)
  1944  {
  1945      /*** IUnknown methods ***/
  1946      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1947      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1948      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1949      /*** IDirectInputDeviceA methods ***/
  1950      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1951      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1952      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1953      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  1954      STDMETHOD(Acquire)(THIS) PURE;
  1955      STDMETHOD(Unacquire)(THIS) PURE;
  1956      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  1957      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  1958      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  1959      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  1960      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  1961      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  1962      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
  1963      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  1964      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  1965      /*** IDirectInputDevice2A methods ***/
  1966      STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
  1967      STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
  1968      STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
  1969      STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
  1970      STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
  1971      STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
  1972      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
  1973      STDMETHOD(Poll)(THIS) PURE;
  1974      STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
  1975      /*** IDirectInputDevice7A methods ***/
  1976      STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
  1977      STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
  1978      /*** IDirectInputDevice8A methods ***/
  1979      STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;
  1980      STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;
  1981      STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) PURE;
  1982  };
  1983  
  1984  /*****************************************************************************
  1985   * IDirectInputDevice8W interface
  1986   */
  1987  #undef INTERFACE
  1988  #define INTERFACE IDirectInputDevice8W
  1989  DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)
  1990  {
  1991      /*** IUnknown methods ***/
  1992      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  1993      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1994      STDMETHOD_(ULONG,Release)(THIS) PURE;
  1995      /*** IDirectInputDeviceW methods ***/
  1996      STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
  1997      STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  1998      STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
  1999      STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
  2000      STDMETHOD(Acquire)(THIS) PURE;
  2001      STDMETHOD(Unacquire)(THIS) PURE;
  2002      STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
  2003      STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
  2004      STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
  2005      STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
  2006      STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
  2007      STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
  2008      STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
  2009      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2010      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
  2011      /*** IDirectInputDevice2W methods ***/
  2012      STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
  2013      STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
  2014      STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
  2015      STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
  2016      STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
  2017      STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
  2018      STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
  2019      STDMETHOD(Poll)(THIS) PURE;
  2020      STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
  2021      /*** IDirectInputDevice7W methods ***/
  2022      STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
  2023      STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
  2024      /*** IDirectInputDevice8W methods ***/
  2025      STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;
  2026      STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;
  2027      STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) PURE;
  2028  };
  2029  
  2030  #if !defined(__cplusplus) || defined(CINTERFACE)
  2031  /*** IUnknown methods ***/
  2032  #define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  2033  #define IDirectInputDevice8_AddRef(p)             (p)->lpVtbl->AddRef(p)
  2034  #define IDirectInputDevice8_Release(p)            (p)->lpVtbl->Release(p)
  2035  /*** IDirectInputDevice methods ***/
  2036  #define IDirectInputDevice8_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
  2037  #define IDirectInputDevice8_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
  2038  #define IDirectInputDevice8_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
  2039  #define IDirectInputDevice8_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
  2040  #define IDirectInputDevice8_Acquire(p)                 (p)->lpVtbl->Acquire(p)
  2041  #define IDirectInputDevice8_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
  2042  #define IDirectInputDevice8_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
  2043  #define IDirectInputDevice8_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  2044  #define IDirectInputDevice8_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
  2045  #define IDirectInputDevice8_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
  2046  #define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  2047  #define IDirectInputDevice8_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  2048  #define IDirectInputDevice8_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
  2049  #define IDirectInputDevice8_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
  2050  #define IDirectInputDevice8_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
  2051  /*** IDirectInputDevice2 methods ***/
  2052  #define IDirectInputDevice8_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  2053  #define IDirectInputDevice8_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)
  2054  #define IDirectInputDevice8_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)
  2055  #define IDirectInputDevice8_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)
  2056  #define IDirectInputDevice8_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  2057  #define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  2058  #define IDirectInputDevice8_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)
  2059  #define IDirectInputDevice8_Poll(p)                           (p)->lpVtbl->Poll(p)
  2060  #define IDirectInputDevice8_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  2061  /*** IDirectInputDevice7 methods ***/
  2062  #define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
  2063  #define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
  2064  /*** IDirectInputDevice8 methods ***/
  2065  #define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c)
  2066  #define IDirectInputDevice8_SetActionMap(p,a,b,c)   (p)->lpVtbl->SetActionMap(p,a,b,c)
  2067  #define IDirectInputDevice8_GetImageInfo(p,a)       (p)->lpVtbl->GetImageInfo(p,a)
  2068  #else
  2069  /*** IUnknown methods ***/
  2070  #define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  2071  #define IDirectInputDevice8_AddRef(p)             (p)->AddRef()
  2072  #define IDirectInputDevice8_Release(p)            (p)->Release()
  2073  /*** IDirectInputDevice methods ***/
  2074  #define IDirectInputDevice8_GetCapabilities(p,a)       (p)->GetCapabilities(a)
  2075  #define IDirectInputDevice8_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
  2076  #define IDirectInputDevice8_GetProperty(p,a,b)         (p)->GetProperty(a,b)
  2077  #define IDirectInputDevice8_SetProperty(p,a,b)         (p)->SetProperty(a,b)
  2078  #define IDirectInputDevice8_Acquire(p)                 (p)->Acquire()
  2079  #define IDirectInputDevice8_Unacquire(p)               (p)->Unacquire()
  2080  #define IDirectInputDevice8_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
  2081  #define IDirectInputDevice8_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
  2082  #define IDirectInputDevice8_SetDataFormat(p,a)         (p)->SetDataFormat(a)
  2083  #define IDirectInputDevice8_SetEventNotification(p,a)  (p)->SetEventNotification(a)
  2084  #define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  2085  #define IDirectInputDevice8_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
  2086  #define IDirectInputDevice8_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
  2087  #define IDirectInputDevice8_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
  2088  #define IDirectInputDevice8_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
  2089  /*** IDirectInputDevice2 methods ***/
  2090  #define IDirectInputDevice8_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)
  2091  #define IDirectInputDevice8_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)
  2092  #define IDirectInputDevice8_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)
  2093  #define IDirectInputDevice8_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)
  2094  #define IDirectInputDevice8_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)
  2095  #define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  2096  #define IDirectInputDevice8_Escape(p,a)                       (p)->Escape(a)
  2097  #define IDirectInputDevice8_Poll(p)                           (p)->Poll()
  2098  #define IDirectInputDevice8_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)
  2099  /*** IDirectInputDevice7 methods ***/
  2100  #define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
  2101  #define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
  2102  /*** IDirectInputDevice8 methods ***/
  2103  #define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c)
  2104  #define IDirectInputDevice8_SetActionMap(p,a,b,c)   (p)->SetActionMap(a,b,c)
  2105  #define IDirectInputDevice8_GetImageInfo(p,a)       (p)->GetImageInfo(a)
  2106  #endif
  2107  
  2108  #endif /* DI8 */
  2109  
  2110  /* "Standard" Mouse report... */
  2111  typedef struct DIMOUSESTATE {
  2112    LONG lX;
  2113    LONG lY;
  2114    LONG lZ;
  2115    BYTE rgbButtons[4];
  2116  } DIMOUSESTATE;
  2117  
  2118  #if DIRECTINPUT_VERSION >= 0x0700
  2119  /* "Standard" Mouse report for DInput 7... */
  2120  typedef struct DIMOUSESTATE2 {
  2121    LONG lX;
  2122    LONG lY;
  2123    LONG lZ;
  2124    BYTE rgbButtons[8];
  2125  } DIMOUSESTATE2;
  2126  #endif /* DI7 */
  2127  
  2128  #define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)
  2129  #define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)
  2130  #define DIMOFS_Z        FIELD_OFFSET(DIMOUSESTATE, lZ)
  2131  #define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)
  2132  #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
  2133  #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
  2134  #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
  2135  #if DIRECTINPUT_VERSION >= 0x0700
  2136  #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
  2137  #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
  2138  #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
  2139  #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
  2140  #endif /* DI7 */
  2141  
  2142  #ifdef __cplusplus
  2143  extern "C" {
  2144  #endif
  2145  extern const DIDATAFORMAT c_dfDIMouse;
  2146  #if DIRECTINPUT_VERSION >= 0x0700
  2147  extern const DIDATAFORMAT c_dfDIMouse2; /* DX 7 */
  2148  #endif /* DI7 */
  2149  extern const DIDATAFORMAT c_dfDIKeyboard;
  2150  #if DIRECTINPUT_VERSION >= 0x0500
  2151  extern const DIDATAFORMAT c_dfDIJoystick;
  2152  extern const DIDATAFORMAT c_dfDIJoystick2;
  2153  #endif /* DI5 */
  2154  #ifdef __cplusplus
  2155  };
  2156  #endif
  2157  
  2158  /*****************************************************************************
  2159   * IDirectInputA interface
  2160   */
  2161  #undef INTERFACE
  2162  #define INTERFACE IDirectInputA
  2163  DECLARE_INTERFACE_(IDirectInputA,IUnknown)
  2164  {
  2165      /*** IUnknown methods ***/
  2166      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2167      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2168      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2169      /*** IDirectInputA methods ***/
  2170      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2171      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2172      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2173      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2174      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2175  };
  2176  
  2177  /*****************************************************************************
  2178   * IDirectInputW interface
  2179   */
  2180  #undef INTERFACE
  2181  #define INTERFACE IDirectInputW
  2182  DECLARE_INTERFACE_(IDirectInputW,IUnknown)
  2183  {
  2184      /*** IUnknown methods ***/
  2185      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2186      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2187      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2188      /*** IDirectInputW methods ***/
  2189      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2190      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2191      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2192      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2193      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2194  };
  2195  
  2196  #if !defined(__cplusplus) || defined(CINTERFACE)
  2197  /*** IUnknown methods ***/
  2198  #define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  2199  #define IDirectInput_AddRef(p)             (p)->lpVtbl->AddRef(p)
  2200  #define IDirectInput_Release(p)            (p)->lpVtbl->Release(p)
  2201  /*** IDirectInput methods ***/
  2202  #define IDirectInput_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)
  2203  #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  2204  #define IDirectInput_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)
  2205  #define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  2206  #define IDirectInput_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
  2207  #else
  2208  /*** IUnknown methods ***/
  2209  #define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  2210  #define IDirectInput_AddRef(p)             (p)->AddRef()
  2211  #define IDirectInput_Release(p)            (p)->Release()
  2212  /*** IDirectInput methods ***/
  2213  #define IDirectInput_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)
  2214  #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  2215  #define IDirectInput_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)
  2216  #define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  2217  #define IDirectInput_Initialize(p,a,b)      (p)->Initialize(a,b)
  2218  #endif
  2219  
  2220  /*****************************************************************************
  2221   * IDirectInput2A interface
  2222   */
  2223  #undef INTERFACE
  2224  #define INTERFACE IDirectInput2A
  2225  DECLARE_INTERFACE_(IDirectInput2A,IDirectInputA)
  2226  {
  2227      /*** IUnknown methods ***/
  2228      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2229      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2230      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2231      /*** IDirectInputA methods ***/
  2232      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2233      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2234      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2235      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2236      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2237      /*** IDirectInput2A methods ***/
  2238      STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
  2239  };
  2240  
  2241  /*****************************************************************************
  2242   * IDirectInput2W interface
  2243   */
  2244  #undef INTERFACE
  2245  #define INTERFACE IDirectInput2W
  2246  DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)
  2247  {
  2248      /*** IUnknown methods ***/
  2249      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2250      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2251      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2252      /*** IDirectInputW methods ***/
  2253      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2254      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2255      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2256      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2257      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2258      /*** IDirectInput2W methods ***/
  2259      STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
  2260  };
  2261  
  2262  #if !defined(__cplusplus) || defined(CINTERFACE)
  2263  /*** IUnknown methods ***/
  2264  #define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  2265  #define IDirectInput2_AddRef(p)             (p)->lpVtbl->AddRef(p)
  2266  #define IDirectInput2_Release(p)            (p)->lpVtbl->Release(p)
  2267  /*** IDirectInput methods ***/
  2268  #define IDirectInput2_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)
  2269  #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  2270  #define IDirectInput2_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)
  2271  #define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  2272  #define IDirectInput2_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
  2273  /*** IDirectInput2 methods ***/
  2274  #define IDirectInput2_FindDevice(p,a,b,c)    (p)->lpVtbl->FindDevice(p,a,b,c)
  2275  #else
  2276  /*** IUnknown methods ***/
  2277  #define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  2278  #define IDirectInput2_AddRef(p)             (p)->AddRef()
  2279  #define IDirectInput2_Release(p)            (p)->Release()
  2280  /*** IDirectInput methods ***/
  2281  #define IDirectInput2_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)
  2282  #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  2283  #define IDirectInput2_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)
  2284  #define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  2285  #define IDirectInput2_Initialize(p,a,b)      (p)->Initialize(a,b)
  2286  /*** IDirectInput2 methods ***/
  2287  #define IDirectInput2_FindDevice(p,a,b,c)    (p)->FindDevice(a,b,c)
  2288  #endif
  2289  
  2290  /*****************************************************************************
  2291   * IDirectInput7A interface
  2292   */
  2293  #undef INTERFACE
  2294  #define INTERFACE IDirectInput7A
  2295  DECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A)
  2296  {
  2297      /*** IUnknown methods ***/
  2298      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2299      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2300      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2301      /*** IDirectInputA methods ***/
  2302      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2303      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2304      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2305      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2306      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2307      /*** IDirectInput2A methods ***/
  2308      STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
  2309      /*** IDirectInput7A methods ***/
  2310      STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;
  2311  };
  2312  
  2313  /*****************************************************************************
  2314   * IDirectInput7W interface
  2315   */
  2316  #undef INTERFACE
  2317  #define INTERFACE IDirectInput7W
  2318  DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)
  2319  {
  2320      /*** IUnknown methods ***/
  2321      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2322      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2323      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2324      /*** IDirectInputW methods ***/
  2325      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2326      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2327      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2328      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2329      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2330      /*** IDirectInput2W methods ***/
  2331      STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
  2332      /*** IDirectInput7W methods ***/
  2333      STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;
  2334  };
  2335  
  2336  #if !defined(__cplusplus) || defined(CINTERFACE)
  2337  /*** IUnknown methods ***/
  2338  #define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  2339  #define IDirectInput7_AddRef(p)             (p)->lpVtbl->AddRef(p)
  2340  #define IDirectInput7_Release(p)            (p)->lpVtbl->Release(p)
  2341  /*** IDirectInput methods ***/
  2342  #define IDirectInput7_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)
  2343  #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  2344  #define IDirectInput7_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)
  2345  #define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  2346  #define IDirectInput7_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
  2347  /*** IDirectInput2 methods ***/
  2348  #define IDirectInput7_FindDevice(p,a,b,c)    (p)->lpVtbl->FindDevice(p,a,b,c)
  2349  /*** IDirectInput7 methods ***/
  2350  #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)
  2351  #else
  2352  /*** IUnknown methods ***/
  2353  #define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  2354  #define IDirectInput7_AddRef(p)             (p)->AddRef()
  2355  #define IDirectInput7_Release(p)            (p)->Release()
  2356  /*** IDirectInput methods ***/
  2357  #define IDirectInput7_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)
  2358  #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  2359  #define IDirectInput7_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)
  2360  #define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  2361  #define IDirectInput7_Initialize(p,a,b)      (p)->Initialize(a,b)
  2362  /*** IDirectInput2 methods ***/
  2363  #define IDirectInput7_FindDevice(p,a,b,c)    (p)->FindDevice(a,b,c)
  2364  /*** IDirectInput7 methods ***/
  2365  #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)
  2366  #endif
  2367  
  2368  
  2369  #if DIRECTINPUT_VERSION >= 0x0800
  2370  /*****************************************************************************
  2371   * IDirectInput8A interface
  2372   */
  2373  #undef INTERFACE
  2374  #define INTERFACE IDirectInput8A
  2375  DECLARE_INTERFACE_(IDirectInput8A,IUnknown)
  2376  {
  2377      /*** IUnknown methods ***/
  2378      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2379      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2380      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2381      /*** IDirectInput8A methods ***/
  2382      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8A *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2383      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2384      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2385      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2386      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2387      STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
  2388      STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2389      STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;
  2390  };
  2391  
  2392  /*****************************************************************************
  2393   * IDirectInput8W interface
  2394   */
  2395  #undef INTERFACE
  2396  #define INTERFACE IDirectInput8W
  2397  DECLARE_INTERFACE_(IDirectInput8W,IUnknown)
  2398  {
  2399      /*** IUnknown methods ***/
  2400      STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
  2401      STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  2402      STDMETHOD_(ULONG,Release)(THIS) PURE;
  2403      /*** IDirectInput8W methods ***/
  2404      STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8W *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
  2405      STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2406      STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
  2407      STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
  2408      STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
  2409      STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
  2410      STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR ptszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
  2411      STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;
  2412  };
  2413  #undef INTERFACE
  2414  
  2415  #if !defined(__cplusplus) || defined(CINTERFACE)
  2416  /*** IUnknown methods ***/
  2417  #define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  2418  #define IDirectInput8_AddRef(p)             (p)->lpVtbl->AddRef(p)
  2419  #define IDirectInput8_Release(p)            (p)->lpVtbl->Release(p)
  2420  /*** IDirectInput8 methods ***/
  2421  #define IDirectInput8_CreateDevice(p,a,b,c)       (p)->lpVtbl->CreateDevice(p,a,b,c)
  2422  #define IDirectInput8_EnumDevices(p,a,b,c,d)      (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  2423  #define IDirectInput8_GetDeviceStatus(p,a)        (p)->lpVtbl->GetDeviceStatus(p,a)
  2424  #define IDirectInput8_RunControlPanel(p,a,b)      (p)->lpVtbl->RunControlPanel(p,a,b)
  2425  #define IDirectInput8_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)
  2426  #define IDirectInput8_FindDevice(p,a,b,c)         (p)->lpVtbl->FindDevice(p,a,b,c)
  2427  #define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e)
  2428  #define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d)
  2429  #else
  2430  /*** IUnknown methods ***/
  2431  #define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  2432  #define IDirectInput8_AddRef(p)             (p)->AddRef()
  2433  #define IDirectInput8_Release(p)            (p)->Release()
  2434  /*** IDirectInput8 methods ***/
  2435  #define IDirectInput8_CreateDevice(p,a,b,c)       (p)->CreateDevice(a,b,c)
  2436  #define IDirectInput8_EnumDevices(p,a,b,c,d)      (p)->EnumDevices(a,b,c,d)
  2437  #define IDirectInput8_GetDeviceStatus(p,a)        (p)->GetDeviceStatus(a)
  2438  #define IDirectInput8_RunControlPanel(p,a,b)      (p)->RunControlPanel(a,b)
  2439  #define IDirectInput8_Initialize(p,a,b)           (p)->Initialize(a,b)
  2440  #define IDirectInput8_FindDevice(p,a,b,c)         (p)->FindDevice(a,b,c)
  2441  #define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e)
  2442  #define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d)
  2443  #endif
  2444  
  2445  #endif /* DI8 */
  2446  
  2447  /* Export functions */
  2448  
  2449  #ifdef __cplusplus
  2450  extern "C" {
  2451  #endif
  2452  
  2453  #if DIRECTINPUT_VERSION >= 0x0800
  2454  HRESULT WINAPI DirectInput8Create(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
  2455  #else /* DI < 8 */
  2456  HRESULT WINAPI DirectInputCreateA(HINSTANCE,DWORD,LPDIRECTINPUTA *,LPUNKNOWN);
  2457  HRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN);
  2458  #define DirectInputCreate WINELIB_NAME_AW(DirectInputCreate)
  2459  
  2460  HRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
  2461  #endif /* DI8 */
  2462  
  2463  #ifdef __cplusplus
  2464  };
  2465  #endif
  2466  
  2467  #endif /* __DINPUT_INCLUDED__ */