嘿,有没有办法在不使用ManagementEventWatcher而不使用Process.GetProcesses()的情况下启动新进程时引发事件? ManagementEventWatcher的问题在于用户需要具有高预制度。 谢谢!!!
答案 0 :(得分:9)
与您当前使用的外部事件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使用率。
答案 1 :(得分:1)
应该可以通过在Windows中配置审计进程跟踪来确定上次运行应用程序的时间。以下链接可以帮助您入门:
进程跟踪将在Windows事件日志中创建条目,然后您可以使用C#进行访问。
答案 2 :(得分:0)
奇怪的是应用程序不需要在windows中创建窗口。创建进程可能不属于您使用的窗口站。无论如何,您将需要找到该过程的窗口,并且还需要检测所有过程的新窗口和关闭窗口。
因此,枚举窗口更清晰/更容易选择。
在桌面句柄上尝试EnumChildWindows
函数(由GetDesktopWindow
检索)以查找应用程序的顶级窗口。在获取的句柄上使用GetWindowThreadProcessId
和EnumThreadWindows
来检测窗口的子窗口。
低优先级线程将完成这项工作。
答案 3 :(得分:0)
您可以使用user32.dll中的EnumDesktopWindows,您将获得所有窗口句柄,您可以使用GetWindowText检查窗口的标题,以及使用GetClassName的窗口类型。
这样你可以隐藏任何地方的提示或财富。 (因为你将获得所有窗口(和控件)的句柄)。
查看此课程是否对您有用 Managed Global Hook for Window Creation and Destruction
在那篇文章中,有人创建了一个易于附加事件的好类,你可以在不提升权限的情况下运行该代码。
获得窗口(控件)手柄后,您可以在其上添加文字或绘制图像以获取提示。