0

J'essaie de créer une application qui acceptera l'entrée au clavier d'une télécommande qui émule un clavier. J'ai besoin de capturer toutes les touches de la télécommande, y compris le volume haut/bas (il émule un clavier multimédia, fwiw). Je ne peux pas comprendre comment faire cela dans un UWA. J'ai essayé Windows.UI.Input.KeyboardDeliveryInterceptor et Windows.UI.Core.CoreWindow.GetForCurrentThread(). KeyDown, qui capture certaines entrées, mais pas toutes les clés (il ne capture pas les touches spéciales).Accéder à la saisie au clavier brute dans Universal Windows App (IoT)

Je ne prévois pas d'inclure cette application dans l'App Store, donc je peux assigner toutes les fonctionnalités dont j'ai besoin, y compris les restrictions. J'ai essayé d'accéder directement au périphérique HID, mais il s'avère que les claviers sont bloqués().

Des idées?

Répondre

0

Réponse courte

La partie clé permet à l'intercepteur dans le code sous-jacent:

deliveryInterceptor.IsInterceptionEnabledWhenInForeground = true; 

et déclarant la capacité de "inputForegroundObservation" dans le manifeste de l'application:

<rescap:Capability Name="inputForegroundObservation" /> 

Réponse longue

Ajoutez ceci à Package.appxmanifest:

référence Namespace aux capacités restreintes:

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

Ajouter comme enfant pour la balise de capacités:

<rescap:Capability Name="inputForegroundObservation" /> 

Ensuite, ajoutez dans votre code derrière (par exemple MainPage.xaml.cs):

public MainPage() 
    { 
     this.InitializeComponent(); 
     var _deliveryInterceptor = KeyboardDeliveryInterceptor.GetForCurrentView(); 
     UpdateTextBox($"Hash interceptor: {_deliveryInterceptor.GetHashCode()} \n"); 
     _deliveryInterceptor.IsInterceptionEnabledWhenInForeground = true; 
     _deliveryInterceptor.KeyUp += _deliveryInterceptor_KeyEventReceived; 
     _deliveryInterceptor.KeyDown += _deliveryInterceptor_KeyEventReceived; 
    } 

    private void _deliveryInterceptor_KeyEventReceived(KeyboardDeliveryInterceptor sender, Windows.UI.Core.KeyEventArgs 
    { 
       //Process KeyUp/KeyDown 
    } 
+0

Merci, mais il ne capture pas les touches spéciales comme le volume haut/bas. – Haukman