Enviando as teclas digitadas a partir de uma aplicação C # para uma aplicação Java - comportamento estranho?
-
19-09-2019 - |
Pergunta
Eu estou tentando enviar combinações de teclas do meu programa C # para um aplicativo Java
O código para chaves sendig é:
private void SendKeysToWindow(string WindowName, string KeysToSend)
{
IntPtr hWnd = FindWindow(null, WindowName);
ShowWindowAsync(hWnd, SW_SHOWNORMAL);
SetForegroundWindow(hWnd);
SendKeys.Send(KeysToSend);
}
Este código funciona bem com todos os programas, exceto com a aplicação Java que eu estou tyring ao controle.
Por exemplo, se eu criar um botão com o código folowing:
SendKeysToWindow("Java application window name", "{F2}");
SendKeysToWindow("Popoup window name", "123");
Este envia um F2 para a janela principal do programa, onde uma outra janela aparece, e o segundo comando SendKeysToWindow envia o "123" para essa janela. É assim que é esperado para o trabalho, e este é o caso com todos os outros programas.
No entanto, quando eu enviar esses comandos para o programa Java, acontece o seguinte:. O primeiro comando SendKeysToWindow é executado muito bem (as aparece a janela pop-up), mas não enviar o "123" para que a janela
Se é pressionar o botão novamente, o "123" é enviada para a janela pop-up, e abre outra janela popoup.
Se eu criar dois botões separados para os dois comando SendKeysToWindow, e pressioná-los um após o outro, os dois comandos executar bem.
O que pode ser o probem?
Obrigado pela ajuda na advanvce, é realmente me deixando louco.
P.S .: Eu sou um novato em C #, por isso, manter a resposta simples.
Solução
Depois de alguma tentativa e erro, o seguinte código parece funcionar bem:
private void SendKeysToWindow(string WindowName, string KeysToSend)
{
IntPtr hWnd = FindWindow(null, WindowName);
ShowWindow(hWnd, SW_SHOWNORMAL);
SetForegroundWindow(hWnd);
Thread.Sleep(50);
SendKeys.SendWait(KeysToSend);
}
Outras dicas
Parece que não pode ser apenas um atraso entre o envio {f2}
ea aplicação Java abrir a janela pop-up.
Você já tentou verificar se FindWindow
sucesso ou fracasso?