문제

나는 손잡이를 찾으려고 노력하고있다 기본 외부 응용 프로그램의 실. 내가 찾으려고하는 프로그램은 멀티 스레드이며 항상 기본 스레드를 찾는 것이 중요합니다. 나는 최대이 프로그램의 사본이 하나 있다는 것을 알고 있습니다. 이것이 내가 지금하고있는 방법입니다.

Process[] someProcesses = Process.GetProcessesByName("some");
IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)someProcesses[0].Threads[0].Id);

대부분의 경우, 스레드 [0]는 기본 스레드이지만 다른 경우에는 그렇지 않습니다. 내가 찾은 스레드가 다른 응용 프로그램의 기본 스레드인지 확인하려면 어떻게해야합니까?

고맙습니다.

도움이 되었습니까?

해결책

이것은 거친 추측이지만 Processes, 당신은 얻을 수 있습니다 ProcessThreadCollection TH를 통해 Threads 재산. 각 스레드에는 a가 있습니다 StartTime (사용 가능 Ticks 또한 메인 스레드가 처음 시작되었다고 가정하면 시작 시간이 가장 낮은 스레드를 선택할 수 있습니다.

그렇지 않으면 각 스레드에 대한 통화 스택을 얻을 수 있다면 응용 프로그램 입력 점을 찾을 수 있습니다. 나는 그것을 위해 관리되는 전화를 찾을 수 없었지만 P/Invoke를 통해 얻을 수 있다고 확신합니다.

다른 팁

늦게 파티에 오는 것에 대해 이야기하지만 누군가가 Google 검색이나 무언가에서 이것을 찾으면 내 메인 스레드가 설정되어 있습니다. Thread.CurrentThread.Name 내 앱이 시작될 때 값 ( "메인")으로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top