InputSimulator отправляет ключ в неправильный процесс после повторной активации окна WPF - PullRequest
0 голосов
/ 04 февраля 2019

Проблема:

У меня активное окно WPF.При создании процесс устанавливается как владелец окна.Теперь, когда событие Key-Down запускается в окне WPF, ключ должен быть передан в основной процесс.

Сначала я установил Focus для основного процесса, используя SetForegroundWindow ().Ключ отправляется с использованием InputSimulator.

Пока все работает как положено.Однако после отправки ключа окно Wpf должно вернуться в фокус, чтобы оно могло перехватывать следующие нажатия клавиш.

Я пытаюсь вызвать Activate () в окне WPF.Проблема, которая сейчас возникает, заключается в том, что отправка ключа с помощью InputSimulator больше не передается в основной процесс, а вместо этого перехватывается окном WPF.

Код

Вот код:

Это создание Window

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