C# 2.0 如何使用c#.net 2.0记录用户活动以及所花费的时间和应用程序名称?

C# 2.0 如何使用c#.net 2.0记录用户活动以及所花费的时间和应用程序名称?,c#-2.0,C# 2.0,我正在创建一个桌面应用程序,我想在其中跟踪系统上的用户活动,如使用文件名打开的Microsoft Excel,并为。。。大部分时间都在这上面 我想创建一个xml文件来维护该日志 请在这方面给我帮助 这感觉就像是一个问题,你必须弄清楚问题本身的含义。从表面上看,您似乎想监控用户在其会话中运行的任何进程中花费了多长时间,但您可能真正想知道的是,用户是否以及在所有运行进程的特定子集中花费了多长时间 由于我不确定哪一个是正确的假设,我将尽我所能解决这两个问题 无论您监控的是一个流程还是所有流程,您都需要

我正在创建一个桌面应用程序,我想在其中跟踪系统上的用户活动,如使用文件名打开的Microsoft Excel,并为。。。大部分时间都在这上面

我想创建一个xml文件来维护该日志


请在这方面给我帮助

这感觉就像是一个问题,你必须弄清楚问题本身的含义。从表面上看,您似乎想监控用户在其会话中运行的任何进程中花费了多长时间,但您可能真正想知道的是,用户是否以及在所有运行进程的特定子集中花费了多长时间

由于我不确定哪一个是正确的假设,我将尽我所能解决这两个问题

无论您监控的是一个流程还是所有流程,您都需要知道启动时正在运行哪些流程,并且需要在创建新流程时收到通知。第一个需求可以通过System.Diagnostics.Process类的GetProcesses()方法来满足,第二个则要复杂一些

检查是否存在新进程的一个选项是在指定的时间间隔(轮询)后调用GetProcess,并确定进程列表是否已更改。虽然您可以这样做,但就系统资源而言,这可能非常昂贵,特别是如果进行得太频繁

另一种选择是寻找某种机制,允许您注册以接收异步创建新进程的通知。我不相信.NET Framework 2.0中存在这种情况,但很可能作为Win32 API的一部分存在,不幸的是,我无法为您提供特定的函数名,因为我不知道它是什么

最后,无论您如何做,我建议您尽可能具体地说明您选择订阅的通知,它们越少,生成和处理它们所使用的资源就越少

一旦您知道正在运行的进程以及您感兴趣的进程,您将需要确定焦点何时更改为感兴趣的新进程,以便您可以计算用户实际使用应用程序的时间,为此,您可以使用函数获取当前焦点窗口的窗口句柄


对于XML文件,您可以使用外部库,如pranay的回答所建议的long4net,或者,您可以使用System.Xml命名空间中的XmlTextWriter或XmlDocument类构建日志文件

我希望它用于c#.net winform应用程序。因此,请提供该代码而不是web应用程序代码。当Excel和Word同时打开时,您希望它做什么?您想让它检测当前哪个程序有焦点吗?是的,我想找到哪个是焦点应用程序,哪个文件在其中打开,以及在该应用程序上花费了多少时间以及启动和关闭时间。