2

我正在尝试查找外部应用程序主线程的句柄。我试图找到主线程的程序是多线程的,重要的是我总是找到主线程。我知道最多只会运行这个程序的一个副本。这就是我目前的做法:

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

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

谢谢你。

4

2 回答 2

3

这是一个疯狂的猜测,但是 via Processes,你可以得到一个ProcessThreadCollectionviaThreads属性。每个线程都有一个StartTime(也可用Ticks),因此假设主线程是第一个启动的,您可以选择启动时间最短的线程。

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

于 2009-02-06T22:46:17.963 回答
0

谈论迟到的聚会——但是如果有人在谷歌搜索或其他东西中找到了这个,Thread.CurrentThread.Name当我的应用程序启动时,我对我的主线程的 ID 所做的事情就会被设置为一个值(比如“Main”)。

于 2011-05-02T15:23:07.563 回答