2011-12-02 46 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