2009-03-02 5 views
1

Ich muss in der Lage sein zu verfolgen, wie viel ein Benutzer mit den verschiedenen Anwendungen interagiert, die auf seinem Computer ausgeführt werden. Was mir logisch erschien, war ein Protokoll der Fensterfokusereignisse mit Zeitstempeln zu führen, die zeigen, welche Anwendungen im Laufe des Tages im Fokus standen.Verfolgen von Fensterereignissen auf Betriebssystemebene in Java

Wir haben einige andere Dinge in dieser Anwendung zu tun, die in Java einfach wäre. Ich habe jedoch noch keine GUI-Programmierung in Java gemacht, daher bin ich mir nicht sicher, ob es möglich ist, Informationen über Windows-Betriebssysteme auf der Ebene der awt-API zu erhalten. Ist das überhaupt möglich? Wäre es eine andere Möglichkeit, dies über JNI zu tun, oder wäre eine native Anwendung erforderlich?

PS: Ich weiß, dass diese Anforderung ein wenig schändlich klingt, aber ich bin nur hier, um festzustellen, ob dies technisch möglich ist oder nicht. Bitte schieß den Boten nicht, das war nicht meine Idee. :)

Antwort

5

Fokusereignisse könnten funktionieren; Vielleicht möchten Sie auch Windows keyboard and mouse hooks betrachten. Mit jedem dieser Ansätze möchten Sie eine DLL (nativen Code) erstellen und JNI verwenden, um darauf zuzugreifen.

0

Ich glaube nicht, dass dies mit AWT möglich ist. Java hat keine Möglichkeit, auf die Prozesse der anderen Anwendungen zuzugreifen.

5

Ohne Rückgriff auf nativen Code glaube ich nicht, dass dies möglich ist.

0

Ich denke, dass Sie eine andere Sprache verwenden sollten.
Es gibt andere Sprachen wie C++ zum Beispiel, die für diese Art von Problemen vorgerüstet sind :)

0

Sie fragen im Grunde, dass Ihre App in Betriebssystembenachrichtigungen zu anderen Anwendungen enthalten sein soll. Sie müssen wahrscheinlich entweder über eine App verfügen, die die anderen Apps als untergeordnete Prozesse startet, oder Sie verwenden etwas wie eine Rootkit-API, um Berechtigungen festzulegen, die über denen einer normalen Anwendung liegen.

Wenn das Ziel darin besteht zu sehen, wie viel Zeit ein Benutzer mit Ihrer Anwendung interagiert, können Sie einige grobe Ideen bekommen, indem Sie sich die CPU-Zeit für Ihre Anwendung ansehen oder wie Verzögerungen zwischen E/A-Ereignissen und diese in Statistiken darüber umwandeln, wie aktiv der Benutzer ist.

Sonst denke ich, dass Sie in der Lage sein könnten, mit einigen Spyware-Entwicklern Kontakt aufzunehmen, um zu bekommen, was Sie brauchen.

0

Wenn Sie dies von Java aus tun möchten und nicht Ihren eigenen nativen Code schreiben möchten, können Sie versuchen SWT. Ich bezweifle, dass es plattformunabhängige Möglichkeiten gibt, das zu erreichen, was Sie wollen, aber Sie können in den Windows-spezifischen Klassen herumstochern, besonders org.eclipse.swt.internal.win32.OS.

1

Sie können nach einer Windows-Testbibliothek suchen - einige davon werden zum Erstellen und Abfangen win32-nativer Ereignisse erstellt.

0

Wir können auch Windows-Taskliste überwachen die Anwendung von einem Benutzer verwendet, und es ist einfach in Java, Konsole zu lesen, und Sie können auch die Prozessdaten von ihm erhalten, aber Sie benötigen wenig String-Verarbeitung in ihm, bcz alle Die Daten, die Sie bekommen, werden im String-Format sein, und Sie müssen Ihre benötigten Daten davon erhalten, um es nützlich zu machen, wenn Sie weitere Hilfe benötigen, kann ich den Code dafür geben, um diese Daten für die Verfolgung zu überwachen und zu speichern, aber dies Lösung wird das Fenster-Ereignis nicht überschreiben, es gibt der Aufgabe Informationen,

Verwandte Themen