2016-10-21 4 views
0

WPFアプリでXbox Oneコントローラーを読むことはできますか?私はUSBケーブルで接続しています。私はボタンからブール値を取得し、スティックやトリガーからアナログ値を読み取ることができるようにしたいと思います。 私はこれらの値をPollu 3piロボットを制御するために使用します。WPF AppでXboxコントローラーを読む

これを達成する簡単な方法はありますか?

+1

あなたは[SharpDXの](HTTPを使用することができます:// sharpdx.org/)DirectInputまたは同様のもの。これは、任意の入力装置の比較的容易な相互作用を可能にする。 – SharpShade

+0

XboxコントローラがDirectInputを使用せず、デフォルトのUSBドライバを使用する場合、https://msdn.microsoft.com/en-us/library/windows/hardware/ff540174%28v=vs.85%29.aspxを使用することができます?f = 255&MSPPError = -2147217396 – bradbury9

答えて

2

これを試しましたか? Code4Funがコントローラのお手伝いをするかもしれません。ウェブサイトから

https://elbruno.com/2014/06/28/coding4fun-xboxone-game-controller-c-fun-time-2/

WPFアプリケーションコードのメインビューは、次の

using System; 
using System.ComponentModel; 
using System.Runtime.CompilerServices; 
using System.Windows; 
using System.Windows.Threading; 
using SharpDX.XInput; 

namespace ElBruno.GameController 
{ 
    public partial class MainWindow : INotifyPropertyChanged 
    { 
     DispatcherTimer _timer = new DispatcherTimer(); 
     private string _leftAxis; 
     private string _rightAxis; 
     private string _buttons; 
     private Controller _controller; 

    public MainWindow() 
    { 
     DataContext = this; 
     Loaded += MainWindow_Loaded; 
     Closing += MainWindow_Closing; 
     InitializeComponent(); 
     _timer = new DispatcherTimer {Interval = TimeSpan.FromMilliseconds(100)}; 
     _timer.Tick += _timer_Tick; 
     _timer.Start(); 
    } 

    void _timer_Tick(object sender, EventArgs e) 
    { 
     DisplayControllerInformation(); 
    } 

    void DisplayControllerInformation() 
    { 
     var state = _controller.GetState(); 
     LeftAxis = string.Format("X: {0} Y: {1}", state.Gamepad.LeftThumbX, state.Gamepad.LeftThumbY); 
     RightAxis = string.Format("X: {0} Y: {1}", state.Gamepad.RightThumbX, state.Gamepad.RightThumbX); 
     //Buttons = string.Format("A: {0} B: {1} X: {2} Y: {3}", state.Gamepad.Buttons.ToString(), state.Gamepad.LeftThumbY); 
     Buttons = string.Format("{0}", state.Gamepad.Buttons); 

    } 

    void MainWindow_Closing(object sender, CancelEventArgs e) 
    { 
     _controller = null; 
    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     _controller = new Controller(UserIndex.One); 
     if (_controller.IsConnected) return; 
     MessageBox.Show("Game Controller is not connected ... you know ;)"); 
     App.Current.Shutdown(); 
    } 

    #region Properties 

    public string LeftAxis 
    { 
     get 
     { 
      return _leftAxis; 
     } 
     set 
     { 
      if (value == _leftAxis) return; 
      _leftAxis = value; 
      OnPropertyChanged(); 
     } 
    } 

    public string RightAxis 
    { 
     get 
     { 
      return _rightAxis; 
     } 
     set 
     { 
      if (value == _rightAxis) return; 
      _rightAxis = value; 
      OnPropertyChanged(); 
     } 
    } 

    public string Buttons 
    { 
     get 
     { 
      return _buttons; 
     } 
     set 
     { 
      if (value == _buttons) return; 
      _buttons = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion 
} 

}

関連する問題