كيف يمكنني استخدام PostThreadMessage ليغلق إنترنت إكسبلورر من C ++

StackOverflow https://stackoverflow.com/questions/280345

سؤال

وأنا أحاول أن تبدأ iexplore.exe السماح لها تشغيل لمدة 5 ثوان ثم إغلاقه مرة أخرى.

وiexplore يفتح على ما يرام إلا أنه لا يغلق عند استدعاء PostThreadMessage. يمكن لأي شخص رؤية ما أفعله خطأ؟ هنا هو رمز بلادي:

CString IEPath = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";//GetIEPath();
//IEPath += ' ' + url;
std::string strCommand((LPCTSTR)IEPath);
PROCESS_INFORMATION    procinfo;
STARTUPINFO    startupinfo;    
GetStartupInfo(&startupinfo);

CreateProcess(
        NULL,       
        (char *)strCommand.c_str(),// name of executable module
        NULL,           // lpProcessAttributes
        NULL,           // lpThreadAttributes
        false,          // handle inheritance option
        CREATE_SHARED_WOW_VDM,              // creation flags
        NULL,           // new environment block
        NULL,           // current directory name
        &startupinfo,    // startup information
        &procinfo        // process information
        );


Sleep(5000);
    ::PostThreadMessage(procinfo.dwThreadId, WM_QUIT, 0, 0); //<---Dosent Close internet explorer!

وأي شخص لديه فكرة عما أفعله خطأ؟ أم أن هناك طريقة أفضل ما لتفعل خدعة؟

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

المحلول

وإذا كان يمكنك تعداد النوافذ على سطح المكتب وإرسال WM_CLOSE إلى إطار IE، فإنه قد عمل .. يمكنك استخدام برنامج التجسس للحصول على الدرجة نافذة نافذة IE

نصائح أخرى

ما هي قيمة الإرجاع من استدعاء PostThreadMessage؟ قد تعطي فكرة.

وبالنسبة لي، وهذا يعمل الكمال:

TerminateProcess(procinfo.hProcess, 0);

وحاول إرسال WM_CLOSE إلى الإطار الرئيسي (المستوى الأعلى). وهذا ما يعادل العادي الخروج على Alt-F4.

وأنا لا أملك جوابا على وجه التحديد لماذا PostThreadMessage لم تنجح. ولكن، ربما إذا كنت توضيح لماذا تريد أن تفعل هذا، هناك حل أفضل؟

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

وانتهى بي الأمر القيام سردا للنوافذ (كما اشابيل من التي ذكرتها يجب أن أقوم به) أنا استلهم من http://simplesamples.info/Windows/EnumWindows.php .

لا تستخدم PostThreadMessage ()، والذي يرسل رسالة إلى موضوع محدد في عملية الهدف بدلا من عملية 'ويندوز مضخة رسالة. استخدام PostMessage () أو SendMessage () بدلا من ذلك، الذي وضع الرسالة في ويندوز مضخة رسالة عملية الهدف - وهو بالضبط ما تريد

لا، أبدا استخدام SendMessage () (المادة Win32 والأساسية) لا تستخدم EnmWindows () (الرهيبة)

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