كيفية الحصول على مؤشر IHTMLElement إلى TAG استضافة عنصر تحكم ActiveX

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

سؤال

لدي عنصر تحكم نشط تم إنشاؤه بواسطة إطار Firebreath (http://firebreath.org). أحتاج إلى الحصول على إشارة إلىu003Cobject> علامة في الصفحة التي تستضيف البرنامج المساعد من C ++.

إذا كنت أستخدم NPAPI ، فسأستخدم ثابت NPNVPluginElementNPOBOBJECT مع NPN_GETVALUE.

للتأكد من أنني واضح ، قل أن لدي ما يلي في الصفحة:

u003Cobject id="testPlugin" type="application/x-someplugin" width="100%" height="100%">u003C/object>

أرغب في الحصول على إشارة إلى المكون الإضافي كما لو كنت أستخدم document.getElementById ("TestPlugin") ، باستثناء من داخل رمز C ++ لعنصر تحكم ActiveX الذي يتم إدراجه في هذا التقليد.

يرجى ملاحظة أن تمرير المعرف في ASu003Cparam> ليس خيارًا جيدًا بالنسبة لي ، ولكن إذا كانت هناك طريقة للحصول على المعرف من داخل عنصر التحكم ActiveX الذي قد يعمل.

تعديل: أنا أفكر في استخدام getElementsByTagname ومحاولة العثور عليه من خلال DOM ، ولكن سيكون من الصعب معرفة الفرق بين حالتين من نفس البرنامج المساعد.

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

المحلول

بفضل مساهم Firebreath Jtojanen من فنلندا ، لدينا أخيرًا حل.

أول شيء هو أن كائن com يجب تكون مسجلة باسم "شقة" ، وليس "عازبة" (في السجل). خلاف ذلك ، هذا لن يعمل ؛ يبدو أن خطأ في كوم.

ثم في أي مكان بعد أن يتم استدعاء setClientsite ، يمكنك القيام بما يلي:

CComQIPtr<IOleControlSite> site(m_spClientSite);
CComPtr<IDispatch> dispatch;
site->GetExtendedControl(&dispatch);
CComQIPtr<IHTMLElement2> htmlElement = dispatch;

أتمنى أن ينقذ هذا شخصًا ما بعض الوقت ؛ لقد استغرق الأمر مني ما يقرب من عامين لأجد شخصًا يمكنه الإجابة عن هذا لي.

سيكون الكائن في htmlelement هوu003Cobject> وضع علامة على الملحق الخاص بك. لذا ، إذا قمت بالاستعلام عن أي من واجهاتك ، فيجب أن تنجح ، ولكن قد لا تكون في الواقع كائنك ، فمن المحتمل أن يكون غلافًا لكائنك.

نصائح أخرى

في C#:

    public int SetSite(object site)
    {
        if (site != null)
        {
            var oleControl = (IOleControlSite)site;
            object oHtmlElement;
            oleControl.GetExtendedControl(out oHtmlElement);
            var htmlElement = (IHTMLElement2)oHtmlElement;
            ...
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top