سؤال

في نظام التشغيل Windows، هل هناك طريقة للتحقق من وجود متغير بيئة لعملية أخرى؟تحتاج فقط إلى التحقق من وجودها، وليس بالضرورة الحصول على القيمة.

أحتاج إلى القيام بذلك من الكود.

هل كانت مفيدة؟

المحلول

إذا كنت تعرف العنوان الظاهرية التي يتم تخزين البيئة، يمكنك استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/ms684320(VS.85).aspx" يختلط = "noreferrer"> OpenProcess و ReadProcessMemory لقراءة البيئة من عملية أخرى. ومع ذلك، للعثور على العنوان الظاهرية، ستحتاج لكزة حولها في الموضوع معلومات بلوك من واحد من المواضيع العملية ".

لحصول ذلك، سوف تحتاج إلى استدعاء GetThreadContext() بعد استدعاء SuspendThread() . ولكن من أجل استدعاء هؤلاء، كنت في حاجة الى معالجة موضوع، والتي يمكنك الحصول عليها عن طريق الدعوة <لأ href = "http://msdn.microsoft.com/en-us/library/ms682489(VS.85).aspx" يختلط = "noreferrer"> CreateToolhelp32Snapshot مع العلم TH32CS_SNAPTHREAD لإنشاء لقطة من العملية، <وأ href = "http://msdn.microsoft.com/en-us/library/ms686728(VS.85). ASPX "يختلط =" noreferrer "> Thread32First للحصول على ID خيط الخيط الأول في هذه العملية، و<لأ href =" http://msdn.microsoft.com/en-us/library/ms684335 ( VS.85) .ASPX "يختلط =" noreferrer "> OpenThread للحصول على مؤشر إلى الموضوع.

نصائح أخرى

مع فائدة:

يمكنك استخدام عملية المستكشف.

انقر بزر الماوس الأيمن على العملية، انتقل إلى ملكيات... وهناك بيئة علامة التبويب التي تسرد متغيرات البيئة لهذه العملية.

مع الكود:

لا يبدو أن هناك استدعاء Win32 API للقيام بذلك مباشرة، ولكن يبدو أنك تتلاعب بنتائج GetProcessStrings للوصول إلى هذه المعلومات. مقالة CodeProject هذه لديه بعض التعليمات البرمجية لتبدأ.

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