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

标签 c# java sendkeys findwindow

我正在尝试将击键从我的 C# 程序发送到 Java 应用程序

发送 key 的代码是:

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”将发送到弹出窗口,并打开另一个弹出窗口。

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

问题是什么?

感谢您提前提供的帮助,这真的让我发疯。

P.S.:我是 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);           
    }

关于c# - 将击键从 C# 应用程序发送到 Java 应用程序 - 奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2038730/

相关文章:

c# - Asp.Net Core 中 Kendo Grid 中的 DropDownList

c# - ASP.NET MVC : How can I get my business rule validation to bubble up to the presentation layer?

java - 我无法使用 Selenium WebBrowser Java 打开任何内容

excel - 无所不在: Application defined or object defined error

c# - 使用 SendInput 时,如何判断接收窗口何时收到并处理了消息?

c# - EntityFramework CreatedOn 属性只能在 SaveChanges 方法中设置

c# - 向数据库添加数据时出错

java - 如何将GIF设置为壁纸并在一段时间后停止GIF动画?

java - 用于自动生成表单的 XML 或数据库

c# - 免费或开源WinForms UI抓取/自动化库