Hallo liebe VB-P'ler,
Vorwort
Heute will ich euch zeigen wie ihr für den ganz normalen Internet Explorer Addons/Plugins mit .NET erstellen könnt.
Dies soll nur ein Tutorial sein und nicht zu einer Diskussion über den IE ausarten.
Ich habe diese Vorgehensweise auf Windows7 32 Bit mit dem IE9 in VB Express 2010 getestet.
Funktionsweise
Plugins für den IE sind dll-Dateien.
Diese dll-Dateien müssen einfach nur registiert und im IE aktiviert werden, und Bäm ist man fertig.
Ziel dieser Demo: Auf der Seite google.de ein kleines Textfeld einzufügen (Natürlich nur Clientseitig :D)
Schritt 1: Das Projekt erstellen
Spoiler anzeigen
Schritt 2: Das Grundgerüst
Spoiler anzeigen
Schritt 3: Implementierung des BHO-Interfaces
Spoiler anzeigen
Schritt 4: Die eigentliche Verarbeitung
Spoiler anzeigen
Schritt 5: Die Installation (Und Deinstallation)
Spoiler anzeigen
Schritt 6: Die Aktivierung, Testen und Debugging
Spoiler anzeigen
Fazit: Ich hoffe dieses Tutorial hilft dem einem oder anderem, und auch wenn der IE vielleicht nicht der beste Browser ist, so bietet diese Methode doch eine willkommene Möglichkeit, "mal etwas anderes zu tun".
Ich freue mich natürlich über konstruktive Kritik und Verbesserungsvorschläge.
Quelle: Codeproject
Vorwort
Heute will ich euch zeigen wie ihr für den ganz normalen Internet Explorer Addons/Plugins mit .NET erstellen könnt.
Dies soll nur ein Tutorial sein und nicht zu einer Diskussion über den IE ausarten.
Ich habe diese Vorgehensweise auf Windows7 32 Bit mit dem IE9 in VB Express 2010 getestet.
Funktionsweise
Plugins für den IE sind dll-Dateien.
Diese dll-Dateien müssen einfach nur registiert und im IE aktiviert werden, und Bäm ist man fertig.
Ziel dieser Demo: Auf der Seite google.de ein kleines Textfeld einzufügen (Natürlich nur Clientseitig :D)
Schritt 1: Das Projekt erstellen
Also Projekttyp wählt man eine Klassenbibliothek an und gibt ihr einen sinnvollen Namen, ich nehme mal "HalloIE".
Als nächstes benennt man im Dateifenster rechts die Datei "Class1.vb" in "BHO.vb" um.
Dann setzt man das Häkchen bei My Project->Anwendung->Assembyinformationen->"Assembly-COM sichtbar machen".
Als nächtes die erforderlichen Verweise hinzufügen:
Microsoft.mshtml und
C:\\Windows\system32\shdocvw.dll
Als nächstes benennt man im Dateifenster rechts die Datei "Class1.vb" in "BHO.vb" um.
Dann setzt man das Häkchen bei My Project->Anwendung->Assembyinformationen->"Assembly-COM sichtbar machen".
Als nächtes die erforderlichen Verweise hinzufügen:
Microsoft.mshtml und
C:\\Windows\system32\shdocvw.dll
Schritt 2: Das Grundgerüst
Zuersteinmal die Imports:
Als nächstes das Interface (GUID nicht ändern!!!):
Dann die Klasse (Auch hier: GUID nicht ändern!):
Damit wäre unser Grundgerüst schon einmal fertig.
Als nächstes das Interface (GUID nicht ändern!!!):
VB.NET-Quellcode
- <ComVisible(True), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352")> _
- Public Interface IObjectWithSite
- <PreserveSig()> _
- Function SetSite(<MarshalAs(UnmanagedType.IUnknown)> site As Object) As Integer
- <PreserveSig()> _
- Function GetSite(ByRef guid As Guid, ByRef ppvSite As IntPtr) As Integer
- End Interface
Dann die Klasse (Auch hier: GUID nicht ändern!):
Damit wäre unser Grundgerüst schon einmal fertig.
Schritt 3: Implementierung des BHO-Interfaces
Als BHO (Browser Helping Object) müssen wir bestimmte Funktionen implementieren:
VB.NET-Quellcode
- Public Function SetSite(site As Object) As Integer Implements IObjectWithSite.SetSite
- If site IsNot Nothing Then
- webBrowser1 = DirectCast(site, WebBrowser)
- AddHandler webBrowser1.DocumentComplete, AddressOf Me.OnDocumentComplete
- 'Hier könnten noch weitere Eventhandler folgen, für unsere Zwecke reicht dieser eine.
- Else
- RemoveHandler webBrowser1.DocumentComplete, AddressOf Me.OnDocumentComplete
- 'Die Eventhandler müssen auch wider entfernt werden.
- webBrowser1 = Nothing
- End If
- Return 0
- End Function
- Public Function GetSite(ByRef guid As Guid, ByRef ppvSite As IntPtr) As Integer Implements IObjectWithSite.GetSite
- Dim punk As IntPtr = Marshal.GetIUnknownForObject(webBrowser1)
- Dim hr As Integer = Marshal.QueryInterface(punk, guid, ppvSite)
- Marshal.Release(punk)
- Return hr
- End Function
Schritt 4: Die eigentliche Verarbeitung
Kümmern wir uns nun um den Kern der Sache.
In dieser Prozedur stehen uns nun einige Objekte zu Verfügung: Die aktuelle URL, und ein HTMLDocument-Objekt das wir JavaScript-ähnlich manipulieren können.
Prüfen wir zuerst, ob wir auf der Google-Seite sind:
Als nächstes fügen wir einen Roten Kasten ein:
Damit wäre die Hautarbeit schon einmal geschafft.
VB.NET-Quellcode
In dieser Prozedur stehen uns nun einige Objekte zu Verfügung: Die aktuelle URL, und ein HTMLDocument-Objekt das wir JavaScript-ähnlich manipulieren können.
Prüfen wir zuerst, ob wir auf der Google-Seite sind:
Als nächstes fügen wir einen Roten Kasten ein:
VB.NET-Quellcode
- 'Zuerst in den Header ein Javascript zum Schließen der Kiste
- Dim scriptObject As IHTMLScriptElement = DirectCast(document.createElement("script"), IHTMLScriptElement)
- scriptObject.type = "text/javascript"
- scriptObject.text = vbCrLf & vbCrLf & "function ausblenden(){document.getElementById('rotekiste1').style.visibility = 'hidden';}" & vbCrLf & vbCrLf
- DirectCast(head, HTMLHeadElement).appendChild(DirectCast(scriptObject, IHTMLDOMNode))
- 'Dann die eigentliche Rote Kiste
- Dim div As String = "<div id='rotekiste1' style='position:absolute; top:50px; left:50px; z-index:9999; background-color:red; border:1px solid black; height:50px; width:200px;' >" & _
- "Ich bin ein von einem Plugin eingefügter div<br /><br />" & _
- "<a href=""javascript:ausblenden();"">Okay</a></div>"
- document.body.insertAdjacentHTML("afterBegin", div)
Damit wäre die Hautarbeit schon einmal geschafft.
Schritt 5: Die Installation (Und Deinstallation)
Die Grundliegenden Installationsvorgänge übernimmt der folgende Code:
Danach wird die dll mit Erstellen->HalloIE Erstellen Kompiliert.
Nun wenden wir uns den Installations/Deinstallation - Batch - Skripten zu:
Installation:
Deinstallation:
BEIDE SKIPTE BENÖTIGEN ADMISISTRATORRECHTE.
Die Framework-Version(hier v4.0.30319) muss eventuell angepasst werden.
Spätestens vor der Ausführung dieser Skripte muss der IE beendet werden.
VB.NET-Quellcode
- Public Const BHO_REGISTRY_KEY_NAME As String = "Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects"
- <ComVisible(True), ComRegisterFunction()> _
- Public Shared Sub RegisterBHO(type As Type)
- Dim registryKey As RegistryKey = Registry.LocalMachine.OpenSubKey(BHO_REGISTRY_KEY_NAME, True)
- If registryKey Is Nothing Then
- registryKey = Registry.LocalMachine.CreateSubKey(BHO_REGISTRY_KEY_NAME)
- End If
- Dim guid As String = type.GUID.ToString("B")
- Dim ourKey As RegistryKey = registryKey.OpenSubKey(guid)
- If ourKey Is Nothing Then
- ourKey = registryKey.CreateSubKey(guid)
- End If
- ourKey.SetValue("NoExplorer", 1, RegistryValueKind.DWord)
- registryKey.Close()
- ourKey.Close()
- End Sub
- <ComVisible(True), ComUnregisterFunction()> _
- Public Shared Sub UnregisterBHO(type As Type)
- Dim registryKey As RegistryKey = Registry.LocalMachine.OpenSubKey(BHO_REGISTRY_KEY_NAME, True)
- Dim guid As String = type.GUID.ToString("B")
- If registryKey IsNot Nothing Then
- registryKey.DeleteSubKey(guid, False)
- End If
- End Sub
Danach wird die dll mit Erstellen->HalloIE Erstellen Kompiliert.
Nun wenden wir uns den Installations/Deinstallation - Batch - Skripten zu:
Installation:
Deinstallation:
BEIDE SKIPTE BENÖTIGEN ADMISISTRATORRECHTE.
Die Framework-Version(hier v4.0.30319) muss eventuell angepasst werden.
Spätestens vor der Ausführung dieser Skripte muss der IE beendet werden.
Schritt 6: Die Aktivierung, Testen und Debugging
Im IE steht unter "add-ons verwalten" nun ein neues Plugin zu Verfügung: Unser eigenes :).
Zur Aktivierung reicht ein Klick auf "Aktivieren". (wow)
Eventuell muss man die Seite neu laden und/oder ÖFFNEN (ja genau so).
Will man nun sein Plugin updaten, so beendet man den IE, kompiliert die dll erneut und startet den IE wieder.
Eine Neuinstallation des Plugins ist nicht erforderlich.
Debugging wie man es von Visual Studio gewohnt ist, ist leider nicht möglich.
Zur Aktivierung reicht ein Klick auf "Aktivieren". (wow)
Eventuell muss man die Seite neu laden und/oder ÖFFNEN (ja genau so).
Will man nun sein Plugin updaten, so beendet man den IE, kompiliert die dll erneut und startet den IE wieder.
Eine Neuinstallation des Plugins ist nicht erforderlich.
Debugging wie man es von Visual Studio gewohnt ist, ist leider nicht möglich.
Fazit: Ich hoffe dieses Tutorial hilft dem einem oder anderem, und auch wenn der IE vielleicht nicht der beste Browser ist, so bietet diese Methode doch eine willkommene Möglichkeit, "mal etwas anderes zu tun".
Ich freue mich natürlich über konstruktive Kritik und Verbesserungsvorschläge.
Quelle: Codeproject
SᴛᴀʀGᴀᴛᴇ01