Checking for Lost Joystick Input

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.