2012-07-20 153 views
9

我試圖發送按鍵(Ctrl + T)進行瀏覽器控制。但是,SendKeys.Send()在WPF應用程序中顯示錯誤?我的問題是WPF應用程序中的SendKeys.Send方法

1)我可以在WPF應用程序中使用此方法嗎?

2)有沒有其他的方法來發送自動鍵盤輸入。

謝謝。

+0

什麼是錯誤? – 2012-07-20 03:30:23

回答

13

SendKeys是System.Windows.Forms命名空間的一部分,在Wpf中沒有等效的方法。您不能使用SendKeys.Send和WPF,但如果將System.Windows.Forms添加到項目引用中,則可以使用SendKeys.SendWait方法。你唯一的選擇是PInvoke SendInput

請注意,這兩種方法都會將數據發送到當前活動窗口。

+0

感謝您的建議:-) – Adnan 2012-07-20 14:49:19

+0

@YasirAdnan歡迎您致電 – 2012-07-20 14:56:10

12

我找到了一個blog post,描述了使用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 
    } 
    } 
} 
+0

增加了實際的代碼示例。 – Katulus 2014-01-13 14:31:41

+0

這很好,但有沒有辦法發送一些修飾符的關鍵? (** Ctrl + V **例如?) 也許你可以讓KeyboardDevice認爲修飾鍵被按下了? 謝謝! – 2015-01-21 17:00:33

+0

僅供參考,它只將關鍵事件排入wpf應用程序本身,不能用於向其他應用程序發送擊鍵。 – wischi 2016-01-15 10:04:22

相關問題