2010-05-06 5 views
1

새로운 응용 프로그램이 시작되면 발생시키는 이벤트 처리기를 갖고 싶습니다. 후크를 사용하여 이것이 가능하다고 들었지만 마우스/키보드 이벤트를 기반으로하는 유일한 예가 있습니다.새 프로세스 (응용 프로그램!)가 시작되면 이벤트를 캡처하는 방법은 무엇입니까?

C#에서 이러한 후크를 만드는 방법에 대한 예제 링크는 무엇입니까?

아, btw : 아니요. 아니요. 해결책이 될 수있는 WMI을 사용하고 싶지는 않지만 제 경우에는 옵션이 아닙니다.

+1

왜 귀하의 경우 WMI를 사용할 수 없습니까? –

+0

다른 응용 프로그램에 WMI를 사용하는 경우가 종종 있었으며 특히 원격 WMI의 경우에는 많은 문제가있었습니다. 어쩌면 이것은 이벤트 정보가 지역적이라는 사실 때문에 발생하지는 않을 것입니다. 그러나 나는 그것이 후킹 메커니즘이되고 싶습니다. 나는 또한 WMI를 사용하는 대신 매달리기의 대부분의 시간을 읽었습니다. WMI보다 정보의 뿌리에 더 많이 매달린 것처럼 보이므로 후킹이 더 효과적입니다. – Marcus

답변

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

관련 문제