如果启动新进程(应用程序!),如何捕获事件?

时间:2010-05-06 07:59:54

标签: c# process pinvoke unmanaged hook

我想有一些eventhandler,如果启动了一个新的应用程序,它会引发。我听说这可以通过使用钩子来实现,但我能找到的唯一例子是基于鼠标/键盘事件。

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

哦,顺便说一下:不,我不想使用WMI这也可能是一个解决方案,但在我的情况下它不是一个选项。

1 个答案:

答案 0 :(得分: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;
}

如果您的应用程序不需要高精度,您可以在民意调查之间设置一个很长的睡眠时间,这样可以减少耗时。