2010-05-17 2 views
0

나는 파일 이름으로 열린 Microsoft Excel과 같은 시스템에서 사용자 활동을 추적하고자하는 하나의 데스크톱 응용 프로그램을 만들고 있습니다 ... 그 시간의 상당 부분을 ...C# .net 2.0을 사용하여 시간과 응용 프로그램 이름이있는 사용자 활동을 기록하는 방법은 무엇입니까?

xml 파일 로그를 유지합니다.

저에게 도움을주십시오.

+0

C# .net winform application.so 코드를 웹 응용 프로그램 코드가 아닌 코드로 제공하십시오. –

+0

Excel * 및 * Word를 동시에 열어 놓고 무엇을하고 싶습니까? 현재 어떤 프로그램에 포커스가 있는지 감지하고 싶습니까? –

+0

예 초점이 맞춰진 응용 프로그램과 열려있는 파일을 확인하고 시작 및 종료 시간과 함께 해당 응용 프로그램에 소요 된 시간을 확인합니다. –

답변

0

이것은 질문 자체가 의미하는 것이 무엇인지 파악해야하는 질문 중 하나와 같습니다. 액면 그대로, 세션에서 실행되는 프로세스에서 사용자가 소비하는 시간을 모니터링하려는 것처럼 들리지만 사용자가 특정 하위 집합에서 시간을 보낸지 여부 및 시간을 알기를 원할 수도 있습니다 실행중인 모든 프로세스의

올바른 가정이 무엇인지 확실하지 않으므로 최선을 다해 해결하겠습니다.

하나 또는 모든 프로세스를 모니터링하는지 여부에 상관없이, 시작할 때 실행중인 프로세스를 알아야하며 새 프로세스가 만들어 질 때 알림을 받아야합니다. 이러한 요구 사항 중 첫 번째는 System.Diagnostics.Process 클래스의 GetProcesses() 메서드를 사용하여 충족 할 수 있으며 두 번째는 좀 더 까다 롭습니다.

새 프로세스가 있는지 여부를 확인하는 옵션 중 하나는 지정된 간격 (폴링) 후에 GetProcesses를 호출하고 프로세스 목록이 변경되었는지 여부를 확인하는 것입니다. 이 작업을 수행 할 수는 있지만 특히 너무 자주 수행하는 경우 시스템 자원 측면에서 비용이 많이 듭니다.

또 다른 옵션은 비동기 적으로 새 프로세스의 생성을 통지 받기 위해 등록 할 수있는 메커니즘을 찾는 것입니다. 이러한 것이 .NET Framework 2.0에는 존재하지 않지만 Win32 API의 일부입니다. 불행히도 그것이 무엇인지 모르기 때문에 특정 함수 이름을 제공하지 않습니다.

마지막으로 구독을 선택하면 알림 수가 적을수록 해당 알림을 생성하고 처리하는 데 필요한 리소스가 적어집니다.

실행중인 프로세스와 관심있는 프로세스가 무엇인지 알게되면 사용자가 실제로 응용 프로그램을 사용하는 데 걸리는 시간을 측정 할 수 있도록 포커스가 새로운 관심있는 프로세스로 변경되는 시점을 결정해야합니다. GetForegroundWindow 함수를 사용하여 현재 포커스가 설정된 창의 창 핸들을 가져옵니다.

지금까지 pranay의 대답에 의해 제안 된 XML 파일에 대한 갈망, 당신은 long4net 같은 외부 라이브러리를 사용할 수 있습니다, 또는 당신이 System.Xml 네임 스페이스에 XmlTextWriter에 나 된 XmlDocument 클래스를 사용하여 로그 파일을 만들 수

관련 문제