2009-03-02 61 views
1

我有一個要求,能夠跟蹤用戶與他們機器上運行的不同應用程序交互的程度。對我來說,合乎邏輯的做法是記錄帶有時間戳的窗口焦點事件,這些事件會告訴你哪些應用程序在一天中的焦點。在Java中跟蹤操作系統級別的窗口事件

在這個應用程序中我們還有一些其他的事情可以在Java中直接進行。然而,我沒有在Java中進行任何GUI編程,因此我不確定是否可以通過awt API獲取有關OS級窗口的信息。這甚至有可能嗎?會有另一種方式通過JNI來做到這一點,或者是否需要本地應用程序來做到這一點? PS:我知道這個要求聽起來有點邪惡,但我只是在這裏來確定這在技術上是否可行。請不要拍攝使者,這不是我的想法。 :)

回答

5

焦點事件可能有效;你可能也想考慮Windows keyboard and mouse hooks。使用這些方法中的任何一種,您都需要創建一個DLL(本地代碼)並使用JNI來訪問它。

0

我不認爲這是可能的使用AWT。 Java無法訪問其他應用程序的進程。

5

無法訴諸本地代碼,我不認爲這是可能的。

0

我認爲你應該考慮使用另一種語言。
還有其他語言如C++例如被predistinated對於這類問題:)

0

你基本上問你的應用程序被包含在操作系統通知到其他應用程序。您可能需要有一個應用程序將其他應用程序作爲子進程啓動,或者使用類似於rootkit API的應用程序來建立超出正常應用程序授予的權限。如果目標是要查看用戶與應用程序進行交互的時間,則可以通過查看計劃到您的應用程序的CPU時間或一些如何查看I/O事件與將這些映射到有關用戶活躍程度的統計信息中。

否則,我認爲你可能能夠與一些間諜軟件開發者聯繫以獲得你所需要的東西。

0

如果你想從Java做到這一點,不想寫自己的本地代碼,你可以試試SWT。我懷疑它有完成你想要的平臺不可知的方式,但你可以在Windows特定的類中找到,特別是org.eclipse.swt.internal.win32.OS。

1

您可能會尋找一個窗口測試庫 - 其中一些用於創建和攔截win32本地事件。

0

我們還可以監視windows任務列表以跟蹤用戶使用的應用程序,它在Java中簡單易懂,可以讀取控制檯,也可以從中獲取過程數據,但是您需要使用很少的繁重字符串處理,bcz all你得到的數據將是字符串格式,你必須從它得到你需要的數據,使其成爲有用的,如果你需要進一步的幫助,我可以給它的代碼來監視和保存這些數據用於跟蹤,但是這個解決方案不會覆蓋窗口事件,它會給任務信息,

相關問題