Exemple #1
0
        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);
        }
Exemple #2
0
 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);
     }
 }