public IEnumerable <IHostDeviceInfo> GetAvailableJoysticks() { var list = new List <IHostDeviceInfo>(); try { using (var di = new DirectInput8W()) { var devList = di.EnumDevices(DI8DEVCLASS.GAMECTRL, DIEDFL.ATTACHEDONLY); foreach (var deviceInstance in devList) { var hdi = new HostDeviceInfo( deviceInstance.tszInstanceName, GetDeviceId(deviceInstance.guidInstance)); list.Add(hdi); } } } catch (Exception ex) { Logger.Error(ex); } list.Sort(); list.Insert( 0, new HostDeviceInfo("Keyboard Numpad", KeyboardNumpadId)); list.Insert( 0, new HostDeviceInfo("None", string.Empty)); return(list); }
public void CaptureHostDevice(string hostId) { try { if (hostId == string.Empty) { return; } if (hostId == KeyboardNumpadId) { IsKeyboardStateRequired = true; return; } using (var di = new DirectInput8W()) { var list = di.EnumDevices(DI8DEVCLASS.GAMECTRL, DIEDFL.ATTACHEDONLY); foreach (var deviceInstance in list) { if (string.Compare( GetDeviceId(deviceInstance.guidInstance), hostId, true) != 0) { continue; } var joystick = di.CreateDevice(deviceInstance.guidInstance, null); try { joystick.SetDataFormat(DIDATAFORMAT.c_dfDIJoystick).CheckError(); //joystick.SetCooperativeLevel(_hwnd, DISCL.BACKGROUND | DISCL.NONEXCLUSIVE).CheckError(); // someone replaced hwnd with null to fix app close hung (when MDX was used) joystick.SetCooperativeLevel(IntPtr.Zero, DISCL.BACKGROUND | DISCL.NONEXCLUSIVE).CheckError(); joystick.Acquire().CheckError(); _devices.Add(hostId, joystick); } catch (Exception ex) { Logger.Error(ex); joystick.Dispose(); continue; } ActivateDevice(hostId); } } } catch (Exception ex) { Logger.Error(ex); } }