.NET — поиск идентификатора основного потока внешних приложений

StackOverflow https://stackoverflow.com/questions/522394

  •  22-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь найти ручку основной поток внешнего приложения.Программа, основной поток которой я пытаюсь найти, является многопоточной, и важно, чтобы я всегда находил основной поток.Я знаю, что будет работать максимум одна копия этой программы.Вот как я это делаю на данный момент:

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

В большинстве случаев Threads[0] является основным потоком, но иногда это не так.Как я могу убедиться, что найденный поток является основным потоком другого приложения?

Спасибо.

Это было полезно?

Решение

Это дикая догадка, но через Processes, вы можете получить ProcessThreadCollection через Threads свойство.Каждая нить имеет StartTime (доступно как Ticks также), поэтому, предполагая, что основной поток запускается первым, вы можете выбрать тот, у которого время запуска наименьшее.

В противном случае, если вы можете получить стек вызовов для каждого потока, вы можете поискать точку входа приложения.Мне не удалось найти для этого управляемый вызов, но я уверен, что вы можете получить его через P/Invoke.

Другие советы

Поговорим об опоздании на вечеринку - но если кто-то найдет это в поиске Google или что-то в этом роде, то, что я делаю, чтобы идентифицировать мою основную тему, установлено. Thread.CurrentThread.Name на значение (например, «Основное») при запуске моего приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top