簡體   English   中英

無需按鍵盤上的鍵即可觸發鍵盤按鍵事件

[英]Trigger a keyboard key press event without pressing the key from keyboard

如何在不按鍵盤鍵的情況下觸發按鍵事件? 我試過這里的解決方案,但我得到以下異常:

'System.Windows.PresentationSource.FromVisual(System.Windows.Media.Visual)'的最佳重載方法匹配具有一些無效參數。

考慮Shift + A包含來自鍵盤的2鍵按鍵事件,如何在不按鍵盤的情況下執行此操作?(讓我們只需按一下按鈕就可以在文本框中打印大寫字母A)

我的代碼

var key = Key.A;                    // Key to send
var target = Keyboard.FocusedElement;    // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send

target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, System.Windows.PresentationSource.FromVisual(target), 0, key) { RoutedEvent = routedEvent });

System.Windows.Forms.SendKeys.Send()為我做了訣竅。

有關高級說明和可用代碼列表,請參閱該方法的文檔

例如,要發送Shift + A,我使用了SendKeys.Send("+(a)")

你需要轉換為Visual

var key = Key.A;                    // Key to send
var target = Keyboard.FocusedElement;    // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send

target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice,
 System.Windows.PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = routedEvent });

您還可以指定目標是特定的文本框,例如:

var target = textBox1;    // Target element

代碼實際上做的是觸發特定元素的keydown事件。 所以有一個keydown處理程序是有道理的:

private void textBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{

}

模擬鍵盤事件的簡單可靠方法是使用keybd_event api

你可以在這里參考它

http://www.pinvoke.net/default.aspx/user32.keybd_event

這里還有其他文章

http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd_event-funct

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM