2010-05-06 31 views
1

我想要一些事件处理程序,如果启动一个新的应用程序就会引发这个事件处理程序。我听说这可以通过使用钩子,但我可以找到的唯一示例是基于鼠标/键盘事件。如何在新流程(应用程序!)启动时捕获事件?

什么是如何在C#中创建这样一个钩子的示例链接?

哦,顺便说一句:不,我不想用WMI这可能是一个解决方案,以及,但它不是我的情况选择。

+1

为什么WMI不是您的选择? – 2010-05-06 08:01:44

+0

我有时会将WMI用于其他应用程序,而且我有很多麻烦,特别是在远程WMI的情况下。也许这不会是由于事件信息是本地的事实,但我希望它是挂钩机制。我也阅读了大部分时间的挂钩方式,而不是使用WMI。这听起来像挂钩是更多的信息的根源比WMI将是,因此挂钩会更高性能。 – Marcus 2010-05-06 08:11:04

回答

0

您可以使用一个非常优雅的解决方案来执行轮询系统中的进程。

Process[] currentProcessList = Process.GetProcesses(); 

List<Process> newlyAddedProcesses = new List<Process>(); 
while (true) 
{ 
    newlyAddedProcesses.Clear(); 
    Process[] newProcessList = Process.GetProcesses(); 

    foreach (Process p in newProcessList) 
    { 
     if (!currentProcessList.Contains(p)) 
     { 
      newlyAddedProcesses.Add(p); 
     } 
    } 

    //TODO: do your work with newlyAddedProcesses 

    System.Threading.Thread.Sleep(500); 
    currentProcessList = newProcessList; 
} 

如果你的应用程序并不需要很高的精度,你可以设置轮询这将使它更费时之间有很大的睡眠时间。

+0

这种方式我必须一次又一次地遍历所有进程。目前我的应用程序在基于计时器的方式上工作,但我不想使用计时器,因为有办法实现真正​​的事件。基于定时器的解决方案就像浪费时间和性能。不过谢谢! :) – Marcus 2010-05-06 08:38:50

相关问题