Enviando as teclas digitadas a partir de uma aplicação C # para uma aplicação Java - comportamento estranho?

StackOverflow https://stackoverflow.com/questions/2038730

  •  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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top