5

我正在制作一种宏记录器/播放器

我已经使用 utils 完成了播放器部分,例如java.awt.Robot()模拟基本的人类鼠标/键盘输出命令,读取 XML 文件。

我被困在必须记录该 XML 文件的部分。我不知道我可以使用哪个类来做与 Robot() 相反的事情如果你有任何 FemaleRobot() 给我,我会很高兴

到目前为止,我在这个方向上唯一的事情是:

   while (true) {
        Point pos = MouseInfo.getPointerInfo().getLocation();
        System.out.println(pos.x+" x "+pos.y);
   }

这并不多,也不是我真正想要的^_^,我不知道如何使用鼠标/键监听器,因为它需要一个组件。如果这是唯一的方法,我应该使用什么组件,因为我不想要任何图形 java 实现?我应该创建一个假组件吗?哪一个?

例如,我希望我的记录器在 XML 中写入我如何单击我的 ubuntu 桌面或在 firefox 上按 Enter。

我想这很清楚,如果不是,我会检查很多答案。祝您有美好的一天,感谢您阅读本文。

4

4 回答 4

4

尝试 jnativehook 库: http ://code.google.com/p/jnativehook/wiki/examples

它非常易于使用,可以满足您的需求。

于 2013-01-08T18:19:33.807 回答
2

我很遗憾地通知您,在您的表单之外监视鼠标点击和击键是完全不可能的。 Java 事件根本不会在表单范围之外触发​​。

java 这样做的原因是为了消除基于 java 的恶意软件试图窃取敏感数据的可能性。

于 2012-01-06T03:25:26.707 回答
0

您可以在此处找到鼠标侦听器的示例:http: //docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

要写入文件,您可以执行以下操作:

FileWriter fileStream = new FileWriter("myfile.extention");
BufferedWriter out = new BufferedWriter(fileStream);
out.write("pos.x+" x "+pos.y");

如果你这样做:

while (true) 
{
    Point pos = MouseInfo.getPointerInfo().getLocation();
    System.out.println(pos.x+" x "+pos.y);
}

您需要在循环中添加一个 Thread.Sleep 调用。

然后您可以通过执行以下操作读回文件:

FileInputStream fileStream = new FileInputStream("myfile.extention");
  DataInputStream in = new DataInputStream(fileStream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in))
  String position = br.readLine()

然后您可以解析该字符串以获取值。

所以你可能会做类似的事情:

FileWriter filewrite = new FileWriter("myfile.txt");
BufferedWriter out = new BufferedWriter(filewrite);

while (Recording) 
{
    Point pos = MouseInfo.getPointerInfo().getLocation();
    out.write(pos.x + " " + pos.y);

    Thread.sleep(50);
}

FileInputStream fileStream = new FileInputStream("myfile.txt");
DataInputStream in = new DataInputStream(fileStream);
BufferedReader br = new BufferedReader(new InputStreamReader(in))

String position;
while(position = br.readLine() != null)
{
    String[] positions = position.split(" ");
    int x = Integer.parseInt(positions[0]);
    int y = Integer.parseInt(positions[1]);
}

您将不得不使用鼠标事件将点击位置写入文件。

于 2012-01-06T01:51:01.617 回答
-1

您可以首先获取屏幕的分辨率。第二件事是制作一个与屏幕大小相同的框架并将其透明度设置为 0%。当您单击屏幕上的某个位置时,放下您的 jframe 并使用鼠标机器人单击一个位置.你可以得到整个屏幕的坐标。这样你可以记录鼠标点击,但是问题来了,当你需要输入文本时

于 2012-08-05T19:05:05.393 回答