FCoreDelegates::OnControllerConnectionChange is broadcasted when Controller Connected/Disconnected
You can scan for xinput devices on windows with something like (Super wonky):
You can combine this with listening to the main connection change delegate to maintain a list of valid Controllers.
#if PLATFORM_WINDOWS
XINPUT_STATE XInputStates[MAX_GAMEPAD_COUNT];
for (int32 ControllerIdx = 0; ControllerIdx < MAX_GAMEPAD_COUNT; ControllerIdx++)
{
XINPUT_STATE& InputState = XInputStates[ControllerIdx];
bool IsConnected = (XInputGetState(ControllerIdx, &InputState) == ERROR_SUCCESS) ? true : false;
OnGamepadConnected(IsConnected, 0, ControllerIdx);
}
#endif