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