如何以编程方式(C#或Java)在Windows中启动应用程序并调用click in it';窗户在哪里?

如何以编程方式(C#或Java)在Windows中启动应用程序并调用click in it';窗户在哪里?,c#,java,windows,user-interface,click,C#,Java,Windows,User Interface,Click,有一个在Windows中工作的简单应用程序。它有一个非常简单的界面:带有固定坐标按钮的squre窗口 我需要编写一个程序来使用这个应用程序:启动它并单击其中一个按钮(比如调用click at(150200)) 有什么方法可以在Java或.NET中实现吗?对于.NET,您可以使用我更喜欢的方法。有一点学习时间,但不应该花太多时间。您可以使用启动应用程序 如果您有VS2010 Pro或Ultimate,您可以使用CodedUITests生成几个按钮 正如满是鳗鱼的@Hovercraft所建议的那样-

有一个在Windows中工作的简单应用程序。它有一个非常简单的界面:带有固定坐标按钮的squre窗口

我需要编写一个程序来使用这个应用程序:启动它并单击其中一个按钮(比如调用click at(150200))


有什么方法可以在Java或.NET中实现吗?

对于.NET,您可以使用我更喜欢的方法。有一点学习时间,但不应该花太多时间。您可以使用启动应用程序

如果您有VS2010 Pro或Ultimate,您可以使用CodedUITests生成几个按钮


正如满是鳗鱼的@Hovercraft所建议的那样-Autoit,Python也可以为.Net做同样的事情,你可以使用我更喜欢的东西。有一点学习时间,但不应该花太多时间。您可以使用启动应用程序

如果您有VS2010 Pro或Ultimate,您可以使用CodedUITests生成几个按钮

正如满是鳗鱼的@Hovercraft所建议的那样——Autoit,Python也可以用C#做同样的事情

  • 使用该类启动流程(web上有大量关于如何执行此操作的资源)
  • 等待进程开始(或者等待一段固定的时间,这段时间可能足够长,或者您可以尝试执行一些奇特的操作,如IPC或监视正在创建的窗口)
  • 要模拟click,请查看哪个函数使用P/Invoke调用
  • 但是请注意,这可能会出现一些问题

    • 有人可能会移动窗口,或者在启动应用程序时将另一个窗口放在该窗口的顶部
    • 在速度较慢的PC上,加载应用程序可能需要更长的时间(通过监视打开的窗口和等待预期的应用程序窗口出现等操作,可以减轻此风险)
      • 是-在C#中

      • 使用该类启动流程(web上有大量关于如何执行此操作的资源)
      • 等待进程开始(或者等待一段固定的时间,这段时间可能足够长,或者您可以尝试执行一些奇特的操作,如IPC或监视正在创建的窗口)
      • 要模拟click,请查看哪个函数使用P/Invoke调用
      • 但是请注意,这可能会出现一些问题

        • 有人可能会移动窗口,或者在启动应用程序时将另一个窗口放在该窗口的顶部
        • 在速度较慢的PC上,加载应用程序可能需要更长的时间(通过监视打开的窗口和等待预期的应用程序窗口出现等操作,可以减轻此风险)

        在.net中,您可以从System.Diagnostics启动应用程序,您甚至可以传递参数,要模拟鼠标事件,您可以使用p/Invoke。在.net中,您可以从System.Diagnostics启动应用程序,您甚至可以传递参数,要模拟鼠标事件,您可以使用p/Invoke th关于这一点,已经有了答案,因为气垫船上满是鳗鱼,如果你能使用autoit,那就容易多了。如果autoit不是一个选项,那么你需要使用winAPI函数来实现它

        例如,在坐标处调用鼠标单击:

        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int x, int y);
        
        [DllImport("user32.dll")]
        static extern bool GetCursorPos(ref Point lpPoint);
        
        [DllImport("user32.dll")]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
        
        public void LeftMouseClick(int xpos, int ypos) //Make a click at specified coords and return mouse back
        {
            Point retPoint = new Point();
            GetCursorPos(ref retPoint); // set retPoint as mouse current coords
            SetCursorPos(xpos, ypos); //set mouse cursor position
            mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
            mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); //click made
            SetCursorPos(retPoint.X, retPoint.Y); //return mouse position to coords
        }
        
        但要知道,要在窗口内点击,它必须在你面前——例如,你不能点击最小化的应用程序


        如果您想尝试-您可以在

        找到所有需要的函数(如何运行程序,通过hwnd获取需要的窗口等),因为气垫船上满是鳗鱼,如果您可以-使用autoit-这会容易得多。如果autoit不是一个选项,那么您需要使用winAPI函数来实现它

        例如,在坐标处调用鼠标单击:

        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int x, int y);
        
        [DllImport("user32.dll")]
        static extern bool GetCursorPos(ref Point lpPoint);
        
        [DllImport("user32.dll")]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
        
        public void LeftMouseClick(int xpos, int ypos) //Make a click at specified coords and return mouse back
        {
            Point retPoint = new Point();
            GetCursorPos(ref retPoint); // set retPoint as mouse current coords
            SetCursorPos(xpos, ypos); //set mouse cursor position
            mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
            mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); //click made
            SetCursorPos(retPoint.X, retPoint.Y); //return mouse position to coords
        }
        
        但要知道,要在窗口内点击,它必须在你面前——例如,你不能点击最小化的应用程序


        如果您想尝试-您可以在

        找到所有需要的功能(如何运行程序、通过hwnd获取所需窗口等)。基于Java的解决方案是在中启动应用程序,并使用与之交互

        该线程的最佳解决方案是@HFoE,但被版主删除。作为参考,它基本上归结为

        如果要控制另一个Windows应用程序,请使用专门为此构建的工具,例如


        由于在提供替代方案时,“不要这样做”似乎被认为是一个有效的答案(根据Meta的一般意见),因此我无法理解为什么会删除该答案。

        基于Java的解决方案是在a中启动应用程序,并使用与之交互

        该线程的最佳解决方案是@HFoE,但被版主删除。作为参考,它基本上归结为

        如果要控制另一个Windows应用程序,请使用专门为此构建的工具,例如


        由于在提供替代方案时,“不要这样做”似乎被认为是一个有效的答案(根据Meta的一般意见),我无法理解为什么该答案被删除。

        这是我的工作测试应用程序,可以在windows中单击。 我们只需启动一些应用程序,并希望在正确的位置单击它) 如果有一些解决方案可以用这种方式捕获窗口,那就太好了=)


        这是我的工作测试应用程序,可以在windows中单击播放。 我们只需启动一些应用程序,并希望在正确的位置单击它) 如果有一些解决方案可以用这种方式捕获窗口,那就太好了=)


        感谢我梦想有一天也能尝试一下这个工具)这个机器人工具让我们能够“捕获”窗口或玩特定的窗口,而不是操作系统本身吗?
        java.awt.Robot
        可以点击屏幕上的按钮,但不与操作系统进行低级别的交互。感谢我梦想有一天也能尝试这个工具)这个机器人工具让我们能够“捕获”吗windows或使用特定wi-Fi进行游戏