2011-12-02 66 views
0

我需要知道一个Java客户端是否用我的后台运行的java程序打开。 Java不允许我查看其他未在同一虚拟机上运行的窗口。我认为,如果我制作一个Java程序,打开Java客户端,我想跟踪它的工作,但我没有设法做到这一点(尝试了很多)。我的另一种选择是使用Java机器人并截取屏幕截图,并迭代查找像素信息,直到我匹配我正在寻找的客户端的像素。
屏幕上的Java客户端


客户端是一个我不应该直接操作的程序,我没有写它。所以它是第三方的。为了简单起见,可以说客户有一个在红色和绿色之间切换颜色的区域,红色表示问题,绿色表示它没问题。
在后台运行的程序使用客户端作为触发机制,这意味着客户端显示红色。我不应该做的事情,如果显示绿色,我应该(所以我只需要找到,如果在客户端的某些位置的颜色是红色或不

比较:

机器人:
- 易于实施
- 将带给用户更多的信心,我没有偷他的信息

开始在同一个VM这两个程序:?
- 更多设备专业
-I可以跟踪cleint的不通过遍历所有的窗口的像素
- 窗口不会被其他程序“隐藏”
- 当窗口移动时,我不必重新迭代以再次找到它。

坏:
机器人:
- 迭代可能需要一段时间
- 具备迭代每次javaclient是移动时间。
开始在同一个VM这两个程序:
- 程序将requiere更多的配置,并安装其它“东西”(我想要的东西,方便,快捷的使用)

随意效率进行评论,其他选项或给我点&件这两个选项。

谢谢 (我决定继续与Java,而不是C/C试图++,因为可能的用户可以运行其它操作系统比Windows)

+0

目前还不清楚你想要做什么。 Java客户端应该做什么?背景应用程序应该做什么?他们如何关联在一起? –

+0

@JBNizet好吧,我多加了一点希望它有帮助。 – Juan

回答

1

而不是采取截图,为什么没有得到的进程或窗口的列表?您可以在Windows中使用JNI或JNA中的“EnumWindows”或“EnumProcesses”。对于Linux,“ps”检索进程列表。 或者,您可以使用客户端 - 服务器模型,让您的客户端“ping”到您的服务器。

+0

目前正在进行此项工作,我可能差不多在那里:D – Juan