кнопки Windows Media на пульте дистанционного управления не работают в WPF

У меня есть пульт дистанционного управления, направленный на ПК / телевизор

CTRL+P на клавиатуре работает и Воспроизведение/Пауза внутри приложения.

Пульт дистанционного управления может воспроизводить/приостанавливать воспроизведение в медиаплеере, но не работает в приложении WPF.

    public MainWindow()
    {
        InitializeComponent();
        ModifierKeys mk = ((ModifierKeys)(ModifierKeys.Control | ModifierKeys.Shift));
        MyPlayPause.InputGestures.Add(new KeyGesture(Key.P, ModifierKeys.Control));
        MyStop.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control));
        MyRewind.InputGestures.Add(new KeyGesture(Key.B,mk));
        MyFastForward.InputGestures.Add(new KeyGesture(Key.F,mk));
    }

Мой XAML

<Window.CommandBindings>
    <CommandBinding Command="{x:Static  RemoteControlTest:MainWindow.MyPlayPause}" Executed="MyPlayPauseEvent"/>
    <CommandBinding Command="{x:Static RemoteControlTest:MainWindow.MyStop}" Executed="MyStopEvent"/>
    <CommandBinding Command="{x:Static RemoteControlTest:MainWindow.MyFastForward}" Executed="MyFastForwardEvent" />
    <CommandBinding Command="{x:Static RemoteControlTest:MainWindow.MyRewind}" Executed="MyRewindEvent" />
</Window.CommandBindings>

События работают для перемотки назад и вперед, но не для воспроизведения/паузы и остановки.

Я попытался загрузить Media Glass http://mediaglass.codeplex.com/, и на удаленном компьютере возникла та же проблема. при нажатии CTRL+P

Я узнал, что, применив следующее

 System.Windows.Input.Key wpfLeftKey = Key.LeftCtrl;
 var formsKey = (Forms.Keys)KeyInterop.VirtualKeyFromKey(wpfLeftKey);

Я получаю разные результаты от моего вывода

 Windows 32 = LControlKey 
 WPF = LeftControl

Я думаю, что пульт дистанционного управления запрограммирован на отправку LControlKey.

Поэтому мне нужно создать событие, когда приложение Win32 записывает LControlKey, и принудительно запустить событие. Какие-либо предложения. (После инициализации компонента ()?

Я мог бы быть полностью проторенным здесь, или мог бы быть прав. ???


person Welsh King    schedule 01.08.2011    source источник


Ответы (1)


Ознакомьтесь с привязками клавиш.

person Bas    schedule 01.08.2011
comment
Я добавил ‹Window.InputBindings› ‹InputBinding Command={x:Static RemoteControlTest:MainWindow.MyPlayPause} Gesture=P›‹/InputBinding› ‹InputBinding Command={x:Static RemoteControlTest:MainWindow.MyStop} Gesture=LControlKey+S/› ‹/Window.InputBindings›, я получаю сообщение об ошибке «Нет подходящего конструктора для типа «System.Windows.Input.InputBinding». Вы можете использовать директивы Arguments или FactoryMethod для создания этого типа». Номер строки «14» и позиция строки «10». - person Welsh King; 01.08.2011
comment
Я добавил ‹Window.InputBindings› ‹KeyBinding Command={x:Static RemoteControlTest:MainWindow.MyPlayPause} CommandParameter=P Gesture=CTRL+P /› ‹KeyBinding Command={x:Static RemoteControlTest:MainWindow.MyStop} CommandParameter=S Gesture= CTRL+S /› ‹/Window.InputBindings› Делает то же самое :( - person Welsh King; 05.08.2011
comment
это сработало, когда я добавил привязку мультимедийного ключа MyPlayPause.InputGestures.Add(new KeyGesture(Key.MediaPlayPause)); так как пульт дистанционного управления отправлял другую команду через - person Welsh King; 29.02.2012