嘿那里,有没有一种方法可以在不使用ManagementEventWatcher的情况下启动新进程时引发事件,也不需要使用Process.GetProcesses()? ManagementEventWatcher的问题在于用户需要具有高预检。 谢谢!!!C#在新进程启动时引发一个事件
回答
与您当前正在使用的外部事件Win32_ProcessStartTrace
不同,WMI内部事件不需要管理员权限,__InstanceCreationEvent
和__InstanceDeletionEvent
。
这里是你可以用它来追踪过程开始的样本查询:
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使用率为代价提供更快的响应速度。
奇怪的是,一个应用程序不需要在windows中创建一个窗口。创建过程可能不属于您工作的窗口工作站。无论如何,您需要找到该进程的窗口,并且还需要检测所有进程的新窗口和关闭窗口。
所以枚举窗口是更清洁/更容易的选择。
尝试使用EnumChildWindows
桌面处理函数(通过GetDesktopWindow
检索)来查找应用程序的顶级窗口。在获得的句柄上使用GetWindowThreadProcessId
和EnumThreadWindows
来检测窗口的子窗口。
低优先级的线程将完成这项工作。
应该有可能通过在Windows中配置审计进程跟踪来确定应用程序上次运行的时间。下面的链接可能让你开始:
过程跟踪将创建在Windows事件日志条目,然后您可以访问使用C#。
你或许可以使用EnumDesktopWindows从user32.dll中,你会得到所有的窗口句柄,您可以检查使用GetWindowText函数窗口的标题,以及API使用GetClassName API类型的窗口。
这样你可以隐藏任何地方的提示或宝藏。 (因为你会得到所有窗口(和控件)的句柄)。
看看这个类将是你 Managed Global Hook for Window Creation and Destruction
在这篇文章中,有人创造了很好的类容易附着事件有用,您可以运行代码,而无需提升权限。
一旦你得到窗口(控制)句柄,你可以添加文字或绘制图像的提示。
- 1. 当引发Timer事件时,Windows服务如何启动进程?
- 2. 在事务中启动新进程
- 3. 当进程启动时,系统是否触发了一个事件?
- 4. Chrome应用程序重新启动时发生的事件
- 5. 为进程创建的每个子窗口引发一个事件 - c#
- 6. 在C#中启动进程并传递一个xml文件
- 7. C#CF重新启动一个线程
- 8. 在不知道进程启动顺序的情况下在另一个进程上触发事件
- 9. C++如何用新的stdin和stdout启动一个进程
- 10. 启动一个进程并监听退出事件
- 11. C#引发事件
- 12. Docker - 进程不在启动时启动
- 13. 当尝试启动一个进程时发生ThreadStateException
- 14. Boost进程间:如何启动一个新进程?
- 15. 发生onSaveInstanceState事件时重新启动活动
- 16. 如何让一个进程在c#/ .net的另一个进程中触发一个事件?
- 17. 启动和停止Mongrel Rails启动时的另一个进程
- 18. JS:onChange事件在启动时
- 19. 如何在新事件写入时引发事件?
- 20. 进程启动时发生Log4Net错误
- 21. 启动新进程实例时出错
- 22. 如何重新启动一组进程时,它是从其中的一个C代码触发
- 23. 在ASP.NET C#中自动引发事件发送电子邮件
- 24. 当一个活动记录事务是由一个线程在rails中引发时引发的异常
- 25. c#从另一个类中的另一个静态事件引发事件
- 26. 在python中启动一个进程每小时一次
- 27. 我该如何定义一个事件,然后在事件发生时启动一个代表
- 28. C#如何引发一个事件以从主窗体以外的类启动计时器?
- 29. 只有在上一次Elapsed事件结束后启动计时器事件? [c#]
- 30. 启动一个10.3.3 Weblogic域引发NoClassDefFoundError
而不是试图规避安全模型,如何告诉我们你实际上试图解决什么问题?可能有更好的整体方法,你没有想到。 – 2011-02-05 18:59:28
我正在创建一个使用操作系统窗口的游戏(Treasure Hunt),因此,当我打开一个新的记事本或计算器时,我将向该进程发送提示..所以我需要在下一个进程启动时引发事件,所以我可以发送宝藏的提示....我希望你得到它.... – user604627 2011-02-05 19:06:51
你尝试过`ManagementEventWatcher`吗?我没有在文档中看到任何需要高权限的文档,但我承认我没有在非常有限的用户帐户上尝试过。 – 2011-02-05 19:24:58