21

我正在尝试发送 Keystroke(Ctrl+T) 以进行浏览器控制。但是,SendKeys.Send()在 WPF 应用程序中显示错误??我的问题是

1) 我可以在 WPF 应用程序中使用这种方法吗?

2)是否有任何替代方法来发送自动击键。

谢谢。

4

2 回答 2

24

SendKeys 是 System.Windows.Forms 命名空间的一部分,Wpf 中没有等效的方法。您不能将 SendKeys.Send 与 WPF 一起使用,但如果将 System.Windows.Forms 添加到项目引用中,则可以使用SendKeys.SendWait方法。您唯一的其他选择是 PInvoke SendInput

请注意,这两种方法都将数据发送到当前活动的窗口。

于 2012-07-20T03:43:55.303 回答
23

我发现一篇博客文章描述了InputManager的使用。它允许您在 WPF 中模拟键盘事件。

/// <summary>
///   Sends the specified key.
/// </summary>
/// <param name="key">The key.</param>
public static void Send(Key key)
{
  if (Keyboard.PrimaryDevice != null)
  {
    if (Keyboard.PrimaryDevice.ActiveSource != null)
    {
      var e = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, key) 
      {
          RoutedEvent = Keyboard.KeyDownEvent
      };
      InputManager.Current.ProcessInput(e);

      // Note: Based on your requirements you may also need to fire events for:
      // RoutedEvent = Keyboard.PreviewKeyDownEvent
      // RoutedEvent = Keyboard.KeyUpEvent
      // RoutedEvent = Keyboard.PreviewKeyUpEvent
    }
  }
}
于 2014-01-12T11:47:04.870 回答