C# MouseKeyHook проблемы с подавлением клавиш
Я использовал пакет MouseKeyHook NuGet для проекта, где необходимо отслеживать нажатие одной клавиши, чтобы обеспечить явную функциональность. Прототип приложения, который я написал, проверяет нажатие требуемой клавиши и затем устанавливает для свойства Handled значение true. Клавиша, с которой я тестирую, - это LaunchApplication2, теперь проблема, с которой я сталкиваюсь, заключается в том, что нажатие клавиши не всегда удивляет, в настоящий момент, если Microsoft Word или Excel находятся в фокусе, запускается калькулятор!
Код выглядит следующим образом:
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private IKeyboardMouseEvents keyboardHookListener;
private SolidColorBrush inactiveBrush = new SolidColorBrush(Colors.White);
private SolidColorBrush activeBrush = new SolidColorBrush(Colors.LightGreen);
private bool pressed = false;
public MainWindow()
{
InitializeComponent();
this.Background = inactiveBrush;
this.keyboardHookListener = Hook.GlobalEvents();
this.keyboardHookListener.KeyDown += keyboardHookListener_KeyDown;
this.keyboardHookListener.KeyUp += keyboardHookListener_KeyUp;
}
void keyboardHookListener_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyData == System.Windows.Forms.Keys.LaunchApplication2)
{
if (pressed)
{
this.Background = inactiveBrush;
this.displayLabel.Content = string.Empty;
this.pressed = false;
System.Diagnostics.Debug.WriteLine("*********Finished*********");
}
}
}
void keyboardHookListener_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
// Filter to specific buttons using the KeyData property of the event arguments.
if (e.KeyData == System.Windows.Forms.Keys.LaunchApplication2)
{
e.Handled = true;
e.SuppressKeyPress = true;
// Use a flag to stop code executing multiple times as whilst a key is pressed the KeyDown keeps firing.
if (!pressed)
{
System.Diagnostics.Debug.WriteLine("*********Started*********");
this.pressed = true;
this.Background = activeBrush;
this.displayLabel.Content = e.KeyData.ToString();
}
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
this.keyboardHookListener.KeyDown -= this.keyboardHookListener_KeyDown;
this.keyboardHookListener.KeyUp -= this.keyboardHookListener_KeyUp;
this.keyboardHookListener.Dispose();
}
}
Я также пытался использовать свойство SuppressKeyPress, но это не имеет никакого эффекта. Любые объяснения или предложения, чтобы исправить это было бы здорово!