2

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アプリケーションを除いて、すべてのプログラムで正常に機能します。

たとえば、次のコードでボタンを作成すると、次のようになります。

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

これにより、F2がメインプログラムウィンドウに送信され、そこで別のウィンドウがポップアップし、2番目のSendKeysToWindowコマンドが「123」をそのウィンドウに送信します。これはそれが機能することが期待される方法であり、これは他のすべてのプログラムの場合です。

ただし、これらのコマンドをJavaプログラムに送信すると、次のようになります。最初のSendKeysToWindowコマンドは正常に実行されます(ポップアップウィンドウが表示されます)が、そのウィンドウに「123」は送信されません。

もう一度ボタンを押すと、「123」がポップアップウィンドウに送信され、別のポップアップウィンドウが開きます。

2つのSendKeysToWindowコマンド用に2つの別々のボタンを作成し、それらを次々に押すと、両方のコマンドが正常に実行されます。

何が問題になるのでしょうか?

進歩の助けをありがとう、それは本当に私を夢中にさせています。

PS:私はC#の初心者なので、答えは単純にしてください。

4

2 に答える 2

1

試行錯誤の後、次のコードは正常に動作するようです。

private void SendKeysToWindow(string WindowName, string KeysToSend)
    { 
        IntPtr hWnd = FindWindow(null, WindowName);            
        ShowWindow(hWnd, SW_SHOWNORMAL);
        SetForegroundWindow(hWnd);
        Thread.Sleep(50);
        SendKeys.SendWait(KeysToSend);           
    }
于 2010-01-16T15:17:12.750 に答える
0

{f2}送信してから Java アプリケーションがポップアップ ウィンドウを開くまでに遅延があるようです。

FindWindow成功か失敗かを確認してみましたか?

于 2010-01-10T21:42:19.287 に答える