当前位置: 首页 > 知识库问答 >
问题:

C#找不到Java应用程序按钮

东门仲卿
2023-03-14

我试图发送一个按钮点击到另一个应用程序,在这种情况下,它是一个Java的应用程序。我使用的是FindWindow()。我可以使用SendKeys。发送密钥到应用程序窗口,但是当我尝试单击注册按钮时,Findwindowex()返回0作为按钮指针。我唯一的想法是,也许FindWindowEx()不喜欢父句柄和子句柄相同,但在这种情况下没有子窗口句柄。任何帮助都将不胜感激。

    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);

    [DllImport("user32.dll", CharSet=CharSet.Auto)]

    public static extern int SendMessage(int hWnd, int msg, int wParam, IntPtr lParam);
    public void Start()
    {
        IntPtr zero = IntPtr.Zero;
        for (int i = 0; (i < 60) && (zero == IntPtr.Zero); i++)
        {
            Thread.Sleep(500);
            zero = FindWindow(null, "EDM Autosync Client Login");
        }
        if (zero != IntPtr.Zero)
        {
            SetForegroundWindow(zero);
            SendKeys.SendWait("username");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("password");
            SendKeys.SendWait("{ENTER}");
            SendKeys.Flush();
        }
    }

    public void register()
    {
        IntPtr zero = IntPtr.Zero;
        IntPtr hwndChild = IntPtr.Zero;
        int BN_CLICKED = 245;
        int WM_CLOSE = 16;

        for (int i = 0; (i < 60) && (zero == IntPtr.Zero); i++)
        {
            Thread.Sleep(500);
            zero = FindWindow(null, "Autosync Connection Registration");
        }
        if (zero != IntPtr.Zero)
        {
            SetForegroundWindow(zero);
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("10.75.12.10");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("username");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("password");
            SendKeys.SendWait("{TAB}");
            SendKeys.SendWait("{TAB}");
            SendKeys.Flush();
            for (int i = 0; (i < 60) && (zero == IntPtr.Zero); i++)
            {
                Thread.Sleep(500);
                hwndChild = FindWindowEx(zero, IntPtr.Zero, "Button", "Register");
            }
            SendMessage((int)hwndChild, BN_CLICKED, 0, IntPtr.Zero);
        }
    }

共有1个答案

郜琦
2023-03-14

如果lpClassName为空,FindWindow将仅通过lpWindowName(窗口标题)搜索窗口。如果特定窗口的类是可变的,则此选项很有用,

我的问题是,您是否给出了正确的窗口标题?

您可以使用process explorer-https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

如果这能帮你解决问题,请告诉我。

如果没有帮助,我找到了以下代码片段:

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#应用程序发送到Java应用程序-奇怪的行为?

 类似资料:
  • 我刚刚在Intellij中设置了Scala(以及SDK和JDK) 文件- 创建了一个项目。 项目名称src下-- 我做错了什么。请帮忙

  • 我第一次手工将AngularJS和spring boot应用程序连接在一起。我遇到的问题是@RestController没有返回索引页: 目录: 它会继续呈现默认的404错误页面: ----------------更新1------------------ 我添加了一个配置文件: 重新控制器 主要类别: 上面的主类仍然返回默认的404错误页面。

  • 我有一个集群,我可以成功启动,至少这是出现在web UI上,我在其中看到这些信息 我收到这个消息 使用REST应用程序提交协议运行Spark。使用Spark默认的log4j配置文件:org/apache/spark/log4j-defaults.properties 16/08/31 16:59:06 INFO restsubmissionclient:提交请求以在Spark://name25:6

  • 你好,我有一个问题,我的模块化Java FX应用程序。 首先,我使用Intellij向导创建了一个JavaFX项目。 我添加了Java FX库: 并且JavaFX模块会被识别。我的模块-info.java:

  • 问题内容: 我曾经运行过Flask应用。如果将变量更改为,则Gunicorn给出错误。为什么会出现此错误,我该如何解决? myproject.py: wsgi.py: 问题答案: Gunicorn(和大多数WSGI服务器)默认在你指向的模块中查找可调用的名称。添加别名或将使再次发现可调用对象。 但是,wsgi.py不需要文件或别名,Gunicorn可以直接指向实际模块并可以调用。 Gunicorn