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;

}
Example #2
0
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);
 }