代码之家  ›  专栏  ›  技术社区  ›  James

.NET-查找外部应用程序主线程ID

  •  2
  • James  · 技术社区  · 16 年前

    我在试着找到 主要的 外部应用程序的线程。我试图找到的程序的主线程是多线程的,重要的是我总是找到主线程。我知道这个程序最多只能运行一个副本。我现在就是这样做的:

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

    大多数时候,线程[0]是主线程,但其他时候不是。如何确保找到的线程是另一个应用程序的主线程?

    谢谢你。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Brian Rasmussen    16 年前

    这是一个疯狂的猜测,但是通过 Processes 你可以得到一个 ProcessThreadCollection 通过 Threads 财产。每个线程都有一个 StartTime (可用) Ticks 同样),所以假设主线程是第一个启动的,您可以选择启动时间最低的线程。

    否则,如果可以为每个线程获取调用堆栈,则可以查找应用程序入口点。我找不到这样的托管调用,但我相信您可以通过P/Invoke获得它。

        2
  •  0
  •   Firo    12 年前

    谈论晚些时候来参加聚会——但是如果有人在谷歌搜索或其他东西中发现了这一点,我要做的是确定我的主线程 Thread.CurrentThread.Name 当我的应用程序启动时的值(如“主”)。