如何监控用户正在执行的应用程序

时间:2011-08-11 07:18:14

标签: c# c++ winapi

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

3 个答案:

答案 0 :(得分:1)

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

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

编辑:我的answer to another related question可以为您提供帮助。

答案 1 :(得分:0)

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

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

要获取具有窗口的进程:

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

答案 2 :(得分:0)

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字符串数组中可用。