2010-05-06 4 views
1

Je voudrais avoir un eventhandler qui déclenche si une nouvelle application est démarrée. J'ai entendu dire que c'est possible en utilisant un crochet mais les seuls exemples que je peux trouver sont basés sur des événements souris/clavier.Comment capturer l'événement si un nouveau processus (application!) Est démarré?

Qu'est-ce qu'un exemple de lien sur la façon dont je peux créer un tel crochet en C#? Oh et btw: Non, je ne veux pas utiliser WMI qui pourrait être une solution, mais ce n'est pas une option dans mon cas.

+1

Pourquoi WMI n'est-il pas une option dans votre cas? –

+0

J'ai parfois utilisé WMI pour d'autres applications et j'ai eu beaucoup de problèmes, surtout en cas de WMI distant. Peut-être que cela ne sera pas dû au fait que les informations sur les événements sont locales mais j'aimerais que ce soit le mécanisme d'accrochage. J'ai également lu la plupart du temps de l'accrochage au lieu d'utiliser WMI. Il semble que l'accrochage soit plus à la base de l'information que WMI et que l'accrochage soit plus performant. – Marcus

Répondre

0

Vous pouvez utiliser une solution loin d'être élégante qui effectue une interrogation des processus dans le système.

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; 
} 

Si votre application n'a pas besoin d'une grande précision, vous pouvez configurer un grand temps de sommeil entre les sondages qui rendrait beaucoup moins de temps.

+0

De cette façon, je dois parcourir tous les processus encore et encore et encore. Pour le moment, mon application fonctionne de manière temporisée, mais je ne veux pas utiliser de temporisateur puisqu'il existe un moyen d'accéder aux événements réels. Les solutions basées sur des temporisateurs sont quelque chose comme une perte de temps et de performance. Mais merci quand même! :) – Marcus

Questions connexes