C# 응용 프로그램에서 Java 응용 프로그램으로 키 스트로크를 보내기 - 이상한 동작?

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

  •  19-09-2019
  •  | 
  •  

문제

C# 프로그램에서 Java 응용 프로그램으로 키 스트로크를 보내려고합니다.

Sendig 키 코드는 다음과 같습니다.

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

이 코드는 제어하기 위해 기소하는 Java 응용 프로그램을 제외하고 모든 프로그램에서 잘 작동합니다.

예를 들어, folowing 코드로 버튼을 만들면 다음과 같습니다.

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

이것은 다른 창이 팝업되는 메인 프로그램 창으로 F2를 보내고, 두 번째 SendKeyStowIndow 명령은 "123"을 해당 창으로 보냅니다. 이것이 작동하는 방법이며, 이것은 다른 모든 프로그램의 경우입니다.

그러나이 명령을 Java 프로그램에 보낼 때 다음은 다음과 같습니다. 첫 번째 SendKeyStowIndow 명령은 잘 실행됩니다 (팝업 창이 나타납니다). 그러나 "123"을 해당 창으로 보내지 않습니다.

버튼을 다시 누르면 "123"이 팝업 창으로 전송되고 다른 Popoup 창을 엽니 다.

두 개의 sendKeyStowIndow 명령에 대해 두 개의 개별 버튼을 만들고 차례로 누르면 두 명령이 모두 잘 수행됩니다.

프로브는 무엇입니까?

Advanvce의 도움에 감사드립니다. 정말 나를 미치게합니다.

추신 : 저는 C#의 초보자이므로 답을 간단하게 유지하십시오.

도움이 되었습니까?

해결책

약간의 시행 착오 후 다음 코드가 잘 작동하는 것 같습니다.

private void SendKeysToWindow(string WindowName, string KeysToSend)
    { 
        IntPtr hWnd = FindWindow(null, WindowName);            
        ShowWindow(hWnd, SW_SHOWNORMAL);
        SetForegroundWindow(hWnd);
        Thread.Sleep(50);
        SendKeys.SendWait(KeysToSend);           
    }

다른 팁

보내는 사이에 지연이있을 수 있습니다. {f2} 팝업 창을 열고 Java 응용 프로그램이 있습니다.

여부를 확인해 보셨습니까? FindWindow 성공하거나 실패합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top