2017-09-06 3 views
1

Je suis en train de se déplacer par programme la position du pointeur sur une application UWP fonctionnant sur un Raspberry Pi 3. Quand je lance l'application sur ma machine locale, la ligne:déplacer Programatically curseur sur Raspberry Pi3

Window.Current.CoreWindow.PointerPosition = new Point(512, 384); 

œuvres comme prévu.

Lorsque je déploie l'application sur le Pi 3, le code ci-dessus n'a aucun effet. Y a-t-il un autre moyen de le faire? Mon but final est d'utiliser les mouvements de la souris dans la direction X comme entrée d'une fonction d'accord. Je dois être capable de détecter indéfiniment le mouvement dans la direction X. La façon dont j'essaye de le faire maintenant est d'utiliser l'événement PointerMoved. Le problème avec ceci est que lorsque le pointeur atteint la limite gauche ou droite de la fenêtre, il ne déclenche plus l'événement si je continue à déplacer la souris dans cette direction. Ma solution simple consistait à centrer le curseur par programmation s'il atteignait la limite. Comme je l'ai dit, cela fonctionne très bien sur mon PC local, mais ne fonctionne pas sur le Raspberry Pi.

+0

Si l'événement cesse de fonctionner comme vous l'avez dit, cela me semble être un bug et il faut le signaler comme tel! –

Répondre

0

Essayez avec injection:

private InputInjector _inputInjector; 
    private InjectedInputMouseInfo _mouse; 

    private Vector2 _positionDelta; 

    public MainPage() 
    { 
     InitializeComponent(); 
     Loaded += MainPage_Loaded; 
    } 

    private void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     _inputInjector = InputInjector.TryCreate(); 
     _inputInjector.InitializeTouchInjection(InjectedInputVisualizationMode.Indirect); 

     RunMouse(); 
    } 

    private async void RunMouse() 
    { 
     _positionDelta = Vector2.One; 

     for (int i = 0; i < 500; i++) 
     { 
      await Task.Delay(10); 

      if (i == 100) PointDown(); 
      else if (i == 400) PointUp(); 
      else PointMove(); 

      _inputInjector.InjectMouseInput(new List<InjectedInputMouseInfo>{ _mouse }); 
     } 
    } 

    private void PointDown() 
    { 
     _mouse = new InjectedInputMouseInfo 
     { 
      DeltaX = (int)_positionDelta.X, 
      DeltaY = (int)_positionDelta.Y, 
      MouseOptions = InjectedInputMouseOptions.LeftDown, 
     }; 
    } 

    private void PointUp() 
    { 
     _mouse = new InjectedInputMouseInfo 
     { 
      DeltaX = (int)_positionDelta.X, 
      DeltaY = (int)_positionDelta.Y, 
      MouseOptions = InjectedInputMouseOptions.LeftUp, 
     }; 
    } 

    private void PointMove() 
    { 
     _mouse = new InjectedInputMouseInfo 
     { 
      DeltaX = (int)_positionDelta.X, 
      DeltaY = (int)_positionDelta.Y, 
      MouseOptions = InjectedInputMouseOptions.Move, 
     }; 
    } 

Cet exemple déplace la souris avec le bouton gauche haut/bas

Pour activer cette fonction, vous devez ajouter à manifester quelques lignes. Dans Package tag ajouter

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 

Dans capacités ajouter

<rescap:Capability Name="inputInjection" /><rescap:Capability Name="inputInjectionBrokered" /> 

Cela permet des capacités limitées.

+0

Merci Jet Chopper. Cela a fonctionné très bien et fonctionne maintenant exactement comme je le veux. Je t'en dois une. :) –