Question

Je suis en train de trouver la poignée du fil principal d'une application externe. Le programme que j'essaie de trouver le fil conducteur de multithread est et il est important que je trouve toujours le fil conducteur. Je sais que tout au plus il y aura une copie de ce programme en cours. Voilà comment je le fais en ce moment:

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

La plupart du temps, Threads [0] est le fil conducteur, mais d'autres fois, ce n'est pas. Comment puis-je faire en sorte que le fil que je trouve est le fil conducteur de l'autre application?

Thankyou.

Était-ce utile?

La solution

Ceci est une supposition sauvage, mais via Processes, vous pouvez obtenir un ProcessThreadCollection via la propriété Threads. Chaque thread a un StartTime (disponible Ticks aussi bien), donc en supposant que le fil conducteur est le premier à démarrer, vous pouvez choisir celui avec le meilleur temps de démarrage.

Sinon, si vous pouvez obtenir la pile d'appels pour chaque thread, vous pouvez rechercher le point d'entrée de l'application. Je ne pouvais pas trouver un appel réussi pour cela, mais je suis sûr que vous pouvez l'obtenir par P / Invoke.

Autres conseils

Parler de venir à la fête en retard - mais si quelqu'un trouve cela dans une recherche Google ou quelque chose, ce que je fais à mon ID thread principal est réglé Thread.CurrentThread.Name à une valeur (comme « Main ») lorsque mon application démarre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top