Проблема:
У меня активное окно 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();
}
}