سؤال

وحصلت على جزء من المشكلة.

وذات صلة لأسئلتي السابقة حول مقابل المتلاحقة SP3 . مصححة SP3 ، ونحن قد وصلنا إلى استنتاج مفاده أن هناك عملية مستكشف الإنترنت التي بدأت، تعليمات لتحميل ملف هتمل بسيط من القرص المحلي، الذي يحتوي على جافا سكريبت، الذي يفتح بقية من أكبر دردشة / نظام الاجتماع. بدء Internet Explorer من عميل Lotus Notes.

ولسوء الحظ، كل ما يمكن أن نراه هو عملية IEXPLORE.EXE ظهرت في إدارة المهام، وبعض الثواني في وقت لاحق، تختفي مرة أخرى.

إذا حاولنا فتح ملف .html محلي، التي وجدنا على القرص، وأنه يعطي لنا أن شريط المعلومات في الجزء العلوي، وقال لنا أنه تم تعطيل محتوى نشط. هذا، ومع ذلك، ليست هي المشكلة الحقيقية. لدينا آلة أخرى لديها نفس الإعدادات ولكن حيث يعمل كل شيء، وتحميل ملف هتمل يدويا يعطينا نفس الخطأ هناك أيضا.

ولكن، ربما هناك رسالة خطأ آخر التي تظهر عند بدء IEXPLORE من الملاحظات، ولكن منذ يفترض هذه العملية إلى مجرد انعاش بقية النظام، ويتم إخفاء هذه النافذة، ونحن لا يمكن أن نرى ذلك، وهذا هو ورسالة الخطأ / المشكلة.

وهكذا، فكرت، ربما يجب علي أن أحاول خلق برنامج صغير الذي ينتظر IEXPLORE.EXE لبدء، ثم يظهر على الفور النافذة، بحيث يمكننا أن نرى رسالة الخطأ، أو ما هي المشكلة. على الأقل، ونأمل أن نكون قادرين على رؤية ذلك.

وحتى الآن جيد جدا، إلا أنه إذا بدأت عملية من برنامج بلدي، مع إطار مخفي، والتعامل مع الإطار الرئيسي هو 0، وبالتالي لا يمكن أن تظهر النافذة بعد كل شيء. أتوقع بدأت هذه العملية IEXPLORE.EXE من لوتس نوتس لديك نفس المشكلة.

وهو مكتوب برنامج الرصد الخاصة بي في C #، ويعمل أساسا هذه الحلقة:

foreach (var process in Process.GetProcesses())
{
    if (process.ProcessName.ToLower() == "iexplore")
        result.Add(process);
}

وهذا تلتقط كل IEXPLORE.EXE العمليات، ويندوز أم لا، ومع IE8، وأحصل على 2 عمليات الإطار الأول، كما هو متوقع. I تشغيل هذا مرارا وتكرارا، ويعالج الاختلافات من يدير السابقة.

ومع ذلك، فإن عملية له لفترة وجيزة مقبض النافذة 0 في البداية، لذلك أنا تغييره إلى هذا:

foreach (var process in Process.GetProcesses())
{
    if (process.ProcessName.ToLower() == "iexplore" &&
        process.MainWindowHandle != IntPtr.Zero)
    {
        result.Add(process);
    }
}

ولكن الآن لا التقاط أي شيء على الإطلاق، حتى بعد نافذة حصلت على مقبض (ونعم، process.MainWindowHandle لديها قيمة مقبض غير صفرية بعد أن ثبت النافذة، ولكن في الحالة التي يكون فيها يتم عرض نافذة أبدا، فإنه يبقى في 0).

ولذا، فإن السؤال هو: هل هناك أي وسيلة بالنسبة لي أن أغتنم هذه العملية IEXPLORE.EXE الخفية، وإرشاد إلى إظهار نفسه، عندما لم يكن لديك مقبض النافذة بالفعل؟ أشك في ذلك، ولكن ربما شخص ما يمكن أن يثبت لي خطأ.

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

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

المحلول

وأنا لا أعتقد أن هناك أي وسيلة لفرض نافذة IE التي ليس لديها مقبض إطار تخصيص مقبض النافذة لنفسها (أو استخدام المخصصة سابقا واحد) وعرض نفسها.

وأما بالنسبة لطريقة النسخ الاحتياطي الخاص بك: أنا <م> التفكير هذا من شأنه أن يعمل، ولكن كنت تعمل في منطقة خطرة هناك. أود أن أوصى فعلا كتابة الرقائق لمجرد تسجيل كل احتجاج IEXPLORE.EXE وكل ما يدور في ذلك، واستخدام ذلك لتميز مشكلتك. فقط بعد تميز بدقة مشكلتك مع تسجيل حميدة تماما وأود أن أقترح ربما تعديل المعلمات لإجبار IEXPLORE.EXE لعرض النافذة.

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