
//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1998 - 1999
//
//  File:       dii.idl
//
//--------------------------------------------------------------------------

// TODO evaluate if these issues are important
// NOTE no DICUSTOMFORCE STRUCTURE
// NOTE need some way to fill out DIFILEEFFECT

// NOTE we are not using DIPROPPOINTER do we need to be
// NOTE we are not using DIPROPCAL do we need to be
// NOTE we are not using DIPROPGUIDANDPATH do we need to be
// NOTE we are not using DIPROPGUIDSTRING do we need to be
// NOTE we are not using DIPROPCPOINTS do we need to be
// NOTE we are not using CPOINT do we need to be
 

#ifdef VB_ONLY

	#define I_dxj_DirectInput8 			DirectInput8 
	#define I_dxj_DirectInputDeviceInstance8 	DirectInputDeviceInstance8 
	#define I_dxj_DirectInputDeviceObjectInstance 	DirectInputDeviceObjectInstance 
	#define I_dxj_DirectInputDevice8 		DirectInputDevice8 
	#define I_dxj_DirectInputEffect 		DirectInputEffect 
	#define I_dxj_DirectInputEnumEffects 		DirectInputEnumEffects 
	#define I_dxj_DIEnumDeviceObjects 		DirectInputEnumDeviceObjects 
	#define I_dxj_DIEnumDevices8 			DirectInputEnumDevices8 


	#define	DIDEVCAPS_CDESC 			DIDEVCAPS
	#define DIDEVICEOBJECTDATA_CDESC		DIDEVICEOBJECTDATA
	#define DIPROPRANGE_CDESC 			DIPROPRANGE
	#define DIPROPLONG_CDESC 			DIPROPLONG
	#define DIOBJECTDATAFORMAT_CDESC 		DIOBJECTDATAFORMAT
	#define DIDATAFORMAT_CDESC 			DIDATAFORMAT
	#define DIACTION_CDESC 				DIACTION
	#define DIACTIONFORMAT_CDESC			DIACTIONFORMAT
	#define DIMOUSESTATE_CDESC			DIMOUSESTATE
	#define DIMOUSESTATE2_CDESC			DIMOUSESTATE2
	#define DIKEYBOARDSTATE_CDESC			DIKEYBOARDSTATE
	#define DIJOYSTATE_CDESC			DIJOYSTATE
	#define DIJOYSTATE2_CDESC			DIJOYSTATE2
	#define DICONDITION_CDESC			DICONDITION
	#define DICONSTANTFORCE_CDESC			DICONSTANTFORCE
	#define DIEFFECT_CDESC				DIEFFECT
	#define DIENVELOPE_CDESC			DIENVELOPE
	#define DIPERIODICFORCE_CDESC			DIPERIODICFORCE
	#define DIRAMPFORCE_CDESC			DIRAMPFORCE  
	#define DICOLORSET_CDESC			DICOLORSET
	#define DICONFIGUREDEVICESPARAMS_CDESC		DICONFIGUREDEVICESPARAMS
	#define DIDEVICEIMAGEINFO_CDESC			DIDEVICEIMAGEINFO
	#define DIDEVICEIMAGEINFOHEADER_CDESC		DIDEVICEIMAGEINFOHEADER
	#define DIPROPGUIDANDPATH_CDESC			DIPROPGUIDANDPATH
	#define DIPROPSTRING_CDESC			DIPROPSTRING
	
	//Bug #41819
	#define CPOINT_CDESC				CPOINT
	#define DIPROPCPOINTS_CDESC			DIPROPCPOINTS
	#define DIPROPPOINTER_CDESC			DIPROPPOINTER
	//End Bug #41819

	//Renamed for VB readability

	#define createDevice				CreateDevice
	#define getDIDevices				GetDIDevices
	#define getDevicesBySemantics			GetDevicesBySemantics
	#define runControlPanel				RunControlPanel
	#define getGuidInstance				GetGuidInstance
	#define getGuidProduct				GetGuidProduct
	#define getProductName				GetProductName
	#define getInstanceName				GetInstanceName
	#define getGuidFFDriver				GetGuidFFDriver
	#define getUsagePage				GetUsagePage
	#define getUsage				GetUsage
	#define getDevType				GetDevType
	#define getGuidType				GetGuidType
	#define getOfs					GetOfs
	#define getType					GetType
	#define getFlags				GetFlags
	#define getName					GetName
	#define getCollectionNumber			GetCollectionNumber
	#define getDesignatorIndex			GetDesignatorIndex
	#define getUsagePage				GetUsagePage
	#define getUsage				GetUsage
	#define getDimension				GetDimension
	#define getExponent				GetExponent
	#define acquire					Acquire
	#define getDeviceObjectsEnum			GetDeviceObjectsEnum
	#define getCapabilities				GetCapabilities
	#define getDeviceData				GetDeviceData
	#define getDeviceInfo				GetDeviceInfo
	#define getDeviceStateKeyboard			GetDeviceStateKeyboard
	#define getDeviceStateMouse			GetDeviceStateMouse
	#define getDeviceStateMouse2			GetDeviceStateMouse2
	#define getDeviceStateJoystick			GetDeviceStateJoystick
	#define getDeviceStateJoystick2			GetDeviceStateJoystick2
	#define getDeviceState				GetDeviceState
	#define getObjectInfo				GetObjectInfo
	#define getProperty				GetProperty
	#define setCooperativeLevel			SetCooperativeLevel
	#define setCommonDataFormat			SetCommonDataFormat
	#define setDataFormat				SetDataFormat
	#define setEventNotification			SetEventNotification
	#define setProperty				SetProperty
	#define unacquire				Unacquire
	#define poll					Poll
	#define createEffect				CreateEffect
	#define createCustomEffect			CreateCustomEffect
	#define sendDeviceData				SendDeviceData
	#define sendForceFeedbackCommand		SendForceFeedbackCommand
	#define getForceFeedbackState			GetForceFeedbackState
	#define getEffectsEnum				GetEffectsEnum
	#define download				Download
	#define getEffectGuid				GetEffectGuid
	#define getEffectStatus				GetEffectStatus
	#define start					Start
	#define stop					Stop
	#define unload					Unload
	#define setParameters				SetParameters
	#define getParameters				GetParameters
	#define getCount				GetCount
	#define getEffectGuid				GetEffectGuid
	#define getType					GetType
	#define getStaticParams				GetStaticParams
	#define getDynamicParams			GetDynamicParams
	#define getName					GetName
	#define getItem					GetItem
	  
#endif

#ifdef C_ONLY

	#define CONST_DIENUMDEVICESFLAGS		LONG
	#define CONST_DI8DEVICETYPE			LONG
	#define CONST_DIDFTFLAGS			LONG
	#define CONST_DIDGDDFLAGS			LONG
	#define CONST_DIPHFLAGS			LONG
	#define CONST_DISCLFLAGS			LONG
	#define CONST_DISDDFLAGS			LONG
	#define CONST_DIDEVCAPSFLAGS			LONG
	#define CONST_DIDATAFORMATFLAGS		LONG
	#define CONST_DIDEVICEOBJINSTANCEFLAGS	LONG
	#define CONST_DIPROPERTYFLAGS			LONG
	#define CONST_DIKEYFLAGS			LONG
	#define CONST_DICOMMONDATAFORMATS		LONG
	#define CONST_DICONDITIONFLAGS		LONG

	#define CONST_DINPUTCONSTANTS			LONG
	#define CONST_DISFFCFLAGS			LONG
	#define CONST_DINPUTERR			LONG
	#define CONST_DIEFTFLAGS			LONG
	#define CONST_DIEFFFLAGS			LONG
	#define CONST_DIEPFLAGS			LONG
	#define CONST_DIEGESFLAGS			LONG
	#define CONST_DIGFFSFLAGS			LONG

	#define CONST_DIMOUSEOFS		LONG
	#define CONST_DIJOYSTICKOFS		LONG

#endif 


//For bug #41819
#define MAXCPOINTSNUM_CDESC   			8



    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Input Inteface List
    // 
    ///////////////////////////////////////////////////////////////////////////

    interface I_dxj_DirectInput8;
    interface I_dxj_DirectInputDevice8;
    interface I_dxj_DirectInputEffect;
    interface I_dxj_DirectInputEnumEffects;
    interface I_dxj_DIEnumDevices8;
    interface I_dxj_DIEnumDeviceObjects;
    interface I_dxj_DIEnumCreatedEffectObjects;


    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Input Constants
    // 
    ///////////////////////////////////////////////////////////////////////////


#ifdef VB_ONLY 

	#include "dig.idl"



	//
	// Direct InputString Constants
	//

	[
		dllname("dx8vb.dll")
	]
	module DINPUT8STRINGCONSTANTS
	{
		// key names for address components
		const BSTR DIPROP_AUTOCENTER=L"diprop_autocenter";
		const BSTR DIPROP_AXISMODE=L"diprop_axismode";
		const BSTR DIPROP_BUFFERSIZE=L"diprop_buffersize";
		const BSTR DIPROP_CALIBRATIONMODE=L"diprop_calibrationmode";
		const BSTR DIPROP_DEADZONE=L"diprop_deadzone";
		const BSTR DIPROP_RANGE=L"diprop_range";
		const BSTR DIPROP_SATURATION=L"diprop_saturation";
		const BSTR DIPROP_KEYNAME=L"diprop_keyname";
		const BSTR DIPROP_SCANCODE=L"diprop_scancode";
		
//Added for bug #41819
		const BSTR DIPROP_GRANULARITY		=L"diprop_granularity";
		const BSTR DIPROP_FFGAIN		=L"diprop_ffgain";
		const BSTR DIPROP_FFLOAD		=L"diprop_ffload";
		const BSTR DIPROP_CALIBRATION		=L"diprop_calibration";
		const BSTR DIPROP_GUIDANDPATH		=L"diprop_guidandpath";
		const BSTR DIPROP_INSTANCENAME		=L"diprop_instancename";
		const BSTR DIPROP_PRODUCTNAME		=L"diprop_productname";
		const BSTR DIPROP_JOYSTICKID		=L"diprop_joystickid";
		const BSTR DIPROP_GETPORTDISPLAYNAME	=L"diprop_getportdisplayname";
		const BSTR DIPROP_PHYSICALRANGE		=L"diprop_physicalrange";
		const BSTR DIPROP_LOGICALRANGE 		=L"diprop_logicalrange";
		const BSTR DIPROP_CPOINTS		=L"diprop_cpoints";
		const BSTR DIPROP_APPDATA		=L"diprop_appdata"; 
		
		//const BSTR DIPROP_VIDPID		=L"diprop_vidpid";
		const BSTR DIPROP_USERNAME		=L"diprop_username";
		//const BSTR DIPROP_TYPENAME		=L"diprop_typename";		
//End bug #41819

	};




// pdon asked for removal
//
 [helpcontext(74147)]
 typedef enum CONST_DIEDBSFLAGS {
     DIEDBS_MAPPEDPRI1         = 0x00000001,
     DIEDBS_MAPPEDPRI2         = 0x00000002,
     DIEDBS_RECENTDEVICE       = 0x00000010,
     DIEDBS_NEWDEVICE          = 0x00000020,
 }  CONST_DIEDBSFLAGS;
//
// #define DIEDBS_MAPPEDPRI1         0x00000001
// #define DIEDBS_MAPPEDPRI2         0x00000002
// #define DIEDBS_RECENTDEVICE       0x00000010
// #define DIEDBS_NEWDEVICE          0x00000020




 [helpcontext(84147)]
typedef enum CONST_DIEDBSFLFLAGS {
     DIEDBSFL_ATTACHEDONLY      = 0x00000000,
     DIEDBSFL_THISUSER         =  0x00000010 ,
     DIEDBSFL_FORCEFEEDBACK    =  0x00000100,
     DIEDBSFL_AVAILABLEDEVICES =  0x00001000,
     DIEDBSFL_MULTIMICEKEYBOARDS= 0x00002000,
     DIEDBSFL_NONGAMINGDEVICES =  0x00004000,
     DIEDBSFL_VALID            =  0x00007110,

} CONST_DIEDBSFLFLAGS;


 [helpcontext(84138)]
typedef enum CONST_DIDALFLAGS {
     DIDAL_CENTERED      = 0x00000000,
     DIDAL_LEFTALIGNED   = 0x00000001,
     DIDAL_RIGHTALIGNED  = 0x00000002,
     DIDAL_MIDDLE        = 0x00000000,
     DIDAL_TOPALIGNED    = 0x00000004,
     DIDAL_BOTTOMALIGNED = 0x00000008,
} CONST_DIDALFLAGS;



 [helpcontext(84160)]
typedef enum CONST_DIMAPFLAGS {

//	DIPHYSICAL_KEYBOARD               = 0x81000000,
//	DIPHYSICAL_MOUSE                  = 0x82000000,


// Removed for RC1
//	DIPOV_ANY                         = 0xFF0046FF,
//	DIBUTTON_ANY                      = 0xFF0044FF,
//	DIAXIS_ANY                        = 0xFF0042FF,
//	DIAXIS_ANY_X                      = 0xFF00C2FF,
//	DIAXIS_ANY_Y                      = 0xFF0142FF,
//	DIAXIS_ANY_Z                      = 0xFF01C2FF,
//	DIAXIS_ANY_R                      = 0xFF0242FF,
//	DIAXIS_ANY_U                      = 0xFF02C2FF,
//	DIAXIS_ANY_V                      = 0xFF0342FF,
//	DIAXIS_ANY_A                      = 0xFF03C2FF,
//	DIAXIS_ANY_B                      = 0xFF0442FF,
//	DIAXIS_ANY_C                      = 0xFF04C2FF,


	/*
 	*  "ANY" semantics can be used as a last resort to get mappings for actions 
 	*  that match nothing in the chosen virtual genre.  These semantics will be 
 	*  mapped at a lower priority that virtual genre semantics.  Also, hardware 
 	*  vendors will not be able to provide sensible mappings for these unless 
 	*  they provide application specific mappings.
 	*/
	DIAXIS_ANY_X_1                         = 0xFF00C201 ,
	DIAXIS_ANY_X_2                         = 0xFF00C202 ,
	DIAXIS_ANY_Y_1                         = 0xFF014201 ,
	DIAXIS_ANY_Y_2                         = 0xFF014202 ,
	DIAXIS_ANY_Z_1                         = 0xFF01C201 ,
	DIAXIS_ANY_Z_2                         = 0xFF01C202 ,
	DIAXIS_ANY_R_1                         = 0xFF024201 ,
	DIAXIS_ANY_R_2                         = 0xFF024202 ,
	DIAXIS_ANY_U_1                         = 0xFF02C201 ,
	DIAXIS_ANY_U_2                         = 0xFF02C202 ,
	DIAXIS_ANY_V_1                         = 0xFF034201 ,
	DIAXIS_ANY_V_2                         = 0xFF034202 ,
	DIAXIS_ANY_A_1                         = 0xFF03C201 ,
	DIAXIS_ANY_A_2                         = 0xFF03C202 ,
	DIAXIS_ANY_B_1                         = 0xFF044201 ,
	DIAXIS_ANY_B_2                         = 0xFF044202 ,
	DIAXIS_ANY_C_1                         = 0xFF04C201 ,
	DIAXIS_ANY_C_2                         = 0xFF04C202 ,
	DIAXIS_ANY_S_1                         = 0xFF054201 ,
	DIAXIS_ANY_S_2                         = 0xFF054202 ,

	DIAXIS_ANY_1                            =0xFF004201 ,
	DIAXIS_ANY_2                            =0xFF004202 ,
	DIAXIS_ANY_3                            =0xFF004203 ,
	DIAXIS_ANY_4                            =0xFF004204 ,

	DIPOV_ANY_1                             =0xFF004601 ,
	DIPOV_ANY_2                             =0xFF004602 ,
	DIPOV_ANY_3                             =0xFF004603 ,
	DIPOV_ANY_4                             =0xFF004604 ,

        DIBUTTON_ANY                           = 0xFF004400 ,



} CONST_DIMAPFLAGS;

 [helpcontext(84154)]
typedef enum CONST_DIFEFFLAGS
{
	DIFEF_DEFAULT               =0x00000000,
	DIFEF_INCLUDENONSTANDARD    =0x00000001,
	DIFEF_MODIFYIFNEEDED        =0x00000010
} CONST_DIFEFFLAGS;


 [helpcontext(84140)]
typedef enum CONST_DIDBAMFLAGS {
	DIDBAM_DEFAULT         = 0x00000000,
	DIDBAM_PRESERVE        = 0x00000001,
	DIDBAM_INITIALIZE      = 0x00000002,
	DIDBAM_HWDEFAULTS      = 0x00000004,
} CONST_IDBAMFLAGS;

 [helpcontext(84199)]
typedef enum CONST_DIAFTSFLAGS {
	DIAFTS_NEWDEVICELOW     =0xFFFFFFFF,
	DIAFTS_NEWDEVICEHIGH    =0xFFFFFFFF,
	DIAFTS_UNUSEDDEVICELOW  =0x00000000,
	DIAFTS_UNUSEDDEVICEHIGH =0x00000000,
} CONST_DIAFTSFLAGS;


 [helpcontext(84146)]
typedef enum CONST_DIDSAMFLAGS
{
	DIDSAM_DEFAULT      =   0x00000000,
	DIDSAM_NOUSER       =   0x00000001,
	DIDSAM_FORCESAVE    =   0x00000002,
} CONST_DIDSAMFLAGS;

 [helpcontext(84135)]
typedef enum CONST_DICDFLAGS {
	DICD_DEFAULT        =  0x00000000,
	DICD_EDIT           =  0x00000001
} CONST_DICDFLAGS;

 [helpcontext(84133)]
typedef enum CONST_DIAFLAGS 
{
	DIA_FORCEFEEDBACK      = 0x00000001,
	DIA_APPMAPPED          = 0x00000002,
	DIA_APPNOMAP           = 0x00000004,
	DIA_NORANGE            = 0x00000008,
	DIA_APPFIXED           = 0x00000010
} CONST_DIAFLAGS;

 [helpcontext(84134)]
typedef enum CONST_DIAHFLAGS
{
	DIAH_UNMAPPED          = 0x00000000,
 	DIAH_USERCONFIG        = 0x00000001,
	DIAH_APPREQUESTED      = 0x00000002,
	DIAH_HWAPP             = 0x00000004,
	DIAH_HWDEFAULT         = 0x00000008,
//	DIAH_OTHERAPP          = 0x00000010,
	DIAH_DEFAULT           = 0x00000020,
        DIAH_ERROR             = 0x80000000,
} CONST_DIAHFLAGS;

 [helpcontext(84151)]
typedef enum CONST_DIENUMDEVICESFLAGS {
	DIEDFL_ALLDEVICES       =0x00000000,
	DIEDFL_ATTACHEDONLY     =0x00000001,	
	DIEDFL_FORCEFEEDBACK    =0x00000100,
	DIEDFL_INCLUDEALIASES   =0x00010000,
	DIEDFL_INCLUDEPHANTOMS  =0x00020000,
	DIEDFL_INCLUDEHIDDEN    =0x00040000
 
} CONST_DIENUMDEVICESFLAGS;

 [helpcontext(84132)]
typedef enum CONST_DI8DEVICETYPE {
	        DI8DEVCLASS_ALL                 =0,
		DI8DEVCLASS_DEVICE		=1,
		DI8DEVCLASS_POINTER		=2,
		DI8DEVCLASS_KEYBOARD		=3,
		DI8DEVCLASS_GAMECTRL		=4,

		DI8DEVTYPE_DEVICE		=0x11,
		DI8DEVTYPE_MOUSE		=0x12,
		DI8DEVTYPE_KEYBOARD		=0x13,
		DI8DEVTYPE_JOYSTICK		=0x14,
		DI8DEVTYPE_GAMEPAD		=0x15,
		DI8DEVTYPE_DRIVING		=0x16,
		DI8DEVTYPE_FLIGHT		=0x17,
		DI8DEVTYPE_1STPERSON		=0x18,
		DI8DEVTYPE_DEVICECTRL		=0x19,
		DI8DEVTYPE_SCREENPOINTER 	=0x1A,
		DI8DEVTYPE_REMOTE		=0x1B,
		DI8DEVTYPE_SUPPLEMENTAL  	=0x1C,	
[hidden]	DI8DEVTYPE_FORCEDWORD		=0x7F000000,
} CONST_DI8DEVICETYPE;

 [helpcontext(84131)]
typedef enum CONST_DI8DEVICESUBTYPE {
	DIDEVTYPE_HID			=0x00010000,
	DI8DEVTYPEMOUSE_UNKNOWN        =  0x100,
	DI8DEVTYPEMOUSE_TRADITIONAL    =  0x200,
	DI8DEVTYPEMOUSE_FINGERSTICK    =  0x300,
	DI8DEVTYPEMOUSE_TOUCHPAD       =  0x400,
	DI8DEVTYPEMOUSE_TRACKBALL      =  0x500,
	DI8DEVTYPEMOUSE_ABSOLUTE       =  0x600,
	DI8DEVTYPEKEYBOARD_UNKNOWN     =  0x000,
	DI8DEVTYPEKEYBOARD_PCXT        =  0x100,
	DI8DEVTYPEKEYBOARD_OLIVETTI    =  0x200,
	DI8DEVTYPEKEYBOARD_PCAT        =  0x300,
	DI8DEVTYPEKEYBOARD_PCENH       =  0x400,
	DI8DEVTYPEKEYBOARD_NOKIA1050   =  0x500,
	DI8DEVTYPEKEYBOARD_NOKIA9140   =  0x600,
	DI8DEVTYPEKEYBOARD_NEC98       =  0x700,
	DI8DEVTYPEKEYBOARD_NEC98LAPTOP =  0x800,
	DI8DEVTYPEKEYBOARD_NEC98106    =  0x900,
	DI8DEVTYPEKEYBOARD_JAPAN106    = 0xA00,
	DI8DEVTYPEKEYBOARD_JAPANAX     = 0xB00,
	DI8DEVTYPEKEYBOARD_J3100       = 0xC00,
	DI8DEVTYPE_LIMITEDGAMESUBTYPE  = 0x100,
	DI8DEVTYPEJOYSTICK_LIMITED     = DI8DEVTYPE_LIMITEDGAMESUBTYPE,
	DI8DEVTYPEJOYSTICK_STANDARD					= 0x200,
	DI8D8EVTYPEJOYSTICK_ENHANCED					= 0x300,
	DI8DEVTYPEGAMEPAD_LIMITED                	= DI8DEVTYPE_LIMITEDGAMESUBTYPE,
	DI8DEVTYPEGAMEPAD_STANDARD					= 0x200,
	DI8DEVTYPEGAMEPAD_TILT						= 0x300,
	DI8DEVTYPEDRIVING_LIMITED                	= DI8DEVTYPE_LIMITEDGAMESUBTYPE,
	DI8DEVTYPEDRIVING_COMBINEDPEDALS				= 0x200,
	DI8DEVTYPEDRIVING_DUALPEDALS					= 0x300,
	DI8DEVTYPEDRIVING_THREEPEDALS				= 0x400,
	DI8DEVTYPEDRIVING_HANDHELD					= 0x500,
	DI8DEVTYPEFLIGHT_LIMITED                 	= DI8DEVTYPE_LIMITEDGAMESUBTYPE,
	DI8DEVTYPEFLIGHT_STICK						= 0x200,
	DI8DEVTYPEFLIGHT_YOKE						= 0x300,
	DI8DEVTYPEFLIGHT_RC							= 0x400,
	DI8DEVTYPE1STPERSON_LIMITED              	= DI8DEVTYPE_LIMITEDGAMESUBTYPE,
	DI8DEVTYPE1STPERSON_UNKNOWN					= 0x200,
	DI8DEVTYPE1STPERSON_SIXDOF					= 0x300,
	DI8DEVTYPE1STPERSON_SHOOTER					= 0x400,
	DI8DEVTYPESCREENPTR_UNKNOWN					= 0x200,
	DI8DEVTYPESCREENPTR_LIGHTGUN					= 0x300,
	DI8DEVTYPESCREENPTR_LIGHTPEN					= 0x400,
	DI8DEVTYPESCREENPTR_TOUCH					= 0x500,
	DI8DEVTYPEREMOTE_UNKNOWN					= 0x200,
	DI8DEVTYPEDEVICECTRL_UNKNOWN				= 0x200,
	DI8DEVTYPEDEVICECTRL_COMMSSELECTION			= 0x300,
	DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED		= 0x400,
	DI8DEVTYPESUPPLEMENTAL_UNKNOWN				= 0x200,
	DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER		= 0x300,
	DI8DEVTYPESUPPLEMENTAL_HEADTRACKER			= 0x400,
	DI8DEVTYPESUPPLEMENTAL_HANDTRACKER			= 0x500,
	DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE		= 0x600,
	DI8DEVTYPESUPPLEMENTAL_SHIFTER				= 0x700,
	DI8DEVTYPESUPPLEMENTAL_THROTTLE				= 0x800,
	DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE			= 0x900,
	DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS		= 0xA00,
	DI8DEVTYPESUPPLEMENTAL_DUALPEDALS			= 0xB00,
	DI8DEVTYPESUPPLEMENTAL_THREEPEDALS			= 0xC00,
	DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS			= 0xD00
} CONST_DI8DEVICESUBTYPE;

 [helpcontext(84145)]
typedef enum CONST_DIDIFTFLAGS {
	DIDIFT_CONFIGURATION	= 0x00000001,
	DIDIFT_OVERLAY		= 0x00000002,
} CONST_DIDIFTFLAGS;

 [helpcontext(84143)]
typedef enum CONST_DIDFTFLAGS {
	DIDFT_ALL           =0x00000000,
	DIDFT_RELAXIS       =0x00000001,
	DIDFT_ABSAXIS       =0x00000002,
	DIDFT_AXIS          =0x00000003,
	DIDFT_PSHBUTTON     =0x00000004,
	DIDFT_TGLBUTTON     =0x00000008,
	DIDFT_BUTTON        =0x0000000C,
	DIDFT_POV           =0x00000010,
	DIDFT_COLLECTION    =0x00000040,
	DIDFT_NODATA        =0x00000080,
	DIDFT_ANYINSTANCE   =0x00FFFF00,
	DIDFT_INSTANCEMASK  =DIDFT_ANYINSTANCE,
	DIDFT_FFACTUATOR        =0x01000000,
	DIDFT_FFEFFECTTRIGGER   =0x02000000,
        DIDFT_NOCOLLECTION      =0x00FFFF00,
	DIDFT_VENDORDEFINED     =0x04000000,
	DIDFT_ALIAS             =0x08000000,
	DIDFT_OUTPUT		=0x10000000,

} CONST_DIDFTFLAGS;

 [helpcontext(84144)]
typedef enum CONST_DIDGDDFLAGS {
	DIGDD_DEFAULT          =0x00000000,
	DIGDD_PEEK          =0x00000001
} CONST_DIDGDDFLAGS;

 [helpcontext(84165)]
typedef enum CONST_DIPHFLAGS { 
	DIPH_DEVICE             =0,
	DIPH_BYOFFSET           =1,
	DIPH_BYID               =2,
	DIPH_BYUSAGE            =3
} CONST_DIPHFLAGS;

 [helpcontext(84166)]
typedef enum CONST_DISCLFLAGS {
	DISCL_EXCLUSIVE     =0x00000001,
	DISCL_NONEXCLUSIVE  =0x00000002,
	DISCL_FOREGROUND    =0x00000004,
	DISCL_BACKGROUND    =0x00000008,
	DISCL_NOWINKEY      =0x00000010
} CONST_DISCLFLAGS;

 [helpcontext(84141)]
typedef enum CONST_DIDEVCAPSFLAGS {
	DIDC_ATTACHED           =0x00000001,
	DIDC_POLLEDDEVICE       =0x00000002,
	DIDC_EMULATED           =0x00000004,
	DIDC_POLLEDDATAFORMAT   =0x00000008,
	DIDC_FORCEFEEDBACK      =0x00000100,
	DIDC_FFATTACK           =0x00000200,
	DIDC_FFFADE             =0x00000400,
	DIDC_SATURATION         =0x00000800,
	DIDC_POSNEGCOEFFICIENTS =0x00001000,
	DIDC_POSNEGSATURATION   =0x00002000,
        DIDC_DEADBAND           =0x00004000,
	DIDC_STARTDELAY         =0x00008000,
	DIDC_ALIAS              =0x00010000,
	DIDC_PHANTOM            =0x00020000,
	DIDC_HIDDEN             =0x00040000	
} CONST_DIDEVCAPSFLAGS;

 [helpcontext(84139)]
typedef enum CONST_DIDATAFORMATFLAGS {
	DIDF_ABSAXIS            =0x00000001,
	DIDF_RELAXIS            =0x00000002
} CONST_DIDATAFORMATFLAGS;

 [helpcontext(84142)]
typedef enum CONST_DIDEVICEOBJINSTANCEFLAGS {
	DIDOI_FFACTUATOR        =0x00000001,
	DIDOI_FFEFFECTTRIGGER   =0x00000002,
	DIDOI_POLLED            =0x00008000,
	DIDOI_ASPECTPOSITION    =0x00000100,
	DIDOI_ASPECTVELOCITY    =0x00000200,
	DIDOI_ASPECTACCEL       =0x00000300,
	DIDOI_ASPECTFORCE       =0x00000400,
	DIDOI_ASPECTMASK        =0x00000F00,
	DIDOI_GUIDISUSAGE	=0x00010000
} CONST_DIDEVICEOBJINSTANCEFLAGS;

/*
 [helpcontext(84847)]
typedef enum CONST_DIPROPERTYFLAGS {

	DIPROP_BUFFERSIZE       =1,
	DIPROP_AXISMODE         =2,
	DIPROPAXISMODE_ABS      =0,
	DIPROPAXISMODE_REL      =1,
	DIPROP_GRANULARITY      =3,
	DIPROP_RANGE            =4,
	DIPROP_DEADZONE         =5,
	DIPROP_SATURATION       =6,
	DIPROP_FFGAIN           =7,
	DIPROP_FFLOAD           =8,
	DIPROP_AUTOCENTER       =9,
	DIPROPAUTOCENTER_OFF    =0,
	DIPROPAUTOCENTER_ON     =1,
	DIPROP_CALIBRATIONMODE  =10,

//TODO NOTE THESE ARE NEW AND NEED TO BE IMPLEMENTED
	DIPROP_CALIBRATION	=11,
	DIPROP_GUIDANDPATH	=12,
	DIPROP_INSTANCENAME	=13,
	DIPROP_PRODUCTNAME	=14,
	DIPROP_JOYSTICKID	=15,
	DIPROP_GETPORTDISPLAYNAME =16,
	DIPROP_PHYSICALRANGE 	=18,
	DIPROP_LOGICALRANGE	=19,
	DIPROP_KEYNAME		=20,
	DIPROP_CPOINTS		=21,
	DIPROP_APPDATA		=22,
	DIPROP_SCANCODE		=23,
	DIPROP_VIDPID		=24,
	DIPROP_USERNAME         =25,
	DIPROP_TYPENAME         =26,
	DIPROP_ENABLEREPORTID	=0x0000FFFB,
	DIPROPCALIBRATIONMODE_COOKED=    0,
	DIPROPCALIBRATIONMODE_RAW    =   1

} CONST_DIPROPERTYFLAGS;
*/

	
 [helpcontext(84159)]
typedef enum CONST_DIKEYFLAGS {
	DIK_ESCAPE        =  0x01,
	DIK_1             =  0x02,
	DIK_2             =  0x03,
	DIK_3             =  0x04,
	DIK_4             =  0x05,
	DIK_5             =  0x06,
	DIK_6             =  0x07,
	DIK_7             =  0x08,
	DIK_8             =  0x09,
	DIK_9             =  0x0A,
	DIK_0             =  0x0B,
	DIK_MINUS         =  0x0C ,   /* - on main keyboard */
	DIK_EQUALS        =  0x0D,
	DIK_BACK          =  0x0E ,   /* backspace */
	DIK_BACKSPACE	  =  0x0E ,
	DIK_TAB           =  0x0F,
	DIK_Q             =  0x10,
	DIK_W             =  0x11,
	DIK_E             =  0x12,
	DIK_R             =  0x13,
	DIK_T             =  0x14,
	DIK_Y             =  0x15,
	DIK_U             =  0x16,
	DIK_I             =  0x17,
	DIK_O             =  0x18,
	DIK_P             =  0x19,
	DIK_LBRACKET      =  0x1A,
	DIK_RBRACKET      =  0x1B,
	DIK_RETURN        =  0x1C ,   /* Enter on main keyboard */
	DIK_LCONTROL      =  0x1D,
	DIK_A             =  0x1E,
	DIK_S             =  0x1F,
	DIK_D             =  0x20,
	DIK_F             =  0x21,
	DIK_G             =  0x22,
	DIK_H             =  0x23,
	DIK_J             =  0x24,
	DIK_K             =  0x25,
	DIK_L             =  0x26,
	DIK_SEMICOLON     =  0x27,
	DIK_APOSTROPHE    =  0x28,
	DIK_GRAVE         =  0x29 ,   /* accent grave */
	DIK_LSHIFT        =  0x2A,
	DIK_BACKSLASH     =  0x2B,
	DIK_Z             =  0x2C,
	DIK_X             =  0x2D,
	DIK_C             =  0x2E,
	DIK_V             =  0x2F,
	DIK_B             =  0x30,
	DIK_N             =  0x31,
	DIK_M             =  0x32,
	DIK_COMMA         =  0x33,
	DIK_PERIOD        =  0x34  ,  /* . on main keyboard */
	DIK_SLASH         =  0x35 ,   /* / on main keyboard */
	DIK_RSHIFT        =  0x36,
	DIK_MULTIPLY      =  0x37  ,  /* * on numeric keypad */
	DIK_NUMPADSTAR    =  0x37  ,
	DIK_LMENU         =  0x38 ,   /* left Alt */
	DIK_LALT          =  0x38 ,   
	DIK_SPACE         =  0x39,
	DIK_CAPITAL       =  0x3A,
	DIK_CAPSLOCK      =  0x3A,
	DIK_F1            =  0x3B,
	DIK_F2            =  0x3C,
	DIK_F3            =  0x3D,
	DIK_F4            =  0x3E,
	DIK_F5            =  0x3F,
	DIK_F6            =  0x40,
	DIK_F7            =  0x41,
	DIK_F8            =  0x42,
	DIK_F9            =  0x43,
	DIK_F10           =  0x44,
	DIK_NUMLOCK       =  0x45,
	DIK_SCROLL        =  0x46 ,   /* Scroll Lock */
	DIK_NUMPAD7       =  0x47,
	DIK_NUMPAD8       =  0x48,
	DIK_NUMPAD9       =  0x49,
	DIK_SUBTRACT      =  0x4A ,   /* - on numeric keypad */
	DIK_NUMPADMINUS   =  0x4A ,   /* - on numeric keypad */
	DIK_NUMPAD4       =  0x4B,
	DIK_NUMPAD5       =  0x4C,
	DIK_NUMPAD6       =  0x4D,
	DIK_ADD           =  0x4E ,   /* + on numeric keypad */
	DIK_NUMPADPLUS    =  0x4E ,   /* + on numeric keypad */
	DIK_NUMPAD1       =  0x4F,
	DIK_NUMPAD2       =  0x50,
	DIK_NUMPAD3       =  0x51,
	DIK_NUMPAD0       =  0x52,
	DIK_DECIMAL       =  0x53,    /* . on numeric keypad */
	DIK_NUMPADPERIOD  =  0x53,    /* . on numeric keypad */
        DIK_OEM_102       =  0x56,    /* < > | on UK/Germany keyboards */
	DIK_F11           =  0x57, 
	DIK_F12           =  0x58 ,
	DIK_F13            = 0x64 ,   /*                     (NEC PC98) */
	DIK_F14            = 0x65 ,   /*                     (NEC PC98) */
	DIK_F15            = 0x66 ,  /*                     (NEC PC98) */

	DIK_KANA          =  0x70 ,   /* (Japanese keyboard)            */
	DIK_ABNT_C1       =  0x73 ,  /* / ? on Portugese (Brazilian) keyboards */

	DIK_CONVERT       =  0x79 ,   /* (Japanese keyboard)            */
	DIK_NOCONVERT     =  0x7B ,   /* (Japanese keyboard)            */
	DIK_YEN           =  0x7D ,   /* (Japanese keyboard)            */
        DIK_ABNT_C2       =  0x7E ,   /* Numpad . on Portugese (Brazilian) keyboards */
	DIK_NUMPADEQUALS  =  0x8D ,   /* = on numeric keypad (NEC PC98) */
	DIK_CIRCUMFLEX    =  0x90 ,   /* (Japanese keyboard)            */
        DIK_PREVTRACK     =  0x90 ,   /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
	DIK_AT            =  0x91 ,   /*                     (NEC PC98) */
	DIK_COLON         =  0x92 ,   /*                     (NEC PC98) */
	DIK_UNDERLINE     =  0x93 ,   /*                     (NEC PC98) */
	DIK_KANJI         =  0x94 ,   /* (Japanese keyboard)            */
	DIK_STOP          =  0x95 ,   /*                     (NEC PC98) */

	DIK_AX            =  0x96 ,   /*                     (Japan AX) */
	DIK_UNLABELED     =  0x97 ,   /*                        (J3100) */
	DIK_NEXTTRACK     =  0x99 ,   /* Next Track */
	DIK_NUMPADENTER   =  0x9C ,   /* Enter on numeric keypad */
	DIK_RCONTROL      =  0x9D ,

	DIK_MUTE          =  0xA0 ,   /* Mute */
	DIK_CALCULATOR    =  0xA1 ,   /* Calculator */
	DIK_PLAYPAUSE     =  0xA2 ,   /* Play / Pause */
	DIK_MEDIASTOP     =  0xA4 ,   /* Media Stop */
	DIK_VOLUMEDOWN    =  0xAE ,  /* Volume - */
	DIK_VOLUMEUP      =  0xB0 ,  /* Volume + */
	DIK_WEBHOME       =  0xB2 ,  /* Web home */

	DIK_NUMPADCOMMA   =  0xB3,    /* , on numeric keypad (NEC PC98) */
	DIK_DIVIDE        =  0xB5,    /* / on numeric keypad */
	DIK_NUMPADSLASH   =  0xB5,    /* / on numeric keypad */
	DIK_SYSRQ         =  0xB7,
	DIK_RMENU         =  0xB8,    /* right Al t */
	DIK_RALT          =  0xB8,    /* right Al t */
	DIK_PAUSE	  =  0xC5,	  /* Pause */
	DIK_HOME          =  0xC7,    /* Home on arrow keypad */
	DIK_UP            =  0xC8,    /* UpArrow on arrow keypad */
	DIK_UPARROW       =  0xC8,    /* UpArrow on arrow keypad */
	DIK_PRIOR         =  0xC9,    /* PgUp on arrow keypad */
	DIK_PGUP          =  0xC9,    /* PgUp on arrow keypad */
	DIK_LEFT          =  0xCB,    /* LeftArrow on arrow keypad */
	DIK_LEFTARROW     =  0xCB,    /* LeftArrow on arrow keypad */
	DIK_RIGHT         =  0xCD,    /* RightArrow on arrow keypad */
	DIK_RIGHTARROW    =  0xCD,    /* RightArrow on arrow keypad */
	DIK_END           =  0xCF,    /* End on arrow keypad */
	DIK_DOWN          =  0xD0,    /* DownArrow on arrow keypad */
	DIK_DOWNARROW     =  0xD0,    /* DownArrow on arrow keypad */
	DIK_NEXT          =  0xD1,    /* PgDn on arrow keypad */
	DIK_PGDN          =  0xD1,    /* PgDn on arrow keypad */
	DIK_INSERT        =  0xD2,    /* Insert on arrow keypad */
	DIK_DELETE        =  0xD3,    /* Delete on arrow keypad */
	DIK_LWIN          =  0xDB,    /* Left Windows key */
	DIK_RWIN          =  0xDC,    /* Right Windows key */
	DIK_APPS          =  0xDD,    /* AppMenu key */
	DIK_POWER         =  0xDE,    /* System Power */
	DIK_SLEEP         =  0xDF,    /* System Sleep */
	DIK_WAKE          =  0xE3,    /* System Wake */
	DIK_WEBSEARCH     =  0xE5,    /* Web Search */
	DIK_WEBFAVORITES  =  0xE6,    /* Web Favorites */
	DIK_WEBREFRESH    =  0xE7,    /* Web Refresh */
	DIK_WEBSTOP       =  0xE8,    /* Web Stop */
	DIK_WEBFORWARD    =  0xE9,    /* Web Forward */
	DIK_WEBBACK       =  0xEA,    /* Web Back */
	DIK_MYCOMPUTER    =  0xEB,    /* My Computer */
	DIK_MAIL          =  0xEC,    /* Mail */
	DIK_MEDIASELECT   =  0xED,    /* Media Select */

} CONST_DIKEYFLAGS;




 [helpcontext(84158)]
typedef enum CONST_DIKEYBOARDFLAGS {
     DIKEYBOARD_ESCAPE                  = 0x81000401,
     DIKEYBOARD_1                       = 0x81000402,
     DIKEYBOARD_2                       = 0x81000403,
     DIKEYBOARD_3                       = 0x81000404,
     DIKEYBOARD_4                       = 0x81000405,
     DIKEYBOARD_5                       = 0x81000406,
     DIKEYBOARD_6                       = 0x81000407,
     DIKEYBOARD_7                       = 0x81000408,
     DIKEYBOARD_8                       = 0x81000409,
     DIKEYBOARD_9                       = 0x8100040A,
     DIKEYBOARD_0                       = 0x8100040B,
     DIKEYBOARD_MINUS                   = 0x8100040C,  /* - on main keyboard */
     DIKEYBOARD_EQUALS                  = 0x8100040D,
     DIKEYBOARD_BACK                    = 0x8100040E,  /* backspace */
     DIKEYBOARD_TAB                     = 0x8100040F,
     DIKEYBOARD_Q                       = 0x81000410,
     DIKEYBOARD_W                       = 0x81000411,
     DIKEYBOARD_E                       = 0x81000412,
     DIKEYBOARD_R                       = 0x81000413,
     DIKEYBOARD_T                       = 0x81000414,
     DIKEYBOARD_Y                       = 0x81000415,
     DIKEYBOARD_U                       = 0x81000416,
     DIKEYBOARD_I                       = 0x81000417,
     DIKEYBOARD_O                       = 0x81000418,
     DIKEYBOARD_P                       = 0x81000419,
     DIKEYBOARD_LBRACKET                = 0x8100041A,
     DIKEYBOARD_RBRACKET                = 0x8100041B,
     DIKEYBOARD_RETURN                  = 0x8100041C,  /* Enter on main keyboard */
     DIKEYBOARD_LCONTROL                = 0x8100041D,
     DIKEYBOARD_A                       = 0x8100041E,
     DIKEYBOARD_S                       = 0x8100041F,
     DIKEYBOARD_D                       = 0x81000420,
     DIKEYBOARD_F                       = 0x81000421,
     DIKEYBOARD_G                       = 0x81000422,
     DIKEYBOARD_H                       = 0x81000423,
     DIKEYBOARD_J                       = 0x81000424,
     DIKEYBOARD_K                       = 0x81000425,
     DIKEYBOARD_L                       = 0x81000426,
     DIKEYBOARD_SEMICOLON               = 0x81000427,
     DIKEYBOARD_APOSTROPHE              = 0x81000428,
     DIKEYBOARD_GRAVE                   = 0x81000429,  /* accent grave */
     DIKEYBOARD_LSHIFT                  = 0x8100042A,
     DIKEYBOARD_BACKSLASH               = 0x8100042B,
     DIKEYBOARD_Z                       = 0x8100042C,
     DIKEYBOARD_X                       = 0x8100042D,
     DIKEYBOARD_C                       = 0x8100042E,
     DIKEYBOARD_V                       = 0x8100042F,
     DIKEYBOARD_B                       = 0x81000430,
     DIKEYBOARD_N                       = 0x81000431,
     DIKEYBOARD_M                       = 0x81000432,
     DIKEYBOARD_COMMA                   = 0x81000433,
     DIKEYBOARD_PERIOD                  = 0x81000434,  /* . on main keyboard */
     DIKEYBOARD_SLASH                   = 0x81000435,  /* / on main keyboard */
     DIKEYBOARD_RSHIFT                  = 0x81000436,
     DIKEYBOARD_MULTIPLY                = 0x81000437,  /* * on numeric keypad */
     DIKEYBOARD_LMENU                   = 0x81000438,  /* left Alt */
     DIKEYBOARD_SPACE                   = 0x81000439,
     DIKEYBOARD_CAPITAL                 = 0x8100043A,
     DIKEYBOARD_F1                      = 0x8100043B,
     DIKEYBOARD_F2                      = 0x8100043C,
     DIKEYBOARD_F3                      = 0x8100043D,
     DIKEYBOARD_F4                      = 0x8100043E,
     DIKEYBOARD_F5                      = 0x8100043F,
     DIKEYBOARD_F6                      = 0x81000440,
     DIKEYBOARD_F7                      = 0x81000441,
     DIKEYBOARD_F8                      = 0x81000442,
     DIKEYBOARD_F9                      = 0x81000443,
     DIKEYBOARD_F10                     = 0x81000444,
     DIKEYBOARD_NUMLOCK                 = 0x81000445,
     DIKEYBOARD_SCROLL                  = 0x81000446,  /* Scroll Lock */
     DIKEYBOARD_NUMPAD7                 = 0x81000447,
     DIKEYBOARD_NUMPAD8                 = 0x81000448,
     DIKEYBOARD_NUMPAD9                 = 0x81000449,
     DIKEYBOARD_SUBTRACT                = 0x8100044A    ,  /* - on numeric keypad */
     DIKEYBOARD_NUMPAD4                 = 0x8100044B    ,
     DIKEYBOARD_NUMPAD5                 = 0x8100044C    ,
     DIKEYBOARD_NUMPAD6                 = 0x8100044D    ,
     DIKEYBOARD_ADD                     = 0x8100044E    ,  /* + on numeric keypad */
     DIKEYBOARD_NUMPAD1                 = 0x8100044F    ,
     DIKEYBOARD_NUMPAD2                 = 0x81000450    ,
     DIKEYBOARD_NUMPAD3                 = 0x81000451    ,
     DIKEYBOARD_NUMPAD0                 = 0x81000452    ,
     DIKEYBOARD_DECIMAL                 = 0x81000453    ,  /* . on numeric keypad */
     DIKEYBOARD_OEM_102                 = 0x81000456    ,  /* < > | on UK/Germany keyboards */
     DIKEYBOARD_F11                     = 0x81000457    ,
     DIKEYBOARD_F12                     = 0x81000458    ,
     DIKEYBOARD_F13                     = 0x81000464    ,  /*                     (NEC PC98) */
     DIKEYBOARD_F14                     = 0x81000465    ,  /*                     (NEC PC98) */
     DIKEYBOARD_F15                     = 0x81000466    ,  /*                     (NEC PC98) */
     DIKEYBOARD_KANA                    = 0x81000470    ,  /* (Japanese keyboard)            */
     DIKEYBOARD_ABNT_C1                 = 0x81000473    ,  /* / ? on Portugese (Brazilian) keyboards */
     DIKEYBOARD_CONVERT                 = 0x81000479    ,  /* (Japanese keyboard)            */
     DIKEYBOARD_NOCONVERT               = 0x8100047B    ,  /* (Japanese keyboard)            */
     DIKEYBOARD_YEN                     = 0x8100047D    ,  /* (Japanese keyboard)            */
     DIKEYBOARD_ABNT_C2                 = 0x8100047E    ,  /* Numpad . on Portugese (Brazilian) keyboards */
     DIKEYBOARD_NUMPADEQUALS            = 0x8100048D    ,  /* = on numeric keypad (NEC PC98) */
     DIKEYBOARD_PREVTRACK               = 0x81000490    ,  /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
     DIKEYBOARD_AT                      = 0x81000491    ,  /*                     (NEC PC98) */
     DIKEYBOARD_COLON                   = 0x81000492    ,  /*                     (NEC PC98) */
     DIKEYBOARD_UNDERLINE               = 0x81000493    ,  /*                     (NEC PC98) */
     DIKEYBOARD_KANJI                   = 0x81000494    ,  /* (Japanese keyboard)            */
     DIKEYBOARD_STOP                    = 0x81000495    ,  /*                     (NEC PC98) */
     DIKEYBOARD_AX                      = 0x81000496    ,  /*                     (Japan AX) */
     DIKEYBOARD_UNLABELED               = 0x81000497    ,  /*                        (J3100) */
     DIKEYBOARD_NEXTTRACK               = 0x81000499    ,  /* Next Track */
     DIKEYBOARD_NUMPADENTER             = 0x8100049C    ,  /* Enter on numeric keypad */
     DIKEYBOARD_RCONTROL                = 0x8100049D    ,
     DIKEYBOARD_MUTE                    = 0x810004A0    ,  /* Mute */
     DIKEYBOARD_CALCULATOR              = 0x810004A1    ,  /* Calculator */
     DIKEYBOARD_PLAYPAUSE               = 0x810004A2    ,  /* Play / Pause */
     DIKEYBOARD_MEDIASTOP               = 0x810004A4    ,  /* Media Stop */
     DIKEYBOARD_VOLUMEDOWN              = 0x810004AE    ,  /* Volume - */
     DIKEYBOARD_VOLUMEUP                = 0x810004B0    ,  /* Volume + */
     DIKEYBOARD_WEBHOME                 = 0x810004B2    ,  /* Web home */
     DIKEYBOARD_NUMPADCOMMA             = 0x810004B3    ,  /* , on numeric keypad (NEC PC98) */
     DIKEYBOARD_DIVIDE                  = 0x810004B5    ,  /* / on numeric keypad */
     DIKEYBOARD_SYSRQ                   = 0x810004B7    ,
     DIKEYBOARD_RMENU                   = 0x810004B8    ,  /* right Alt */
     DIKEYBOARD_PAUSE                   = 0x810004C5    ,  /* Pause */
     DIKEYBOARD_HOME                    = 0x810004C7    ,  /* Home on arrow keypad */
     DIKEYBOARD_UP                      = 0x810004C8    ,  /* UpArrow on arrow keypad */
     DIKEYBOARD_PRIOR                   = 0x810004C9    ,  /* PgUp on arrow keypad */
     DIKEYBOARD_LEFT                    = 0x810004CB    ,  /* LeftArrow on arrow keypad */
     DIKEYBOARD_RIGHT                   = 0x810004CD    ,  /* RightArrow on arrow keypad */
     DIKEYBOARD_END                     = 0x810004CF    ,  /* End on arrow keypad */
     DIKEYBOARD_DOWN                    = 0x810004D0    ,  /* DownArrow on arrow keypad */
     DIKEYBOARD_NEXT                    = 0x810004D1    ,  /* PgDn on arrow keypad */
     DIKEYBOARD_INSERT                  = 0x810004D2    ,  /* Insert on arrow keypad */
     DIKEYBOARD_DELETE                  = 0x810004D3    ,  /* Delete on arrow keypad */
     DIKEYBOARD_LWIN                    = 0x810004DB    ,  /* Left Windows key */
     DIKEYBOARD_RWIN                    = 0x810004DC    ,  /* Right Windows key */
     DIKEYBOARD_APPS                    = 0x810004DD    ,  /* AppMenu key */
     DIKEYBOARD_POWER                   = 0x810004DE    ,  /* System Power */
     DIKEYBOARD_SLEEP                   = 0x810004DF    ,  /* System Sleep */
     DIKEYBOARD_WAKE                    = 0x810004E3    ,  /* System Wake */
     DIKEYBOARD_WEBSEARCH               = 0x810004E5    ,  /* Web Search */
     DIKEYBOARD_WEBFAVORITES            = 0x810004E6    ,  /* Web Favorites */
     DIKEYBOARD_WEBREFRESH              = 0x810004E7    ,  /* Web Refresh */
     DIKEYBOARD_WEBSTOP                 = 0x810004E8    ,  /* Web Stop */
     DIKEYBOARD_WEBFORWARD              = 0x810004E9    ,  /* Web Forward */
     DIKEYBOARD_WEBBACK                 = 0x810004EA    ,  /* Web Back */
     DIKEYBOARD_MYCOMPUTER              = 0x810004EB    ,  /* My Computer */
     DIKEYBOARD_MAIL                    = 0x810004EC    ,  /* Mail */
     DIKEYBOARD_MEDIASELECT             = 0x810004ED    ,  /* Media Select */
  
} CONST_DIKEYBOARDFLAGS;



 [helpcontext(84162)]
typedef enum CONST_DIMOUSEOFS {
	DIMOFS_X        =0,
	DIMOFS_Y        =4,
	DIMOFS_Z        =8,
	DIMOFS_BUTTON0 =12,
	DIMOFS_BUTTON1 =13,
	DIMOFS_BUTTON2 =14,
	DIMOFS_BUTTON3 =15,
	DIMOFS_BUTTON4 =16,
	DIMOFS_BUTTON5 =17,
	DIMOFS_BUTTON6 =18,
	DIMOFS_BUTTON7 =19
}  CONST_DIMOUSEOFS;

 [helpcontext(84161)]
typedef enum CONST_DIMOUSEFLAGS {
     DIMOUSE_XAXISAB   = 0x82000200, // (= 0x82000200 |DIMOFS_X ) ,  /* X Axis-absolute: Some mice natively report absolute coordinates  */
     DIMOUSE_YAXISAB   = 0x82000204, // (= 0x82000200 |DIMOFS_Y ) ,  /* Y Axis-absolute: Some mice natively report absolute coordinates */
     DIMOUSE_XAXIS     = 0x82000300, // (= 0x82000300 |DIMOFS_X ) ,  /* X Axis */
     DIMOUSE_YAXIS     = 0x82000304, // (= 0x82000300 |DIMOFS_Y ) ,  /* Y Axis */
     DIMOUSE_WHEEL     = 0x82000308, // (= 0x82000300 |DIMOFS_Z ) ,  /* Z Axis */
     DIMOUSE_BUTTON0   = 0x8200040C, // (= 0x82000400 |DIMOFS_BUTTON0) ,  /* Button 0 */
     DIMOUSE_BUTTON1   = 0x8200040D, // (= 0x82000400 |DIMOFS_BUTTON1) ,  /* Button 1 */
     DIMOUSE_BUTTON2   = 0x8200040E, // (= 0x82000400 |DIMOFS_BUTTON2) ,  /* Button 2 */
     DIMOUSE_BUTTON3   = 0x8200040F, // (= 0x82000400 |DIMOFS_BUTTON3) ,  /* Button 3 */
     DIMOUSE_BUTTON4   = 0x82000410, // (= 0x82000400 |DIMOFS_BUTTON4) ,  /* Button 4 */
     DIMOUSE_BUTTON5   = 0x82000411, // (= 0x82000400 |DIMOFS_BUTTON5) ,  /* Button 5 */
     DIMOUSE_BUTTON6   = 0x82000412, // (= 0x82000400 |DIMOFS_BUTTON6) ,  /* Button 6 */
     DIMOUSE_BUTTON7   = 0x82000413, // (= 0x82000400 |DIMOFS_BUTTON7) ,  /* Button 7 */
} CONST_DIMOUSEFLAGS;

 [helpcontext(84169)]
typedef enum CONST_DIVOICEFLAGS {

     DIVOICE_CHANNEL1                   = 0x83000401,
     DIVOICE_CHANNEL2                   = 0x83000402,
     DIVOICE_CHANNEL3                   = 0x83000403,
     DIVOICE_CHANNEL4                   = 0x83000404,
     DIVOICE_CHANNEL5                   = 0x83000405,
     DIVOICE_CHANNEL6                   = 0x83000406,
     DIVOICE_CHANNEL7                   = 0x83000407,
     DIVOICE_CHANNEL8                   = 0x83000408,
     DIVOICE_TEAM                       = 0x83000409,
     DIVOICE_ALL                        = 0x8300040A,
     DIVOICE_RECORDMUTE                 = 0x8300040B,
     DIVOICE_PLAYBACKMUTE               = 0x8300040C,
     DIVOICE_TRANSMIT                   = 0x8300040D,
     DIVOICE_VOICECOMMAND               = 0x83000410,

} CONST_DIVOICEFLAGS;



 [helpcontext(84163)]
typedef enum CONST_DINPUT {	

	DIPROPRANGE_NOMIN       =0x80000000,
	DIPROPRANGE_NOMAX       =0x7FFFFFFF,
	DI_DEGREES                =  100,
	DI_FFNOMINALMAX           =  10000,
	DI_SECONDS                =  1000000,

// not needed hard coded in struct array
//	MAXCPOINTSNUM		=8,
// Not needed we dont have enumeration callbacks
//	DIENUM_STOP             =0,
//	DIENUM_CONTINUE         =1,

	/*
	* Flag to indicate that the dwReserved2 field of the JOYINFOEX structure
	* contains mini-driver specific data to be passed by VJoyD to the mini-
	* driver instead of doing a poll.
	*/
//	JOY_PASSDRIVERDATA          =0x10000000,

	
	/*
	* Hardware Setting indicating that the device is a headtracker
	*/
//	JOY_HWS_ISHEADTRACKER       =0x02000000,

	/*
	* Hardware Setting indicating that the VxD is used to replace
	* the standard analog polling
	*/
//	JOY_HWS_ISGAMEPORTDRIVER    =0x04000000,

	/*
	* Hardware Setting indicating that the driver needs a standard
	* gameport in order to communicate with the device.
	*/
//	JOY_HWS_ISANALOGPORTDRIVER  =0x08000000, 

	/*
	* Hardware Setting indicating that VJoyD should not load this 
	* driver, it will be loaded externally and will register with
	* VJoyD of it's own accord.
	*/
//	JOY_HWS_AUTOLOAD            =0x10000000,

	/*
	* Hardware Setting indicating that the driver acquires any 
	* resources needed without needing a devnode through VJoyD.
	*/
//	JOY_HWS_NODEVNODE           =0x20000000,

	/*
	* Hardware Setting indicating that the VxD can be used as
	* a port 201h emulator.
	*/
//	JOY_HWS_ISGAMEPORTEMULATOR  =0x40000000,


	/*
	* Usage Setting indicating that the settings are volatile and
	* should be removed if still present on a reboot.
	*/
//	JOY_US_VOLATILE             =0x00000008,


	DIPROPAXISMODE_ABS =0,
	DIPROPAXISMODE_REL =1,
	DIPROPCALIBRATIONMODE_COOKED=0,
	DIPROPCALIBRATIONMODE_RAW=1,
	DIPROPAUTOCENTER_OFF    =0,
	DIPROPAUTOCENTER_ON     =1,
	DIEB_NOTRIGGER       =       0xFFFFFFFF,

	//Added for bug #41819
	MAXCPOINTSNUM        =  MAXCPOINTSNUM_CDESC
	//End bug #41819

} CONST_DINPUTCONSTANTS;


 [helpcontext(84136)]
typedef enum CONST_DICOMMONDATAFORMATS
{
	DIFORMAT_KEYBOARD	=1,
	DIFORMAT_MOUSE		=2,
	DIFORMAT_JOYSTICK	=3,
	DIFORMAT_JOYSTICK2	=4,
	DIFORMAT_MOUSE2		=5,
} CONST_DICOMMONDATAFORMATS;



 [helpcontext(84164)]
typedef enum CONST_DINPUTERR{
    	DI_OK = 0,
	DI_NOTATTACHED                  =1,
	//DI_BUFFEROVERFLOW               =1, this has been remmapped
	DI_PROPNOEFFECT                 =1,
	DI_NOEFFECT                     =1,
	DI_POLLEDDEVICE                 =2,
	DI_DOWNLOADSKIPPED              =3,
	DI_EFFECTRESTARTED              =4,
	DI_SETTINGSNOTSAVED		=11,
	DI_TRUNCATED                    =8,
	DI_TRUNCATEDANDRESTARTED        =12,
	DI_WRITEPROTECT                =0x13,
    
	DI_BUFFEROVERFLOW = 0x80040260,
	//DIERR_INVALIDHANDLE			= 0x80070006,
	DIERR_OLDDIRECTINPUTVERSION = 0x8007047E,
	DIERR_BETADIRECTINPUTVERSION = 0x80070481,
	DIERR_BADDRIVERVER = 0x80070077,
    	DIERR_DEVICENOTREG = 0x80040154,
	DIERR_NOTFOUND = 0x80070002,
    	DIERR_OBJECTNOTFOUND = 0x80070002,
    	DIERR_INVALIDPARAM = 5, //0x80070057,    
	DIERR_NOINTERFACE =430,// 0x80004002,    
	DIERR_GENERIC =  0x80004005,
    	DIERR_OUTOFMEMORY = 7, //0x8007000E,    
    	DIERR_UNSUPPORTED = 445 ,//0x80004001,
	DIERR_NOTINITIALIZED = 0x80070015,    
	DIERR_ALREADYINITIALIZED = 0x800704DF,
    
    
    	DIERR_INPUTLOST = 0x8007001E,
    	DIERR_ACQUIRED = 0x800700AA,
	DIERR_NOTACQUIRED = 0x8007000C,

	DIERR_NOAGGREGATION = 0x80004002,
	DIERR_OTHERAPPHASPRIO = 0x80070005,
	DIERR_READONLY = 0x80070005,
	DIERR_HANDLEEXISTS = 0x80070005,
	E_PENDING = 0x8000000A,
	DIERR_INSUFFICIENTPRIVS = 0x80040200,
	DIERR_DEVICEFULL = 0x80040201,
	DIERR_MOREDATA = 0x80040202,
	DIERR_NOTDOWNLOADED = 0x80040203,
	DIERR_HASEFFECTS = 0x80040204,
	DIERR_NOTEXCLUSIVEACQUIRED = 0x80040205,
    	DIERR_INCOMPLETEEFFECT = 0x80040206,
    	DIERR_NOTBUFFERED = 0x80040207,
    	DIERR_EFFECTPLAYING = 0x80040208,
   	DIERR_UNPLUGGED = 0x80040209,
	DIERR_REPORTFULL= 0x8004020A,
	DIERR_MAPFILEFAIL = 0x8004020B,


} CONST_DINPUTERR;




 [helpcontext(84157)]
typedef enum CONST_DIJOYSTICKOFS {
 DIJOFS_X            =0,
 DIJOFS_Y            =4,
 DIJOFS_Z            =8,
 DIJOFS_RX           =12,
 DIJOFS_RY           =16,
 DIJOFS_RZ           =20,
 DIJOFS_SLIDER0	     =24,
 DIJOFS_SLIDER1      =28,                                                     
 DIJOFS_POV0		 =32,
 DIJOFS_POV1		 =36,
 DIJOFS_POV2		 =40,
 DIJOFS_POV3		 =44,
 DIJOFS_BUTTON0      =48,
 DIJOFS_BUTTON1      =49,
 DIJOFS_BUTTON2      =50,
 DIJOFS_BUTTON3      =51,
 DIJOFS_BUTTON4      =52,
 DIJOFS_BUTTON5      =53,
 DIJOFS_BUTTON6      =54,
 DIJOFS_BUTTON7      =55,
 DIJOFS_BUTTON8      =56,
 DIJOFS_BUTTON9      =57,
 DIJOFS_BUTTON10     =58,
 DIJOFS_BUTTON11     =59,
 DIJOFS_BUTTON12     =60,
 DIJOFS_BUTTON13     =61,
 DIJOFS_BUTTON14     =62,
 DIJOFS_BUTTON15     =63,
 DIJOFS_BUTTON16     =64,
 DIJOFS_BUTTON17     =65,
 DIJOFS_BUTTON18     =66,
 DIJOFS_BUTTON19     =67,
 DIJOFS_BUTTON20     =68,
 DIJOFS_BUTTON21     =69,
 DIJOFS_BUTTON22     =70,
 DIJOFS_BUTTON23     =71,
 DIJOFS_BUTTON24     =72,
 DIJOFS_BUTTON25     =73,
 DIJOFS_BUTTON26     =74,
 DIJOFS_BUTTON27     =75,
 DIJOFS_BUTTON28     =76,
 DIJOFS_BUTTON29     =77,
 DIJOFS_BUTTON30     =78,
 DIJOFS_BUTTON31     =79
} CONST_DIJOYSTICKOFS;

 [helpcontext(84149)]
typedef enum CONST_DIEFTFLAGS {
	DIEFT_ALL                 =  0x00000000,
	DIEFT_CONSTANTFORCE       =  0x00000001,
	DIEFT_RAMPFORCE           =  0x00000002,
	DIEFT_PERIODIC            =  0x00000003,
	DIEFT_CONDITION           =  0x00000004,
	DIEFT_CUSTOMFORCE         =  0x00000005,
	DIEFT_HARDWARE            =  0x000000FF,
	DIEFT_FFATTACK            =  0x00000200,
	DIEFT_FFFADE              =  0x00000400,
	DIEFT_SATURATION          =  0x00000800,
	DIEFT_POSNEGCOEFFICIENTS  =  0x00001000,
	DIEFT_POSNEGSATURATION    =  0x00002000,
	DIEFT_DEADBAND            =  0x00004000,
	DIEFT_STARTDELAY          =  0x00008000,

	//DIEFT_PREDEFMIN		  =  0x00000001,	
	//DIEFT_PREDEFMAX		  =  0x00000005,	
	//DIEFT_TYPEMASK		  =  0x000000FF,	
	//DIEFT_FORCEFEEDBACK	  =  0x00000100,	
	//DIEFT_VALIDFLAGS	  =  0x0000FE00,	
	//DIEFT_ENUMVALID		  =  0x040000FF,	

} CONST_DIEFTFLAGS;



 [helpcontext(84148)]
typedef enum CONST_DIEFFFLAGS {

	DIEFF_OBJECTIDS           =  0x00000001,
	DIEFF_OBJECTOFFSETS       =  0x00000002,
	DIEFF_CARTESIAN           =  0x00000010,
	DIEFF_POLAR               =  0x00000020,
	DIEFF_SPHERICAL           =  0x00000040,

	//These flags are internal to DInput
	//
	//DIEFF_SPHERICAL           =  0x00000040,
	//DIEFFECT_MAXAXES		=32,
	//DIEFF_OBJECTMASK		=3,
	//DIEFF_ANGULAR			=0x00000060,
	//DIEFF_COORDMASK			=0x00000070,
	//DIEFF_REGIONANGULAR		=0x00006000,
	//DIEFF_REGIONCOORDMASK		=0x00000070,
	//DIEFF_VALID			=0x00000073,


} CONST_DIEFFFLAGS;

 [helpcontext(84152)]
typedef enum CONST_DIEPFLAGS {

	DIEP_DURATION             =  0x00000001,
	DIEP_SAMPLEPERIOD         =  0x00000002,
	DIEP_GAIN                 =  0x00000004,
	DIEP_TRIGGERBUTTON        =  0x00000008,
	DIEP_TRIGGERREPEATINTERVAL=  0x00000010,
	DIEP_AXES                =   0x00000020,
	DIEP_DIRECTION           =   0x00000040,
	DIEP_ENVELOPE            =   0x00000080,
	DIEP_TYPESPECIFICPARAMS  =   0x00000100,
	DIEP_ALLPARAMS        =      0x000003FF,
	DIEP_START            =      0x20000000,
	DIEP_NORESTART        =      0x40000000,
	DIEP_NODOWNLOAD       =      0x80000000,
	//DIEP_NOTRIGGER      =      0xFFFFFFFF,
	DIEP_STARTDELAY	      =	     0x00000200,

	//DIEP_GETVALID	      =	     0x000003FF,
	//DIEP_SETVALID	      =	     0xE00003FF,
	//DIEP_USESOBJECTS      =	     0x00000028,
	//DIEP_USESCOORDS       =	     0x00000040,
	//DIEP_VALID	      =	     0x80000001,
	//DIEP_DRIVER	      =	     0x00000001,


} CONST_DIEPFLAGS;


 [helpcontext(84150)]
typedef enum CONST_DIEGESFLAGS {
	DIEGES_PLAYING       =       0x00000001,
	DIEGES_EMULATED      =       0x00000002
} CONST_DIEGESFLAGS;


	

 [helpcontext(84153)]
typedef enum CONST_DIESFLAGS {
	DIES_SOLO            =       0x00000001,
	DIES_NODOWNLOAD      =       0x80000000
} CONST_DIESFLAGS;
	

 [helpcontext(84168)]
typedef enum CONST_DISFFCFLAGS {
	DISFFC_RESET        =    0x00000001,
	DISFFC_STOPALL      =    0x00000002,
	DISFFC_PAUSE        =    0x00000004,
	DISFFC_CONTINUE     =    0x00000008,
	DISFFC_SETACTUATORSON  = 0x00000010,
	DISFFC_SETACTUATORSOFF = 0x00000020,
} CONST_DISFFCFLAGS;

 [helpcontext(84156)]
typedef enum CONST_DIGFFSFLAGS {
	DIGFFS_EMPTY        =    0x00000001,
	DIGFFS_STOPPED      =    0x00000002,
	DIGFFS_PAUSED       =    0x00000004,
	DIGFFS_ACTUATORSON  =    0x00000010,
	DIGFFS_ACTUATORSOFF =    0x00000020,
	DIGFFS_POWERON      =    0x00000040,
	DIGFFS_POWEROFF     =    0x00000080,
	DIGFFS_SAFETYSWITCHON =  0x00000100,
	DIGFFS_SAFETYSWITCHOFF = 0x00000200,
	DIGFFS_USERFFSWITCHON  = 0x00000400,
	DIGFFS_USERFFSWITCHOFF = 0x00000800,
	DIGFFS_DEVICELOST      = 0x80000000
} CONST_DIGFFSFLAGS;

 [helpcontext(84167)]
typedef enum CONST_DISDDFLAGS {
        DISDD_DEFAULT  =0,
        DISDD_CONTINUE = 1
} CONST_DISDDFLAGS;


 [helpcontext(84137)]
typedef enum CONST_DICONDITIONFLAGS {		
	DICONDITION_USE_BOTH_AXES=1,
	DICONDITION_USE_DIRECTION =2
} CONST_DICONDITIONFLAGS;

#endif 


    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Input Structures
    // 
    ///////////////////////////////////////////////////////////////////////////


#ifdef C_ONLY


	//replaced by object
    	[hidden, helpcontext(84849)]
    	typedef struct DIDEVICEINSTANCE_CDESC {
    		BSTR			strGuidInstance;
    		BSTR			strGuidProduct;
		LONG		    	lDevType;
    		BSTR			strInstanceName;
    		BSTR			strProductName;
    		BSTR			strGuidFFDriver;
    		SHORT			nUsagePage;
    		SHORT			nUsage;
		I_dxj_DirectInputDevice8	*device;
    	} DIDEVICEINSTANCE_CDESC;
    
    
	//replaced by object
    	[hidden, helpcontext(84850)]
    	typedef struct DIDEVICEOBJECTINSTANCE_CDESC {
    		[hidden]	LONG lSize;
    		BSTR		strGuidType;
    		LONG		lOfs;
    		CONST_DIDFTFLAGS	lType;
    		CONST_DIDEVICEOBJINSTANCEFLAGS		lFlags;
    		BSTR strName;
    		LONG lFFMaxForce;
    		LONG lFFForceResolution;
    		SHORT nCollectionNumber;
    		SHORT nDesignatorIndex;
    		SHORT nUsagePage;
    		SHORT nUsage;
    		LONG lDimension;
    		SHORT nExponent;
    		SHORT nReserved;
    		} DIDEVICEOBJECTINSTANCE_CDESC;
    
    
#endif


    
    	//
    	// DInput
    	//
 [helpcontext(84122)]
	typedef struct DIMOUSESTATE_CDESC {
	    LONG    lX;
	    LONG    lY;
	    LONG    lZ;
	    BYTE    Buttons[4];
	} DIMOUSESTATE_CDESC;

 [helpcontext(84123)]
	typedef struct DIMOUSESTATE2_CDESC {
	    LONG    lX;
	    LONG    lY;
	    LONG    lZ;
	    BYTE    Buttons[8];
	} DIMOUSESTATE2_CDESC;



    	[helpcontext(405100)]
    	typedef struct DIDEVCAPS_CDESC {
    		[hidden]	LONG lSize;
    		CONST_DIDEVCAPSFLAGS lFlags;		
		LONG lDevType;
    		LONG lAxes;
    		LONG lButtons;
    		LONG lPOVs;
    		LONG lFFSamplePeriod;
    		LONG lFFMinTimeResolution;
    		LONG lFirmwareRevision;
    		LONG lHardwareRevision;
    		LONG lDriverVersion;
    	} DIDEVCAPS_CDESC;
    
 [helpcontext(84116)]
    	typedef struct DIDEVICEOBJECTDATA_CDESC{
    		LONG lOfs;
    		LONG lData;
    		LONG lTimeStamp;
    		LONG lSequence;
		LONG lUserData;
    	} DIDEVICEOBJECTDATA_CDESC;
    
    
 [helpcontext(84128)]
    	typedef struct DIPROPRANGE_CDESC {
    			LONG lObj;
    			LONG lHow;
    			LONG lMin;
    			LONG lMax;
    	} DIPROPRANGE_CDESC;
    

 [helpcontext(84129)]
    	typedef struct DIPROPSTRING_CDESC {
    			LONG lObj;
    			LONG lHow;
    			BSTR PropString;
    	} DIPROPSTRING_CDESC;

 [helpcontext(84126)]
    	typedef struct DIPROPGUIDANDPATH_CDESC {    			
    			LONG lObj;
    			LONG lHow;
    			BSTR Guid;
    			BSTR Path;
    	} DIPROPGUIDANDPATH_CDESC;

    
 [helpcontext(84127)]
    	typedef struct DIPROPLONG_CDESC {
    			LONG lObj;
    			LONG lHow;
    			LONG lData;			
    	} DIPROPLONG_CDESC;
    

    	//Added for bug #41819
	
	typedef struct CPOINT_CDESC {
			LONG lp;
			LONG dwLog;
	} CPOINT_CDESC;

	typedef struct DIPROPCPOINTS_CDESC {
			LONG lObj;
			LONG lHow;
			LONG dwCPointsNum;
			CPOINT_CDESC cp[MAXCPOINTSNUM_CDESC];
	} DIPROPCPOINTS_CDESC;
	
	typedef struct DIPROPPOINTER_CDESC {
			LONG lObj;
			LONG lHow;
			LONG uData;
	} DIPROPPOINTER_CDESC;

    	//End bug #41819				


 [helpcontext(84124)]
    	typedef struct DIOBJECTDATAFORMAT_CDESC {
    			BSTR strGuid;
    			LONG lOfs;
			CONST_DIDFTFLAGS				 lType;
    			CONST_DIDEVICEOBJINSTANCEFLAGS lFlags;
    	} DIOBJECTDATAFORMAT_CDESC;
    
    

    	[helpcontext(405600)]
    	typedef struct DIDATAFORMAT_CDESC {
    	[hidden]	LONG lSize;
    			LONG lObjSize;
    			CONST_DIDATAFORMATFLAGS lFlags;
    			LONG dataSize;
    			LONG numObjs;
    	[hidden]	LONG pData;
    	} DIDATAFORMAT_CDESC;


 [helpcontext(84106)]
  	typedef struct DIACTION_CDESC {
  					LONG	    	lAppData;
  					LONG		lSemantic;
  					LONG		lFlags;
  					BSTR		ActionName;
			[hidden]	DXGUID_CDESC	guidInstance;
					LONG 		lObjId;
					LONG 		lHow;

  	} DIACTION_CDESC;
  
      
 [helpcontext(84107)]
  	typedef struct DIACTIONFORMAT_CDESC {
       [hidden]  LONG		lActionSize;
                 LONG		lDataSize;
                 BSTR		ActionMapName;
                 BSTR        	guidActionMap;
                 LONG		lGenre;
   		 LONG        	lAxisMin;
  		 LONG        	lAxisMax;
                 LONG        	lBufferSize;
                 LONG		lActionCount;
  		 SAFEARRAY(DIACTION_CDESC) ActionArray;
 

  	} DIACTIONFORMAT_CDESC;



 [helpcontext(84108)]
	typedef struct DICOLORSET_CDESC {
	    LONG cTextFore;
	    LONG cTextHighlight;
    	    LONG cCalloutLine;
	    LONG cCalloutHighlight;
	    LONG cBorder;
	    LONG cControlFill;
	    LONG cHighlightFill;
	    LONG cAreaFill;
	} DICOLORSET_CDESC;

 [helpcontext(84118)]
	typedef struct DICONFIGUREDEVICESPARAMS_CDESC {
	  	LONG				UserCount;
		SAFEARRAY(BSTR) 		UserNames;
		LONG    			FormatCount;
		SAFEARRAY(DIACTIONFORMAT_CDESC) ActionFormats;
#ifdef _WIN64
		HWND 				hwnd;
#else
		LONG 				hwnd;
#endif
		DICOLORSET_CDESC 		dics;
		IUnknown 			*DDSTarget;
	} DICONFIGUREDEVICESPARAMS_CDESC;


  
    
    
 [helpcontext(84121)]
    	typedef struct DIKEYBOARDSTATE_CDESC {
    			Byte key[256];
    	} DIKEYBOARDSTATE_CDESC;
    
    
    
 [helpcontext(84119)]
    	typedef struct DIJOYSTATE_CDESC {
    			LONG x;
    			LONG y;
    			LONG z;
    			LONG rx;
    			LONG ry;
    			LONG rz;
    			LONG slider[2];
    			LONG POV[4];
    			Byte buttons[32];
    	}   DIJOYSTATE_CDESC;
    
    
 [helpcontext(84120)]
          typedef struct DIJOYSTATE2_CDESC {
    			LONG x;
    			LONG y;
    			LONG z;
    			LONG rx;
    			LONG ry;
    			LONG rz;
    			LONG slider[2];
    			LONG POV[4];
    			Byte buttons[128];
    			LONG vx;
    			LONG vy;
    			LONG vz;
    			LONG vrx;
    			LONG vry;
    			LONG vrz;
    			LONG vslider[2];
    			LONG ax;
    			LONG ay;
    			LONG az;
    			LONG arx;
    			LONG ary;
    			LONG arz;
    			LONG aslider[2];
    			LONG fx;
    			LONG fy;
    			LONG fz;
    			LONG frx;
    			LONG fry;
    			LONG frz;
    			LONG fslider[2];
    	} DIJOYSTATE2_CDESC;


 [helpcontext(84818)]
    typedef struct DIENVELOPE_CDESC {
       [hidden] LONG lSize;  
       LONG lAttackLevel; 
       LONG lAttackTime; 
       LONG lFadeLevel; 
       LONG lFadeTime; 
    } DIENVELOPE_CDESC;
    
 [helpcontext(84130)]
    typedef struct DIRAMPFORCE_CDESC {
    	LONG lRangeStart;	//ramp force
    	LONG lRangeEnd;		//ramp force
    } DIRAMPFORCE_CDESC;
      
 [helpcontext(84125)]
    typedef struct DIPERIODICFORCE_CDESC {
    	LONG lMagnitude;	//periodic 
    	LONG lOffset;		//periodic
    	LONG lPhase;		//periodic
    	LONG lPeriod;		//periodic
    } DIPERIODICFORCE_CDESC;
    
    [helpcontext(408000)]
    typedef struct DICONDITION_CDESC {
    	LONG lOffset;				//condition
    	LONG lPositiveCoefficient;	//condition
    	LONG lNegativeCoefficient;	//condition
    	LONG lPositiveSaturation;	//condition
    	LONG lNegativeSaturation;	//condition
    	LONG lDeadBand;				//condition	
    	//VARIANT_BOOL bDirectional;	//condition
    } DICONDITION_CDESC;
    
 [helpcontext(84111)]
    typedef struct DICONSTANTFORCE_CDESC {
    	LONG lMagnitude;			
    } DICONSTANTFORCE_CDESC;
    
	//replaced by object
    	[hidden, helpcontext(84853)]
    typedef struct DIAXISOFFSETS_CDESC{
    	LONG x;			
    	LONG y;			
    } DIAXISOFFSETS_CDESC;
    
 [helpcontext(84117)]
    typedef struct DIEFFECT_CDESC {
          [hidden] LONG dwSize;
    	LONG lFlags;						//dwTriggerButton and rgdwAxes 
    									//use	DIEFF_OBJECTIDS 
    									//		DIEFF_OBJECTOFFSETS 
    									//rglDirection
    									//depends	DIEFF_CARTESIAN 
    									//			DIEFF_POLAR 
    									//	DIEFF_SPHERICAL 
    	LONG lDuration;					//durration of the effect
        LONG lSamplePeriod;				//period
    	LONG lGain;						//magnitude???
    	LONG lTriggerButton;				//DIEFF_OBJECTIDS 
    	LONG lTriggerRepeatInterval;
    	[hidden] LONG cAxes;			//4
    	[hidden] LONG lprgdwAxes;		//DIEFF_OBJECTIDS 
    									//
        [hidden] LONG lprglDirection;  
    	[hidden] LONG lpEnvelope; 
        [hidden] LONG cbTypeSpecificParams; 
    	[hidden] LONG lpvTypeSpecificParams; 
    
        LONG lStartDelay; 
    	LONG x;							// x
    	LONG y;							// y	
    	
    
    	DIRAMPFORCE_CDESC rampForce;
    	DIPERIODICFORCE_CDESC periodicForce;	
    	DICONSTANTFORCE_CDESC constantForce;	
    	DICONDITION_CDESC conditionX;					
    	DICONDITION_CDESC conditionY;
    	CONST_DICONDITIONFLAGS  conditionFlags;					
    	BOOL bUseEnvelope;
    	DIENVELOPE_CDESC envelope;
    	[hidden] DIAXISOFFSETS_CDESC axisOffsets;
    } DIEFFECT_CDESC;
    


 [helpcontext(84114)]
    typedef struct DIDEVICEIMAGEINFO_CDESC {
	BSTR ImagePath;
        LONG Flags;
        LONG ViewID;
	RECT_CDESC OverlayRect;
	LONG ObjId;
	LONG ValidPts;
	POINT_CDESC CalloutLine[5];
	RECT_CDESC CalloutRect;
	LONG TextAlign;
    } DIDEVICEIMAGEINFO_CDESC;
		

 [helpcontext(84115)]
    typedef struct DIDEVICEIMAGEINFOHEADER_CDESC 
    {
		LONG Views;
		LONG Buttons;
		LONG Axes;
		LONG POVs;
		LONG ImageCount;
		SAFEARRAY(DIDEVICEIMAGEINFO_CDESC) Images;
    } DIDEVICEIMAGEINFOHEADER_CDESC;



    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Input Interfaces 
    // 
    ///////////////////////////////////////////////////////////////////////////
  

  	[
    		object,		
  		uuid(819D20C1-8AD2-11d3-AC85-00C04FC2C602),
  		helpstring("I_dxj_DirectInput8 Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(313800)
    	]
  	interface I_dxj_DirectInput8 : IUnknown	
    	{
    		import "oaidl.idl";        
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
          	[helpcontext(84029)]		HRESULT createDevice([in] BSTR guid, [out,retval] I_dxj_DirectInputDevice8 **dev);        
  		[helpcontext(84027)]		HRESULT getDIDevices([in] CONST_DI8DEVICETYPE deviceType, [in] CONST_DIENUMDEVICESFLAGS flags, [out,retval] I_dxj_DIEnumDevices8 **retVal);
            	[helpcontext(84026)]		HRESULT GetDeviceStatus([in] BSTR guid, [out,retval] VARIANT_BOOL *status);
            	#ifdef _WIN64
		[helpcontext(84028)]		HRESULT RunControlPanel([in] HWND hwndOwner);                
		#else
		[helpcontext(84028)]		HRESULT RunControlPanel([in] LONG hwndOwner);                
		#endif
  		
		
  		[helpcontext(84025)]		HRESULT getDevicesBySemantics([in] BSTR str1, [in] DIACTIONFORMAT_CDESC *format,  [in] LONG flags, [out,retval] I_dxj_DIEnumDevices8 **ret);
  		
		[helpcontext(84023)]		HRESULT ConfigureDevices   (
#ifdef _WIN64
						[in] HANDLE hEvent,
#else
						[in] LONG hEvent,
#endif
						[in] DICONFIGUREDEVICESPARAMS_CDESC *CDParams,
						[in] LONG flags);


		//Do we need Find Device?

    	};
    
    	[
    		object,
  		uuid(819D20C2-8AD2-11d3-AC85-00C04FC2C602),,
 	        helpstring("I_dxj_DirectInputDeviceInstance8 Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(314000)
    	]
  	interface I_dxj_DirectInputDeviceInstance8 : IUnknown
    	{
    		[helpcontext(84066)]		HRESULT getGuidInstance([out,retval] BSTR *ret);
    		[helpcontext(84067)]		HRESULT getGuidProduct([out,retval] BSTR *ret);
    		[helpcontext(84069)]		HRESULT getProductName([out,retval] BSTR *ret);
    		[helpcontext(84068)]		HRESULT getInstanceName([out,retval] BSTR *ret);
    		[helpcontext(84065)]		HRESULT getGuidFFDriver([out,retval] BSTR *ret);
    		[helpcontext(84071)]		HRESULT getUsagePage([out,retval] SHORT *ret);
    		[helpcontext(84070)]		HRESULT getUsage([out,retval] SHORT *ret);
    		[helpcontext(84064)]		HRESULT getDevType([out,retval] LONG *ret);
  	};
    
    
    
    	[
    		object,
    		uuid(9F76FA05-8E92-11d1-8808-00C04FC2C602),
    	      helpstring("I_dxj_DirectInputDeviceObjectInstance Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(314200)
    	]
    	interface I_dxj_DirectInputDeviceObjectInstance : IUnknown
    	{
    		[helpcontext(84078)]		HRESULT getGuidType([out,retval] BSTR *ret);
    		[helpcontext(84080)]		HRESULT getOfs([out,retval] LONG *ret);
    		[helpcontext(84081)]		HRESULT getType([out,retval] LONG *ret);
    		[helpcontext(84077)]		HRESULT getFlags([out,retval] CONST_DIDEVICEOBJINSTANCEFLAGS *ret);
    		[helpcontext(84079)]		HRESULT getName([out,retval] BSTR *ret);
    		[helpcontext(84073)]		HRESULT getCollectionNumber([out,retval] SHORT *ret);
    		[helpcontext(84074)]		HRESULT getDesignatorIndex([out,retval] SHORT *ret);
    		[helpcontext(84083)]		HRESULT getUsagePage([out,retval] SHORT *ret);
    		[helpcontext(84082)]		HRESULT getUsage([out,retval] SHORT *ret);
    		[helpcontext(84075)]		HRESULT getDimension([out,retval] LONG *ret);
    		[helpcontext(84076)]		HRESULT getExponent([out,retval] SHORT *ret);
    		
    	};

	#if 0
    	[
    		object,
  		uuid(952E7826-33B4-4f62-92D4-AB7F15D26748),
 	 	helpstring("I_dxj_DirectInputFileEffects8 Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(94400)
    	]
	interface I_dxj_DirectInputFileEffects8 : IUnknown
	{
    		[helpcontext(81076)]		HRESULT GetCount([out,retval] LONG *c);
    		[helpcontext(80076)]		HRESULT GetName([in] LONG,[out,retval] BSTR *ret);
		[helpcontext(80476)]		HRESULT GetEffect([in] LONG index, [out] DIEFFECT_CDESC *effect); 
		[helpcontext(80176)]		HRESULT GetGuid([in] LONG index,  [out,retval] BSTR *ret);
		[helpcontext(80276)]		HRESULT AddEffect([in] BSTR name, [in] BSTR guid,[in] DIEFFECT_CDESC *effect);
		[helpcontext(80376)]		HRESULT Empty();	
	
	}
	#endif

    	[
    		object,
  		uuid(819D20C3-8AD2-11d3-AC85-00C04FC2C602),
 	 	helpstring("I_dxj_DirectInputDevice8 Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(314400)
    	]
	interface I_dxj_DirectInputDevice8 : IUnknown 
    	{
    		import "oaidl.idl";
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
            [helpcontext(84030)]		HRESULT acquire();
    	    [helpcontext(84038)]		HRESULT getDeviceObjectsEnum([in] CONST_DIDFTFLAGS flags,[out,retval] I_dxj_DIEnumDeviceObjects **ppret);
            [helpcontext(84035)]		HRESULT getCapabilities([in,out] DIDEVCAPS_CDESC *caps);
    	    [helpcontext(84036)]		HRESULT getDeviceData( [in,out] SAFEARRAY(DIDEVICEOBJECTDATA_CDESC) *deviceObjectDataArray,[in] CONST_DIDGDDFLAGS flags,[out,retval] LONG *c);		
  	    [helpcontext(84363)]		HRESULT getDeviceInfo([out,retval] I_dxj_DirectInputDeviceInstance8 **deviceInstance);
            [helpcontext(84042)]		HRESULT getDeviceStateKeyboard ([in,out] DIKEYBOARDSTATE_CDESC *state);
            [helpcontext(84043)]		HRESULT getDeviceStateMouse    ([in,out] DIMOUSESTATE_CDESC *state);
            [helpcontext(84044)]		HRESULT getDeviceStateMouse2    ([in,out] DIMOUSESTATE2_CDESC *state);
            [helpcontext(84040)]		HRESULT getDeviceStateJoystick  ([in,out] DIJOYSTATE_CDESC *state);
            [helpcontext(84041)]		HRESULT getDeviceStateJoystick2 ([in,out] DIJOYSTATE2_CDESC *state);        		
    	    [helpcontext(84039)]		HRESULT getDeviceState([in] LONG cb, [in] void* state);
            [helpcontext(84072)]		HRESULT getObjectInfo( [in] LONG obj, [in] CONST_DIPHFLAGS how, [out,retval] I_dxj_DirectInputDeviceObjectInstance **ret);
            [helpcontext(84050)]		HRESULT getProperty([in] BSTR guid,[out] void *propertyInfo);
#ifdef _WIN64
            [helpcontext(84052)]		HRESULT runControlPanel([in] HWND hwnd);
            [helpcontext(84057)]		HRESULT setCooperativeLevel([in] HWND hwnd, [in] CONST_DISCLFLAGS flags);
#else
            [helpcontext(84052)]		HRESULT runControlPanel([in] LONG hwnd);
            [helpcontext(84057)]		HRESULT setCooperativeLevel([in] LONG hwnd, [in] CONST_DISCLFLAGS flags);
#endif
    	    [helpcontext(84056)]		HRESULT setCommonDataFormat([in] CONST_DICOMMONDATAFORMATS format);
            [helpcontext(84058)]		HRESULT setDataFormat([in] DIDATAFORMAT_CDESC *format,SAFEARRAY(DIOBJECTDATAFORMAT_CDESC) * formatArray);
#ifdef _WIN64
            [helpcontext(84059)]		HRESULT setEventNotification([in] HANDLE hEvent);
#else
            [helpcontext(84059)]		HRESULT setEventNotification([in] LONG hEvent);
#endif
            [helpcontext(84360)]		HRESULT setProperty([in] BSTR guid,[in] void *propertyInfo);
            [helpcontext(84361)]		HRESULT unacquire();
    	    [helpcontext(84051)]		HRESULT poll();
    
    
    
    	    [helpcontext(84033)]		HRESULT createEffect(
    			[in] BSTR effectGuid,			
    			[in] DIEFFECT_CDESC *effectinfo,
    			[out,retval] I_dxj_DirectInputEffect **ret);
    	
   	   [helpcontext(84032)]		HRESULT createCustomEffect(			
    			[in] DIEFFECT_CDESC *effectinfo,
    			[in] LONG channels,
    			[in] LONG samplePeriod,
    			[in] LONG nSamples,
    			[in] SAFEARRAY(LONG) *sampledata,
    			[out,retval] I_dxj_DirectInputEffect **ret);
    
    		
    
    
    	   [helpcontext(84053)]		HRESULT sendDeviceData([in] LONG count,[in] SAFEARRAY(DIDEVICEOBJECTDATA_CDESC) *data, [in] CONST_DISDDFLAGS flags, [out,retval] LONG *retcount);
    	   [helpcontext(84054)]		HRESULT sendForceFeedbackCommand([in] CONST_DISFFCFLAGS flags);
    	   [helpcontext(84046)]		HRESULT getForceFeedbackState([out,retval] CONST_DIGFFSFLAGS *state);
    	   [helpcontext(84099)]		HRESULT getEffectsEnum([in] CONST_DIEFTFLAGS effType,[out,retval] I_dxj_DirectInputEnumEffects **ret);
    
  
   		
  	   [helpcontext(84031)]		HRESULT BuildActionMap([in,out] DIACTIONFORMAT_CDESC *format, [in] BSTR username, [in]  LONG flags );
  	   [helpcontext(84055)]		HRESULT SetActionMap([in,out] DIACTIONFORMAT_CDESC *format, [in] BSTR username, [in]  LONG flags );
           [helpcontext(84047)]		HRESULT GetImageInfo([out] 	DIDEVICEIMAGEINFOHEADER_CDESC *info);
           [helpcontext(84048)]		HRESULT GetImageInfoCount([out,retval] LONG *c);
           [helpcontext(84062)]		HRESULT WriteEffectToFile( [in] BSTR filename,[in] LONG flags, [in] BSTR guid, [in] BSTR name, [in] DIEFFECT_CDESC *CoverEffect);
           [helpcontext(84084)]		HRESULT CreateEffectFromFile([in] BSTR filename, [in] LONG flags, [in] BSTR effectName,[out,retval]	I_dxj_DirectInputEffect **ret);




    	  
    	};
    
    	[
    		object,
    		uuid(BCAA7DA9-F7EF-11d2-93FD-00C04FC2C602),		
    	      helpstring("I_dxj_DirectInputEffect Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(314600)
    	]
    	interface I_dxj_DirectInputEffect : IUnknown 
    	{
    		import "oaidl.idl";
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		[helpcontext(84085)]		HRESULT download();
    		[helpcontext(84086)]		HRESULT getEffectGuid([out,retval] BSTR *guid);
    		[helpcontext(84087)]		HRESULT getEffectStatus([out,retval] LONG *ret);
    		[helpcontext(84890)]		HRESULT start([in] LONG iterations, [in] LONG flags);
    		[helpcontext(84891)]		HRESULT stop();
    		[helpcontext(84892)]		HRESULT unload();
    		[helpcontext(84089)]		HRESULT setParameters([in] DIEFFECT_CDESC *effectinfo,[in] CONST_DIEPFLAGS flags);
    		[helpcontext(84088)]		HRESULT getParameters([in,out] DIEFFECT_CDESC *effectinfo);
    	};
    
    	[
    		object,
    		uuid(BCAA7DAA-F7EF-11d2-93FD-00C04FC2C602),		
            	helpstring("I_dxj_DirectInputEnumEffects Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(314800)
    	]
    	interface I_dxj_DirectInputEnumEffects : IUnknown 
    	{
    		import "oaidl.idl";
    		[helpcontext(84100)]		HRESULT getCount([out,retval] LONG *ret);
    		[helpcontext(84102)]		HRESULT getEffectGuid([in] LONG i,[out,retval] BSTR *ret);
    		[helpcontext(84105)]		HRESULT getType([in] LONG i,[out,retval] CONST_DIEFTFLAGS *ret);
    		[helpcontext(84104)]		HRESULT getStaticParams([in] LONG i,[out,retval] CONST_DIEPFLAGS *ret);
    		[helpcontext(84101)]		HRESULT getDynamicParams([in] LONG i,[out,retval] CONST_DIEPFLAGS *ret);
    		[helpcontext(84103)]		HRESULT getName([in] LONG i, [out,retval] BSTR *ret);
    	};		
    
    
    
    	[
    		object,
    		uuid(9F76FA08-8E92-11d1-8808-00C04FC2C602),		
    		helpstring("I_dxj_DIEnumDeviceObjects Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(315000)
    	]
    	interface I_dxj_DIEnumDeviceObjects : IUnknown
    	{
    			import "oaidl.idl";
    			[helpcontext(84095)]		HRESULT getItem( [in]LONG index, [out,retval] I_dxj_DirectInputDeviceObjectInstance **info);
    			[helpcontext(84394)]		HRESULT getCount([out,retval]LONG *count);		
    	};
    	
    
    	[
    		object,		
  		uuid(819D20C4-8AD2-11d3-AC85-00C04FC2C602),	
  		helpstring("I_dxj_DIEnumDevices8 Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(315200)
    	]
    
  	interface I_dxj_DIEnumDevices8 : IUnknown
    	{
    			import "oaidl.idl";
  			[helpcontext(84098)]		HRESULT getItem( [in]LONG index, [out,retval] I_dxj_DirectInputDeviceInstance8 **info);
    			[helpcontext(84097)]		HRESULT getCount([out,retval]LONG *count);		
    	};
  
