2009-08-15 112 views
2

有没有办法通知当一个程序在用户在c#中执行或终止?我正在谈论用户可以执行的所有程序,而不仅仅是某个程序。我希望在用户执行.exe文件时收到通知。如何在c#中通知程序执行和终止?

我什至不能想到一个关键字谷歌。

任何建议,将不胜感激!

回答

3

我知道的最接近的东西就是使用钩子。

您可以使用WH_SHELL Hooks在系统创建或销毁新的,非拥有的顶级窗口时收到通知。这与过程不同,但在很多情况下它非常接近,并且在其他情况下可能更有用(因为它会在打开一个新的Word文档窗口后显示,即使它们正在使用共享处理)。

您可能可以将它与EnumProcess结合来检查进程列表是否已更改。这将用于跟踪Windows应用程序(但不包括在现有控制台中运行的服务或基于控制台的应用程序)。

+0

其实,这正是我所期待的。谢谢! – Moon 2009-08-15 00:51:59

2

在Microsoft .NET Framework 3.5中,您可以获取Process es列表并注册Process.Exited事件。我想有人可以实现一个轮询系统,在这个系统中他们不断地寻找新的进程,但是当启动时没有真正通知你。

- 编辑 -

您可能会发现this article有用。如果您愿意编写内核模式驱动程序,则可以控制每个进程的开始和结束。

现在,如果你真的想要疯狂,你可以挂钩到Microsoft Detours。这是关于这个的interesting article

+0

-1:这对执行进程时没有任何通知。 – 2009-08-15 01:37:01

+0

希望编辑不会冒犯你多少。 :) – 2009-08-15 03:30:52

+0

@Paul Williams:感谢您的额外链接和信息! – Moon 2009-08-15 03:37:04