BOOL CALLBACK EnumSemanticsCallback //Callback function that receive DirectInput devices ( LPCDIDEVICEINSTANCE lpddi, //Adress of structure describing device instance LPDIRECTINPUTDEVICE8 lpdid, //Pointer to device interface DWORD dwFlags, //Flags telling why being enumerated DWORD dwRemaining, //Number of devices remaining to be enumerated LPVOID pvRef) //Application defined value. Always NULL here { HRESULT hr; if (GET_DIDEVICE_TYPE(lpddi->dwDevType) == DI8DEVTYPE_MOUSE || GET_DIDEVICE_TYPE(lpddi->dwDevType) == DI8DEVTYPE_KEYBOARD ) return DIENUM_CONTINUE; printf("Device %s\n",lpddi->tszProductName); #define X(x) if (dwFlags & x) printf("\tdwFlags |= "#x"\n"); X(DIEDBS_MAPPEDPRI1) X(DIEDBS_MAPPEDPRI2) X(DIEDBS_RECENTDEVICE) X(DIEDBS_NEWDEVICE) #undef X hr = lpdid->BuildActionMap(&g_ActionFormat,NULL,DIDBAM_INITIALIZE); _dump_diactionformatA(&g_ActionFormat); return DIENUM_CONTINUE; }
BOOL CALLBACK EnumDevicesBySemanticsCallback( LPCDIDEVICEINSTANCE lpddi, LPDIRECTINPUTDEVICE8 lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef) { HRESULT hr; hr = lpdid->BuildActionMap(&g_DIActionFormat, NULL, DIDBAM_INITIALIZE ); if (FAILED(hr)){ return DIENUM_CONTINUE; } hr = lpdid->SetActionMap(&g_DIActionFormat, NULL, DIDSAM_DEFAULT); if (FAILED(hr)){ return DIENUM_CONTINUE; } hr = lpdid->SetCooperativeLevel(sysInf.hWnd,DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); lpdid->AddRef(); g_pDIDevice[g_iDIDeviceNum++] = lpdid; if (MAX_DEV <= g_iDIDeviceNum) DIENUM_STOP; return DIENUM_CONTINUE; } // EnumDevicesBySemanticsCallback
HRESULT _stdcall BuildActionMap(LPDIACTIONFORMATW a,LPCWSTR b,DWORD c) { return RealDevice->BuildActionMap(a,b,c); }