5 ответов:
вопрос помечен WPF, но ответы до сих пор являются конкретными WinForms и Win32.
чтобы сделать это в WPF, просто построить KeyEventArgs и вызвать RaiseEvent на цели. Например, чтобы отправить событие Insert key KeyDown в текущий сфокусированный элемент:
var key = Key.Insert; // Key to send var target = Keyboard.FocusedElement; // Target element var routedEvent = Keyboard.KeyDownEvent; // Event to send target.RaiseEvent( new KeyEventArgs( Keyboard.PrimaryDevice, PresentationSource.FromVisual(target), 0, key) { RoutedEvent=routedEvent } );это решение не зависит от собственных вызовов или внутренних устройств Windows и должно быть гораздо более надежным, чем другие. Он также позволяет имитировать нажатие клавиши на определенном элемент.
обратите внимание, что этот код применим только к событиям PreviewKeyDown, KeyDown, PreviewKeyUp и KeyUp. Если вы хотите отправить TextInput события вы будете делать это вместо:
var text = "Hello"; var target = Keyboard.FocusedElement; var routedEvent = TextCompositionManager.TextInputEvent; target.RaiseEvent( new TextCompositionEventArgs( InputManager.Current.PrimaryKeyboardDevice, new TextComposition(InputManager.Current, target, text)) { RoutedEvent = routedEvent } );Также обратите внимание, что:
элементы управления ожидают получения предварительного просмотра события, например PreviewKeyDown должно предшествовать KeyDown
использование цель.оператор RaiseEvent.(..) отправляет событие непосредственно в цель без мета-обработки как ускорители, композиция текста и редактор IME. Это обычно то, что вы хотите. С другой стороны, если вы действительно что имитировать фактические клавиши клавиатуры по какой-то причине, вы должны использовать InputManager.ProcessInput () вместо этого.
для создания ключевых событий без контекста Windows Forms, Мы можем использовать следующий метод,
[DllImport("user32.dll")] public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);пример кода приведен ниже:
const int VK_UP = 0x26; //up key const int VK_DOWN = 0x28; //down key const int VK_LEFT = 0x25; const int VK_RIGHT = 0x27; const uint KEYEVENTF_KEYUP = 0x0002; const uint KEYEVENTF_EXTENDEDKEY = 0x0001; int press() { //Press the key keybd_event((byte)VK_UP, 0, KEYEVENTF_EXTENDEDKEY | 0, 0); return 0; }список виртуальных ключей определен здесь.
чтобы получить полную картину, пожалуйста, используйте ссылку ниже, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
Я не использовал его, но SendKeys делайте, что хотите.
используйте SendKeys для отправки нажатий клавиш и комбинации клавиш для активного приложение. Этот класс не может быть создать экземпляр. Чтобы отправить нажатие клавиши класс и сразу же продолжить поток вашей программы, используйте "отправить". К дождитесь любых процессов, запущенных клавиши, используйте SendWait.
System.Windows.Forms.SendKeys.Send("A"); System.Windows.Forms.SendKeys.Send("{ENTER}");Microsoft имеет еще несколько примеров использования здесь.
легко! (потому что кто-то уже сделал работу за нас...)
проведя много времени, пытаясь это сделать с предложенными ответами, я наткнулся на этот проект codeplex Windows Input Simulator что сделало его простым, как можно имитировать нажатие клавиши:
установить пакет, можно сделать или из диспетчера пакетов NuGet или из консоли диспетчера пакетов, например:
Install-Package InputSimulator
используйте эти 2 строки кода:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)и это все!
Windows SendMessage API С WM_KEYDOWN.
Comments