int KeyboardInitialize(void) { if (lpdid) return(1); ddrval = IDirectInput7_CreateDeviceEx(lpDI, &GUID_SysKeyboard, &IID_IDirectInputDevice7, (LPVOID*)&lpdid, 0); if (ddrval != DI_OK) { FCEUD_PrintError("DirectInput: Error creating keyboard device."); return 0; } ddrval = IDirectInputDevice7_SetCooperativeLevel(lpdid, hAppWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); if (ddrval != DI_OK) { FCEUD_PrintError("DirectInput: Error setting keyboard cooperative level."); return 0; } ddrval = IDirectInputDevice7_SetDataFormat(lpdid, &c_dfDIKeyboard); if (ddrval != DI_OK) { FCEUD_PrintError("DirectInput: Error setting keyboard data format."); return 0; } ddrval = IDirectInputDevice7_Acquire(lpdid); /* Not really a fatal error. */ //if(ddrval != DI_OK) //{ // FCEUD_PrintError("DirectInput: Error acquiring keyboard."); // return 0; //} return 1; }
bool directinput::Acquire(LPDIRECTINPUTDEVICE7 device) { HRESULT status = DIERR_INPUTLOST; while(status == DIERR_INPUTLOST || status == DIERR_NOTACQUIRED) { status = IDirectInputDevice7_Acquire(device); } // at this point whatever the status is we can't do anything else // to acquire device return SUCCEEDED(status); }
void KeyboardUpdateState(void) { char tk[256]; ddrval = IDirectInputDevice7_GetDeviceState(lpdid, 256, tk); switch (ddrval) { case DI_OK: memcpy(keys, tk, 256); break; case DIERR_INPUTLOST: case DIERR_NOTACQUIRED: memset(keys, 0, 256); IDirectInputDevice7_Acquire(lpdid); break; } }