Как я могу программно создать событие, которое имитировало бы нажатие клавиши на клавиатуре?
c#
.net
wpf
keyboard-events
Дэн Фогель
источник
источник
Ответы:
Вопрос помечен как WPF, но пока ответы касаются конкретных WinForms и Win32.
Для этого в WPF просто создайте KeyEventArgs и вызовите RaiseEvent для цели. Например, чтобы отправить событие Insert key KeyDown текущему элементу с фокусом:
Это решение не полагается на собственные вызовы или внутренние компоненты Windows и должно быть намного надежнее других. Он также позволяет имитировать нажатие клавиши на определенном элементе.
Обратите внимание, что этот код применим только к событиям PreviewKeyDown, KeyDown, PreviewKeyUp и KeyUp. Если вы хотите отправлять события TextInput, вы сделаете это вместо этого:
Также обратите внимание, что:
Элементы управления ожидают получения событий предварительного просмотра, например PreviewKeyDown должен предшествовать KeyDown
Использование target.RaiseEvent (...) отправляет событие непосредственно в цель без метаобработки, такой как ускорители, композиция текста и IME. Обычно это то, что вы хотите. С другой стороны, если вы действительно делаете что-то для имитации реальных клавиш клавиатуры по какой-то причине, вы должны вместо этого использовать InputManager.ProcessInput ().
источник
Keyboard.PrimaryDevice.ActiveSource
см stackoverflow.com/questions/10820990/...Ctrl+C
)Для создания ключевых событий без контекста Windows Forms мы можем использовать следующий метод,
пример кода приведен ниже:
Список виртуальных ключей определяется здесь .
Чтобы получить полную картину, воспользуйтесь приведенной ниже ссылкой http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
источник
Я не использовал его, но SendKeys может делать то, что вы хотите.
Microsoft имеет еще несколько примеров использования здесь .
источник
Без труда! (потому что за нас уже работал кто-то другой ...)
Потратив много времени на попытки сделать это с предложенными ответами, я наткнулся на этот проект codeplex Windows Input Simulator, который упростил имитацию нажатия клавиши:
Установить пакет можно либо из диспетчера пакетов NuGet, либо из консоли диспетчера пакетов, например:
Используйте эти 2 строки кода:
inputSimulator = new InputSimulator() inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
И это все!
-------РЕДАКТИРОВАТЬ--------
Страница проекта на codeplex по какой-то причине помечена, это ссылка на галерею NuGet.
источник
Windows SendMessage API с отправкой WM_KEYDOWN .
источник