Библиотека Предприятия является твердой альтернативой log4net, и это предлагает набор других возможностей также (кэширование, обработка исключений, проверка, и т.д....). Я использую его на примерно каждом проекте, который я разрабатываю.
Наиболее рекомендуемый.
Вопрос помечен как 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 }
);
Также обратите внимание, что:
Элементы управления ожидают получения Preview события, например PreviewKeyDown должен предшествовать KeyDown
. Использование target.RaiseEvent (...) отправляет событие непосредственно в цель без мета-обработки, такой как ускорители, составление текста и IME. Обычно это то, что вы хотите. С другой стороны, если действительно что имитировать реальные клавиши клавиатуры по какой-то причине вы бы использовали Вместо этого InputManager.ProcessInput ().
Я не использовал его, но SendKeys может делать то, что вы хотите.
Используйте SendKeys для отправки нажатий клавиш и комбинации клавиш для активного заявление. Этот класс не может быть создан. Чтобы отправить нажатие клавиши класс и сразу переходите к поток вашей программы, используйте Отправить. Чтобы дождитесь любых процессов, запущенных нажатие клавиши, используйте SendWait.
System.Windows.Forms.SendKeys.Send("A");
System.Windows.Forms.SendKeys.Send("{ENTER}");
У Microsoft есть еще несколько примеров использования здесь .