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();
    }
}

0 ответов

Другие вопросы по тегам