我正在尝试将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#的初学者,所以请保持答案简单。
答案 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
是成功还是失败?