InputSimulator отправляет ключ в неправильный процесс после повторной активации окна WPF
Эта проблема:
У меня есть активное окно WPF. При создании процесс устанавливается как владелец окна. Теперь, когда в окне WPF происходит событие Key-Down, ключ должен быть передан в основной процесс.
Сначала я установил Focus на основной процесс, используя SetForegroundWindow(). Ключ отправляется с использованием InputSimulator.
Пока это работает, как ожидалось. Однако после отправки ключа окно Wpf должно вернуться к фокусу, чтобы оно могло перехватывать следующие нажатия клавиш.
Я пытаюсь вызвать Activate() в окне WPF. Проблема, которая сейчас возникает, заключается в том, что отправка Key с помощью InputSimulator больше не передается основному процессу, а вместо этого перехватывается окном WPF.
Код
Вот код:
Это создание окна
public void createWindow()
{
CommandLineWindow win = new CommandLineWindow();
helper = new WindowInteropHelper(win);
Process oCurrent = Process.GetCurrentProcess();
var ww = new WindowWrapper(oCurrent.MainWindowHandle);
helper.Owner = oCurrent.MainWindowHandle;
win.ShowDialog();
}
Реализация WindowWrapper:
public class WindowWrapper : System.Windows.Forms.IWin32Window
{
public WindowWrapper(IntPtr handle)
{
_hwnd = handle;
}
public IntPtr Handle
{
get { return _hwnd; }
}
private IntPtr _hwnd;
}
И мой обработчик Window.KeyDown:
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.X)
{
//Do something
SetForegroundWindow(helper.Owner);
new InputSimulator().Keyboard.KeyDown(WindowsInput.Native.VirtualKeyCode.VK_Y);
this.Activate();
}
}