嘿,有没有一种方法可以在不使用ManagementEventWatcher和Process.GetProcesses()的情况下启动新进程时引发事件?ManagementEventWatcher的问题是用户需要有更高的权限。谢谢!
发布于 2012-08-13 07:35:20
与您当前使用的外部事件Win32_ProcessStartTrace不同,__InstanceCreationEvent和__InstanceDeletionEvent WMI内部事件不需要管理员权限。
下面是一个示例查询,您可以使用它来跟踪流程启动:
SELECT TargetInstance
FROM __InstanceCreationEvent WITHIN 1
WHERE TargetInstance ISA 'Win32_Process'
AND TargetInstance.Name LIKE '<your process name.exe>'更多信息:Process Information and Notifications using WMI
因为这些是内部事件,所以WMI最终通过轮询的方式模拟事件行为,并且将仅周期性地检查新事件(在这里,每1秒)。将WITHIN持续时间减少到几分之几秒将以牺牲CPU使用率为代价提供更快的响应。
发布于 2012-08-18 11:51:21
应该可以通过在Windows中配置审核过程跟踪来确定应用程序上次运行的时间。以下链接可能会帮助您入门:
Audit process tracking
How can I track what programs come and go on my machine?
进程跟踪将在Windows事件日志中创建条目,然后您可以使用C#访问该日志。
发布于 2012-08-16 19:09:39
奇怪的是,应用程序不需要在windows中创建窗口。创建进程可能不属于您工作的窗口工作站。无论如何,您都需要查找该进程的窗口,并且还需要检测所有进程的新窗口和关闭窗口。
所以枚举窗口是更干净/更容易的选择。
尝试桌面句柄(由GetDesktopWindow检索)上的EnumChildWindows函数来查找应用程序的顶级窗口。在获取的句柄上使用GetWindowThreadProcessId和EnumThreadWindows来检测窗口的子窗口。
一个低优先级的线程将完成这项工作。
https://stackoverflow.com/questions/4908906
复制相似问题