.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/Invoc.

نصائح أخرى

الحديث عن القدوم إلى الحفلة متأخرًا - ولكن إذا وجد شخص ما هذا في بحث Google أو شيء من هذا القبيل، فإن ما أفعله لتحديد هوية موضوعي الرئيسي قد تم ضبطه Thread.CurrentThread.Name إلى قيمة (مثل "الرئيسية") عند بدء تشغيل تطبيقي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top