Отправка нажатий клавиш из приложения C # в приложение Java - странное поведение? - PullRequest
2 голосов
/ 11 января 2010

Я пытаюсь отправить нажатия клавиш из моей программы на C # в приложение Java

Код для отправки ключей:

private void SendKeysToWindow(string WindowName, string KeysToSend)
    {
        IntPtr hWnd = FindWindow(null, WindowName);
        ShowWindowAsync(hWnd, SW_SHOWNORMAL);
        SetForegroundWindow(hWnd);
        SendKeys.Send(KeysToSend);            
    }

Этот код прекрасно работает со всеми программами, кроме приложения Java, которым я управляю.

Например, если я создаю кнопку с следующим кодом:

SendKeysToWindow("Java application window name", "{F2}");
SendKeysToWindow("Popoup window name", "123");

Это отправляет F2 в главное окно программы, где появляется другое окно, а вторая команда SendKeysToWindow отправляет «123» этому окну. Это то, как это должно работать, и это относится ко всем остальным программам.

Однако, когда я посылаю эти команды программе Java, происходит следующее: первая команда SendKeysToWindow выполняется нормально (появляется всплывающее окно), но она не отправляет «123» в это окно.

Если снова нажать кнопку, во всплывающее окно отправляется «123», и открывается другое всплывающее окно.

Если я создаю две отдельные кнопки для двух команд SendKeysToWindow и нажимаю их одну за другой, обе команды выполняются нормально.

Каким может быть зонд?

Спасибо за помощь в интересах, это действительно сводит меня с ума.

P.S .: Я новичок в C #, поэтому, пожалуйста, оставьте ответ простым.

Ответы [ 2 ]

1 голос
/ 16 января 2010

После некоторых проб и ошибок следующий код работает нормально:

private void SendKeysToWindow(string WindowName, string KeysToSend)
    { 
        IntPtr hWnd = FindWindow(null, WindowName);            
        ShowWindow(hWnd, SW_SHOWNORMAL);
        SetForegroundWindow(hWnd);
        Thread.Sleep(50);
        SendKeys.SendWait(KeysToSend);           
    }
0 голосов
/ 11 января 2010

Звучит так, как будто между отправкой {f2} и открытием всплывающего окна Java может возникнуть задержка.

Вы пытались проверить, успешно ли FindWindow или нет?

...