0

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


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

比较:

机器人: -
易于实施?
- 会让用户更加确信我没有窃取他的信息。

在同一个虚拟机中启动两个程序: -更
专业
-我可以跟踪客户端而无需遍历所有窗口的像素
-窗口不会被其他程序“隐藏”
-当窗口移动时,我不必重新迭代再次找到它。

坏:
机器人:
- 迭代可能需要一段时间 -
每次移动 javaclient 时都必须迭代。
在同一个 VM 中启动两个程序:
-程序将需要更多配置,并安装其他“东西”(我想要一些简单快捷的东西)

随意评论效率,其他选项或给我这两个选项的点点滴滴。

谢谢(我决定继续尝试使用 java 而不是 C/C++,因为可能的用户可能运行 Windows 以外的其他操作系统)

4

1 回答 1

1

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

于 2011-12-02T11:42:41.933 回答