4

私の C#/WPF/.NET 4.5 アプリケーションでは、KeyEventHandler を介してキーの押下をキャプチャし、後で優れたWindows 入力シミュレータを使用してそのキーの押下をエミュレートしようとしています (ジェスチャ、音声などのコマンドをキーボードにマップするため)。

Key問題は、から列挙型KeyEventHandlerのメンバーを取得することですRoutedEventArgsが、後で to に渡す必要がありVirtualKeyCodeますSimulateKeyPress()

Keyからに行くにはどうすればよいVirtualKeyCodeですか?

// Trigger reader
private void Editor_CommandButton_Click(object sender, RoutedEventArgs e) {
  PressKeyModal.Visibility = System.Windows.Visibility.Visible;
  AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)Editor_HandleKeyDownEvent);
}
// Read key press from keyboard
private void Editor_HandleKeyDownEvent(object sender, KeyEventArgs e) {
  // Here is the culprit
  VirtualKeyCode CodeOfKeyToEmulate = ConvertSomehow(e.Key);
  // /culprit
  PressKeyModal.Visibility = System.Windows.Visibility.Hidden;
  RemoveHandler(Keyboard.KeyDownEvent, (KeyEventHandler)Editor_HandleKeyDownEvent);
}

// Later, emulate the key press
private void EmulateKeyPress(VirtualKeyCode codeOfKeyToEmulate( {
  InputSimulator.SimulateKeyPress(codeOfKeyToEmulate);
}
4

1 に答える 1

8

KeyInterop.VirtualKeyFromKeyメソッドが私が探していたものであるようです。したがって、上記のコードの厄介なセクションは次のようになります。

// Read key press from keyboard
private void Editor_HandleKeyDownEvent(object sender, KeyEventArgs e) {
  // The rehabilitated culprit
  VirtualKeyCode CodeOfKeyToEmulate = (VirtualKeyCode)KeyInterop.VirtualKeyFromKey(e.Key);
  // /rehabilitated culprit
  PressKeyModal.Visibility = System.Windows.Visibility.Hidden;
  RemoveHandler(Keyboard.KeyDownEvent, (KeyEventHandler)Editor_HandleKeyDownEvent);
}

KeyInterop.VirtualKeyFromKeyメソッドが返すのは ではなく、VirtualKeyCodeint32キャストする必要があることに注意してVirtualKeyCodeください。

于 2013-04-02T10:35:30.327 に答える