【问题标题】:How to monitor apps which are being executed by user如何监控用户正在执行的应用程序
【发布时间】:2011-08-11 07:18:13
【问题描述】:

我想创建一个应用程序/服务来监控用户活动,尤其是记录用户正在运行的每个应用程序。
这在c#中可能吗?我想不是。那么如何在 c++ 和 winapi 中做到这一点呢? 我不想要完整的解决方案,因为它肯定很复杂。只给我一个建议。
谢谢!

【问题讨论】:

  • 这样的工具不是已经很多了吗?
  • 我认为 Xperf 应该做你想做的事。
  • 当然,有很多工具可以做到这一点,但我想把这个功能加入我自己的。

标签: c# c++ winapi


【解决方案1】:

您可以编写一个挂钩 CreateProcessW 的 DLL。在这个钩子中,您将 (a) 在生成进程时执行您想要执行的操作,并且 (b) 将自身注入到新进程中。

然后,将 DLL 注入所有当前正在运行的进程中。

编辑:我的answer to another related question 应该可以帮助你。

【讨论】:

    【解决方案2】:

    看这里 http://msdn.microsoft.com/en-us/library/1f3ys1f9.aspx

    这将为您提供在本地计算机上运行的所有进程。

    要获取具有窗口的进程,请执行以下操作:

    var procWithWindow = from proc in Process.GetProcesses()
                         where IntPtr.Zero != proc.MainWindowHandle
                         select proc;
    

    【讨论】:

      【解决方案3】:
      Management.ManagementObjectSearcher Processes = new Management.ManagementObjectSearcher("SELECT * FROM Win32_Process");
      foreach (Management.ManagementObject Process in Processes.Get())
      {
          if (Process.Item("ExecutablePath") != null)
          {
              string ExecutablePath = Process.Item("ExecutablePath").ToString();
              string[] OwnerInfo = new string[2];
              Process.InvokeMethod("GetOwner", (object[])OwnerInfo);
              // do something
          }
      }
      

      进程所有者将在OwnerInfo 字符串数组中可用。

      【讨论】:

      • ToString [in the if] 和 Processes.Get [in the foreach] 后缺少 () 括号
      • 不客气。但是,嗯... Processes.Get 之后您仍然缺少 ()
      • 我不确定,但您的代码会获取所有当前正在运行的进程,对吗?相反,我想在每个进程/程序启动时准确地监控和捕获它(即像防病毒软件那样)以记录执行日期和时间。
      • @daftu,要(有效地)做到这一点,你会钩住 WinAPI CreateProcess() 之类的东西,这很麻烦。比较结果更容易。或者,您可以将您的 DLL 添加到HKEY_LOCAL_MACHINE\SYSTEM\KERNEL,它会在进程启动时加载。使用它来确定进程何时开始,它由谁拥有,并通过它与父服务通信。 IPC。
      • @freedompeace,结果之间的差异可能不准确,即。当用户执行一个只会激活几秒钟的程序时,我的应用程序将无法注意到这一点。将DLL添加到注册表应该是更好的方法,所以我开始解决这个问题。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多