还有的是,在Windows上运行一个简单的应用程序。 这是一个非常简单的界面:在固定坐标按钮squre窗口。
我需要编写一个程序,利用该应用程序的:启动它,并点击一个按钮(假设调用在点击(150,200))。
有没有办法做到这一点在Java或.NET?
还有的是,在Windows上运行一个简单的应用程序。 这是一个非常简单的界面:在固定坐标按钮squre窗口。
我需要编写一个程序,利用该应用程序的:启动它,并点击一个按钮(假设调用在点击(150,200))。
有没有办法做到这一点在Java或.NET?
基于Java的解决方案是启动应用程序。 在Process
和使用Robot
来与它进行交互。
在此线程最好的解决办法是通过@HFoE而是由主持人删除。 作为参考,它基本上来到了..
如果你想控制另一个Windows应用程序,使用为这个功能,比如专门建立了一个工具AutoIt的V3 。
由于“不要做”似乎被认为是当另一种方法是提供了一个有效的答案(由上元的一般意见),我不明白为什么答案被删除。
由于气垫船全鳝,如果你能 - 使用了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
}
但要知道,这使点击它需要在你的面前窗口中 - 你不能单击以例如最小化的应用程序。
如果你想尝试-你可以找到所有需要的功能(如何运行PROGRAMM,通过HWND获取所需窗等) 的PInvoke
对于.NET,你几乎可以使用AutomationElement ,我喜欢。 有一点学习时间,但它不应该花费太多。 你可以与你的应用程序的ProcessStartInfo 。
如果你有VS2010专业版或旗舰版则可以使用CodedUITests产生几个按钮推动的。
作为@Hovercraft充满鳗鱼建议 - AutoIt的,巨蟒可以做同样的
是的 - 在C#...
Process
类启动进程(也有丰富的资源如何做到这一点在网络上。 但是请注意,有几件事情可以出错,这
在.NET中,你可以的Process.Start从System.Diagnostics程序启动应用程序,你甚至可以传递参数,并模拟鼠标事件,你可以使用的P / Invoke已经有一个答案,关于所以这里
这是我的工作测试应用程序与点击窗口播放。 我们刚开始的一些应用程序,并希望双击它,在正确的地方),这将是不错的捕捉窗这样一些解决方案=)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
var startInfo = new ProcessStartInfo(@"C:\Users\Bodia\Documents\visual studio 2010\Projects\ConsoleApplication8\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe");
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
Console.WriteLine(1);
var process = Process.Start(startInfo);
Console.WriteLine(2);
Thread.Sleep(400);
Console.WriteLine(3);
LeftMouseClick(1000, 200);
Console.WriteLine(4);
}
static void CursorFun()
{
Point cursorPos = new Point();
GetCursorPos(ref cursorPos);
cursorPos.X += 100;
Thread.Sleep(1000);
SetCursorPos(cursorPos.X, cursorPos.Y);
cursorPos.X += 100;
Thread.Sleep(1000);
SetCursorPos(cursorPos.X, cursorPos.Y);
cursorPos.X += 100;
Thread.Sleep(1000);
SetCursorPos(cursorPos.X, cursorPos.Y);
cursorPos.X += 100;
Thread.Sleep(1000);
SetCursorPos(cursorPos.X, cursorPos.Y);
}
[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 static 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
}
struct Point
{
public int X;
public int Y;
}
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
}
}