.NET - البحث عن معرف الموضوع الرئيسي للتطبيقات الخارجية
-
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
إلى قيمة (مثل "الرئيسية") عند بدء تشغيل تطبيقي.