If you are using the joystick in foreground mode (see Cooperative Levels) you may lose the device when the focus shifts to another application.
You can check for the DIERR_INPUTLOST return value from the IDirectInputDevice::GetDeviceData or IDirectInputDevice::GetDeviceState methods, and attempt to reacquire the joystick if necessary. (See Acquiring Devices.)
Note You should not attempt to reacquire the joystick on getting a DIERR_NOTACQUIRED error. If you do, you are likely to get caught in an infinite loop: acquisition will fail, you will get another DIERR_NOTACQUIRED error, and so on.
Because access to the joystick is not going to be lost except when your application moves to the background — unlike the mouse and keyboard, the joystick is never used by the Windows system — an alternative to the above method is to reacquire the device in response to a WM_ACTIVATE message.