В WPF для использования ярлыков необходимо сфокусировать соответствующий контроллер. Однако с InputManager вы можете захватывать все виды входных данных вашего приложения. Здесь вам не нужно фокусироваться на соответствующем контроллере.
Сначала вы должны подписать событие.
InputManager.Current.PreProcessInput -= Current_PreProcessInput;
InputManager.Current.PreProcessInput += Current_PreProcessInput;
Тогда
private void Current_PreProcessInput(object sender, PreProcessInputEventArgs args)
{
try
{
if (args != null && args.StagingItem != null && args.StagingItem.Input != null)
{
InputEventArgs inputEvent = args.StagingItem.Input;
if (inputEvent is KeyboardEventArgs)
{
KeyboardEventArgs k = inputEvent as KeyboardEventArgs;
RoutedEvent r = k.RoutedEvent;
KeyEventArgs keyEvent = k as KeyEventArgs;
if (r == Keyboard.KeyDownEvent)
{
}
if (r == Keyboard.KeyUpEvent)
{
}
}
}
}
catch (Exception ex)
{
}
}
Таким образом, вы можете отфильтровать все ненужные вещи и получить необходимые данные. Так как это для приложения захвата ярлыков, я принял только события KeyDown и KeyUp.
Вы также можете получить всю информацию о нажатой клавише
keyEvent.Key.ToString()