If your application is using the joystick in foreground mode (see Cooperative Levels), it will lose the device when the focus shifts to another application.
Check for the DIERR_INPUTLOST return value from the IDirectInputDevice8::GetDeviceData or the IDirectInputDevice8::GetDeviceState method 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 could get caught in an infinite loop: acquisition would fail again, you would get another DIERR_NOTACQUIRED error, and so on.
Because access to the joystick is not 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 method is to reacquire the device in response to a WM_ACTIVATE message.