2009-03-02 2 views
1

사용자가 자신의 컴퓨터에서 실행중인 다른 응용 프로그램과 상호 작용하는 양을 추적 할 수 있어야한다는 요구 사항이 있습니다. 논리적으로 생각하는 것은 윈도우 포커스 이벤트의 로그를 타임 스탬프로 유지하는 것이 었습니다. 타임 스탬프를 사용하면 어떤 응용 프로그램이 당일 코스에 집중했는지 알 수 있습니다.Java에서 OS 레벨 창 이벤트 추적

우리는이 응용 프로그램에서 Java에서 쉽게 할 수있는 다른 것들을 가지고 있습니다. 그러나 Java에서 GUI 프로그래밍을 전혀하지 않았으므로 awt API를 통해 OS 레벨 창에 대한 정보를 얻을 수 있는지 확실하지 않습니다. 그게 가능한가? JNI를 통해이를 수행하는 또 다른 방법이있을 것인가 아니면 기본 응용 프로그램에서이를 수행해야합니까?

추신 : 나는이 요구 사항이 약간 사란스러운 것처럼 들리지만 기술적으로 가능한지 여부를 판단하기 위해 여기 있습니다. 제발 메신저를 쏘지 마세요, 제 생각이 아니 었습니다. :)

답변

5

포커스 이벤트가 작동 할 수 있습니다. Windows keyboard and mouse hooks을 고려할 수도 있습니다. 이러한 접근 방식 중 하나를 사용하면 DLL (원시 코드)을 만들고 JNI를 사용하여 액세스 할 수 있습니다.

0

AWT를 사용할 수 없다고 생각합니다. Java는 다른 응용 프로그램의 프로세스에 액세스 할 수있는 방법이 없습니다.

5

네이티브 코드를 사용하지 않아서 이것이 가능할 것이라고 생각하지 않습니다.

0

다른 언어 사용을 고려해보십시오.
문제의이 종류 :

0

당신은 기본적으로 앱이 다른 응용 프로그램 OS 알림에 포함 할 것을 요구하는지에 대한 predistinated된다 예를 들어 C와 같은 다른 언어 ++이 있습니다. 다른 응용 프로그램을 자식 프로세스로 시작하는 응용 프로그램이나 루트킷 API와 같은 응용 프로그램을 사용하여 일반 응용 프로그램이 부여 된 권한보다 높은 권한을 설정해야 할 수도 있습니다.

사용자가 응용 프로그램과 상호 작용하는 시간을 확인하는 것이 목표 인 경우 응용 프로그램에 예약 된 CPU 시간을보고 거친 아이디어를 얻거나 I/O 이벤트와 그것들을 사용자가 얼마나 활동적인지에 대한 통계로 매핑합니다.

그렇지 않으면 필자는 귀하가 필요한 것을 얻기 위해 일부 스파이웨어 개발자와 연락 할 수있을 것이라고 생각합니다.

0

Java에서 이것을 수행하고 고유 한 원시 코드를 작성하지 않으려면 SWT을 시도하십시오. 플랫폼 독립적 인 방법으로 원하는 것을 성취 할 수 있을지는 모르지만 Windows 관련 클래스, 특히 org.eclipse.swt.internal.win32.OS에서 살펴볼 수 있습니다.

1

윈도우 테스팅 라이브러리를 찾을 수도 있습니다 - 그 중 일부는 win32 네이티브 이벤트를 생성하고 가로 채기 위해 만들어졌습니다.

0

우리는 또한 사용자가 사용하는 응용 프로그램을 추적하기 위해 windows tasklist를 모니터 할 수 있으며 콘솔에서 읽을 수있는 java에서 간단하며 프로세스 데이터도 얻을 수 있지만 bcz all에서는 약간의 무거운 문자열 처리가 필요합니다. 당신이 얻을 수있는 데이터는 문자열 형식이 될 것이고, 유용한 정보를 얻기 위해 필요한 데이터를 가져와야합니다. 더 많은 도움이 필요하다면 추적을 위해 해당 데이터를 모니터링하고 저장할 수있는 코드를 제공 할 수 있습니다. 솔루션은 윈도우 이벤트를 오버라이드하지 않으며, 태스크 정보를 제공합니다.