2012-07-20 32 views
9

ブラウザ制御のためにキーストローク(Ctrl + T)を送信しようとしています。しかし、SendKeys.Send()はWPFアプリケーションでエラーを示しましたか?私の質問はWPFアプリケーションでSendKeys.Sendメソッドを使用する

1)私はWPFアプリケーションでこのメソッドを使用できますか?

2)自動キーストロークを送信する代替方法はありますか?

ありがとうございました。

+0

エラーは何ですか? –

答えて

13

SendKeysはSystem.Windows.Forms名前空間の一部ですが、Wpfには同等のメソッドはありません。 WPFでSendKeys.Sendを使用することはできませんが、プロジェクト参照にSystem.Windows.Formsを追加すると、SendKeys.SendWaitメソッドを使用できます。あなたの唯一の他の選択肢は、SendInputをPInvokeすることです。

これらのメソッドの両方が現在アクティブなウィンドウにデータを送信することに注意してください。

+0

あなたのご提案ありがとう:-) – Adnan

+0

@ YasirAdnanあなたを歓迎します –

12

InputManagerの使用を説明するblog postが見つかりました。 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 
    } 
    } 
} 
+0

実際のコード例を追加しました。 – Katulus

+0

これは素晴らしいですが、いくつかの修飾子をキーとともに送信する方法はありますか? (** Ctrl + V **のような?) おそらく、KeyboardDeviceは修飾キーが何とか押されたと思うかもしれませんか? ありがとう! –

+0

FYIこれは、wpfアプリケーション自体でキーイベントをエンキューするだけで、他のアプリケーションにキーストロークを送信するために使用することはできません。 – wischi

関連する問題