将C#应用程序的击键发送到Java应用程序 - 奇怪的行为?

时间:2010-01-10 21:36:27

标签: c# java sendkeys findwindow

我正在尝试将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发送到主程序窗口,其中弹出另一个窗口,第二个SendKeysToWindow命令将“123”发送到该窗口。 这是预期的工作方式,所有其他程序都是如此。

但是,当我将这些命令发送到Java程序时,会发生以下情况:第一个SendKeysToWindow命令执行正常(弹出窗口出现),但它不会将“123”发送到该窗口。

如果再次按下按钮,“123”将被发送到弹出窗口,并打开另一个popoup窗口。

如果我为两个SendKeysToWindow命令创建两个单独的按钮,并依次按下它们,则两个命令都可以正常执行。

什么可以探测?

感谢在advanvce的帮助,它真的让我发疯。

P.S。:我是C#的初学者,所以请保持答案简单。

2 个答案:

答案 0 :(得分: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);           
    }

答案 1 :(得分:0)

听起来发送{f2}和打开弹出窗口的Java应用程序之间可能会有一段延迟。

您是否尝试过检查FindWindow是成功还是失败?