宏录像机/播放器

时间:2012-01-06 01:25:55

标签: java io awt capture awtrobot

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

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

我被困在我必须记录该XML文件的部分。 我不知道哪个Class可以用来做与Robot相反的操作()如果你有任何FemaleRobot()对我来说我会非常高兴:D

到目前为止,我唯一朝这个方向走的是:

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

这并不多,也不是我想要的^ _ ^,我不知道如何使用Mouse / KeyListener,因为它需要一个Component。如果这是唯一的方法,我使用什么Compoment,因为我不想要任何图形java实现?我应该创建一个虚假组件吗?哪一个?

e.g。我希望我的刻录机能够在XML中编写我如何点击我的ubuntu桌面或在Firefox上按Enter键。

我想很明显,如果不是,我会很多地检查答案。祝你有个美好的一天,感谢您阅读本文。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

我很遗憾地通知您,完全无法监控表单之外的鼠标点击和击键。 Java事件根本不会超出表单范围。

java的行为方式是消除基于java的恶意软件试图窃取敏感数据的可能性。

答案 2 :(得分: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]);
}

您必须使用鼠标事件将单击位置写入文件。

答案 3 :(得分:-1)

你可以先得到屏幕的分辨率。第二件事就是制作一个屏幕尺寸的框架,使其透明度达到0%。当你点击屏幕上的某个位置放下你的jframe并使用鼠标机器人来点击一个位置。你可以得到整个屏幕的坐标。这样你可以记录鼠标点击,但问题出现的时候是你需要输入文字