从 GUI 读取数据
Posted
技术标签:
【中文标题】从 GUI 读取数据【英文标题】:Read data from GUI 【发布时间】:2014-02-11 16:30:05 【问题描述】:我有一个一般性问题:
如果我有一个 GUI(例如 metaTrader => 在线经纪人),是否可以使用 java 从这个 GUI 读取数据?
我的想法:
使用 java.awt.robot 并执行以下操作:
package java_robot;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
public class java_robot
public static void main(String[] args)
try
// create class
Robot robot = new Robot();
// wait 1 sec
robot.delay(1000);
// move mouse to wanted area
robot.mouseMove(x, y);
// mark an area, copy it and save in file..
catch (AWTException e)
e.printStackTrace();
这个想法好不好,或者您知道的其他解决方案吗? (在 Mac 上工作)
【问题讨论】:
【参考方案1】:您可以在此处使用Robot#createScreenCapture()
方法。
Robot r = new Robot();
// Capture area
int width = ...
int height = ...
Rectangle area = new Rectangle(width, height);
BufferedImage image = r.createScreenCapture(area);
// Save to file
ImageIO.write(image, "png", new File("/screenshot.png"));
另外,如果 metaTrader 从互联网加载其数据,您可以嗅探其流量并确定其数据的来源和方式。然后,您可以尝试模仿它的互联网呼叫并自己获取数据,只要它没有加密。
您也可以在 Java 中构建一个代理并让 metaTrader 使用这个代理。 metaTrader 请求的所有数据都将通过您的代理。这可以让您有机会再次读取数据...只要它没有加密。
下图说明了事情的运作方式。 Alice 扮演 meaTrader 的角色。 Bob 是 metaTrader 的数据来源。代理是您的 Java 应用程序。
您可以在此处找到此类代理的简单实现:http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm。
参考资料:
Proxy server【讨论】:
好主意,你说的“让 metaTrader 使用这个代理”是什么意思,我只需要 metatrader 使用的端口吗? @user3297073 当 metaTrader 或任何应用程序连接到 Internet 时,它要么直接连接,要么使用代理连接。通常,应用程序允许通过其设置来配置代理。配置完成后,应用程序会将其所有互联网呼叫转发到代理。作为回报,代理会将调用适当地转发到互联网。 好的,但是你所说的“要求 metaTrader 使用这个代理”到底是什么意思,metaTrader 中是否有任何设置或者是关于监听特定端口? 我只想让代理获取所有数据,这些数据会发送到 metatrader。所以代理需要监听一个端口? @user3297073 代理侦听端口。 metaTrader 将在此端口上连接。然后代理将 metaTrader 发出的调用转发到 metaTrader 的实际数据源。当源回复时,代理将数据转发回 metaTrader。阅读本文了解更多详情:en.wikipedia.org/wiki/Proxy_server以上是关于从 GUI 读取数据的主要内容,如果未能解决你的问题,请参考以下文章