Asynchronous Pluggable Controls

sinamine

Mitglied
Hey Leute!

Hoffe, dass mir jemand weiterhelfen kann.

Habe folgendes Problem: Ich habe ein ATL-COM Control welches in C++ geschrieben wurde. Dieses Control kann einen bestimmten Datei-Typ anzeigen. Nun soll es so sein wie es beim Acrobat Reader ist: wenn ich im Internet eine Datei mit meinem bestimmten Datei-Typen herunter lade, dann soll die Datei im Browser in meinem Control geöffnet werden.
Wenn ich in einem html-File ein Object-Tag hinzufüge mit meinem Control und in einer javascript-Function den Pfad meiner Datei mitübergebe, so wird dieses File im Browser und in meinem Control angezeigt.
Es soll aber, egal von welcher Seite ich meine Datei öffne, automatisch mein Browser-Fenster aufgehen mit meinem Control (so wie es ja auch bei PDF-Files funktioniert).

Ich habe in meiner Registry meine CLSID hinzugefügt und beim Internet-Explorer, bei den Optionen --> Programme --> Add-ons verwalten scheint mein Control auf.

Habe nun folgenden Link gefunden:
http://msdn2.microsoft.com/en-us/library/aa767916.aspx#Creating_an_Asynchro

Hier wird eben beschrieben, dass ich die Interfaces: IInternetProtocol und IInternetProtocolRoot implementieren soll. Allerdings habe ich keine Ahnung was ich in diese Funktionen reinschreiben soll.
Mein Problem ist, dass ich mich mit C++ nicht wirklich auskenne und ich zumindestens das Interface IInternetProtocol mit der Read-Methode und das Interface IInternetProtocolRoot mit der Start-Methode in meinem Control hinzufügen und implementieren muss.

Mir geht es nur darum, wie kann ich dem IE sagen, dass er den einen Dateityp mit meinem Control im Browser öffnet? Schließlich muss ich in meinem Control die Öffnen-Methode aufrufen und als Parameter die Datei mit gesamten Pfad übergeben.

Kann mir vielleicht irgendjemand helfen? Falls jemand so eine Beispiel bereits implementiert hat, wäre ich für einen Beispiel-Code sehr dankbar!

LG @ll
 
Danke für diesen Link. Den hatte ich mir schon mal angesehen, aber wohl nicht lange genug! ;) Ich habe wirklich schon sehr viel im Internet gesurft, aber noch nicht konkret etwas gefunden was mein Problem lösen könnte.

Habe es nun so weit, dass ich die Events von DWebBrowserEvents2 verwende. Allerdings habe ich noch keine Möglichkeit gefunden, damit ich beim Dateidownload im Browser mein Control angeben kann und dem Browser somit sage, mit welchem Programm er meine Datei öffnen soll. Das muss doch schließlich auch irgendwie machbar sein, oder

Eben wenn ich einen bestimmten Dateityp öffne, so soll ein Fenster mit meinem Control geöffnet werden und die Datei im Browser in meinem Control angezeigt werden.

Hat irgendjemand vielleicht Vorschläge oder so ein ähnliches Problem gehabt und kann mir helfen? Die Events von DWebBrowserEvents2 sind zwar ganz nett, aber es ist eben kein Event dabei was mir weiterhilft?!

LG @ll
 
Habe nun das Event OnDocumentComplete folgendermaßen implementiert:

Code:
void STDMETHODCALLTYPE CHelloWorldBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
	HRESULT hr = S_OK;

	spTempWebBrowser = pDisp;

	if(spTempWebBrowser && m_spWebBrowser && m_spWebBrowser.IsEqualObject(spTempWebBrowser))
	{
		CComPtr<IDispatch> spDispDoc;
		hr = m_spWebBrowser->get_Document(&spDispDoc);

		if(SUCCEEDED(hr))
		{
			CComQIPtr<IHTMLDocument2> spHTMLDoc = spDispDoc;
			if(spHTMLDoc != NULL)
			{				
				int i = GetAnchorData(spHTMLDoc);
			}
		}
	}
}

int CHelloWorldBHO::GetAnchorData(IHTMLDocument2* pDocument)
{
	wchar_t* strAnchorName;
	wchar_t* strAnchorHref;
	CComPtr<IHTMLElement> spElem;
	CComPtr<IHTMLAnchorElement> spAnchor;

	BSTR bstrName;
	HRESULT hr = S_FALSE;
	wchar_t* pName = NULL;

	hr = pDocument->get_activeElement(&spElem);

	if(SUCCEEDED(hr) && spElem)
	{
		hr = spElem->QueryInterface(IID_IHTMLAnchorElement, (void**)&spAnchor); //--> ERROR
		
		if(SUCCEEDED(hr) && spAnchor)
		{
			....

Mein Problem ist nun, dass bei der Codezeile

Code:
hr = spElem->QueryInterface(IID_IHTMLAnchorElement, (void**)&spAnchor);

E_NOINTERFACE zurückkommt. Kann mir vielleicht jemand sagen warum? Ich möchte eben mein Tag <a href.../> zurückbekommen um mir den href-Inhalt holen.

Hat irgendjemand Erfahrung mit IHTMLElement und IHTMLAnchorElement? Habe leider nicht wirklich viel im Internet darüber gefunden.

LG @ll
 
Hey Leute!

Wäre wirklich super wenn mir jemand helfen könnte!
Kennt sich niemand mit der Programmierung von Browser DLLs aus, welche auf den html-Code des aktuellen Fensters zugreifen?
 
Zurück