System Tools 2000 Extensibility Model
|
|
Schreiben von System Tools - Schritt für Schritt
Im folgenden geben wir Ihnen eine Kurzanleitung, wie Sie mit Hilfe von Visual
Basic 6 eine System Tools-Komponente erstellen können.
- Starten Sie Visual Basic und legen Sie ein neues Projekt vom Typ ActiveX-Steuerelement
an. Eine UserControl-Klasse wird standardmäßig erstellt.
- Fügen Sie ein neues Klassenmodul hinzu, und geben Sie ihm einen Namen,
der das Tool kennzeichnet, das Sie entwickeln möchten, z.B. DiskCleaner.
- Stellen Sie die Instancing-Eigenschaft der Klasse auf 5 -
MultiUse um, damit die System Tools auch ein Objekt der Tool-Klasse
erstellen können.
- Geben Sie auch Ihrem Projekt einen Namen. Das Projekt stellt eine Art
"Bibliothek" für mehrere Tools dar. Nennen Sie es z.B. MyTools1.
Achten Sie aber darauf, einen global eindeutigen Namen zu wählen.
- Auch das UserControl sollte umbenannt werden. Geben Sie ihm den gleichen
Namen wie die Klasse, mit Präfix cfg, also z.B. cfgDiskCleaner.
(Alle diese Namen können Sie natürlich auch komplett anders wählen.)
- Wechseln Sie zur Klasse und fügen Sie die folgende Zeile ein:
Public STParentObj As Object
Diese Variable steht dank Public den System Tools zur Verfügung und
wird von diesem mit einem Objekt belegt. Dieses Objekt kann dann wiederum
von Ihrem Tool benutzt werden. Es stellt einige Funktionen zur Verfügung,
um Standard-Operationen auszuführen, Werte abzufragen oder anderweitig mit
den System Tools zu kommunizieren.
- Nun sollten Sie noch einige öffentliche Prozeduren einfügen: Launch,
Quit, GetCaps, ProduceMenu, ExecMenu und Title.
(Es gibt auch noch weitere Prozeduren, aber dies sind die wichtigsten.)
Geben Sie am besten einfach die folgenden Deklarationen ein:
Public Sub Launch()
End Sub
Public Sub Quit()
End Sub
Public Function GetCaps(ByVal CapID As Long) As Long
End Function
Public Sub ProduceMenu(MenuObj As Object, ByVal ParentIndex As Long)
End Sub
Public Sub ExecMenu(ByVal Key As String)
End Sub
Public Property Get Title() As String
End Property
- In die Prozeduren Launch und Quit können Sie nun Code
schreiben, der bei jedem Starten bzw. Beenden der System Tools ausgeführt
werden soll. Wenn Ihr Tool diese Prozeduren nicht benötigt, lassen Sie sie
einfach leer.
- GetCaps hat spielt eine wichtige Rolle: Hier kann der System
Tools-Launcher zentrale Informationen über die Unterstützung von Seiten
Ihres Tools abfragen. Wie Sie sehen, hat diese Prozedur einen Parameter.
Dieser enthält beim Aufruf der Prozedur eine Nummer, der die Information
kennzeichnet, welche zurückgeliefert werden soll. Ihr Tool gibt sie dann
einfach als Funktionsrückgabewert weiter, wobei 0 für "nein" und
1 für "ja" steht. Die zurzeit wichtigsten Werte für den
Parameter CapID sind 1 (Wird Konfiguration unterstützt?) und 2 (Sind
Kontextmenü-Befehle verfügbar?). Eine Beispielprozedur, die beide Fragen
bejahrt, könnte so aussehen:
Public Function GetCaps(ByVal CapID As Long) As Long
If CapID = 1 Then GetCaps = 1
If CapID = 2 Then GetCaps = 1
End Function
- ProduceMenu ist für die Erzeugung des Kontextmenüs zuständig.
Sie wird bei jedem Rechtsklick des Benutzers auf das System Tools-Icon
aufgerufen, um die verfügbaren Befehle abzufragen. Der Parameter MenuObj
ist ein etwas komplexers Menü-Objekt mit verschiedenen Funktionen, z.B.
auch zum "checken" von Menüeinträgen und zum Schachteln der
Ebenen, aber dies sind fortgeschrittenen Themen. Für den Anfang sollten Sie
mit folgender Zeile auskommen:
MenuObj.AddItem "Menütitel", , , ParentIndex, , , ,
"Schlüssel"
Sie können beliebig viele dieser Zeilen in der Prozedur unterbringen. Für
jede Zeile wird ein Menüeintrag erstellt. Achten Sie aber darauf, dass
jeder Eintrag über einen eigenen, eindeutigen Schlüssel verfügt!
- Dann können Sie auf die Auswahl eines Menüeintrags in der Prozedur ExecMenu
reagieren. Der Parameter Key gibt dabei den Schlüssel des Menüeintrags
an.
- Schließlich muss noch die Prozedur zu Title geschrieben werden,
aber die ist absolut trivial; geben Sie einfach den Namen Ihres Tools zurück,
wie er angezeigt werden soll.
Wenn Sie bei GetCaps angegeben haben, dass keine Konfiguration unterstützt
wird, dann sind Sie hier schon fertig. Andernfalls müssen Sie das
Konfigurations-Applet noch schreiben:
- Fügen Sie noch den folgenden Code zur Klasse hinzu:
Public Function GetCCSInfo(ByVal PanelID As Long, ByVal InfoID As
Integer) As String
If PanelID = 0 Then GetCCSInfo = "1"
If PanelID = 1 And InfoID = 1 Then GetCCSInfo =
"MyTools1.cfgDiskCleaner"
If PanelID = 1 And InfoID = 2 Then GetCCSInfo = "Titel"
End Function
Statt MyTools1.cfgDiskCleaner müssen Sie den ggf. Namen des
UserControls angeben in der Form Projektname.Steuerelementname. (Dies
ist die sog. "Prog-ID" des UserControls.) Der angegebene Ausdruck
wäre für das obige Beispiel korrekt. (Hinweis: Mit dieser Prozedur haben
Sie auch die Möglichkeit, mehr als eine "Konfigurationsseite"
anzugeben, doch das ist ein fortgeschrittenes Thema.)
- Wechseln Sie dann zum UserControl und fügen Sie zwei Prozeduren ein: GetCaps,
genau wie bei der Klasse (siehe oben), allerdings mit nur einem Wert (1),
der angibt, ob auf der Konfigurationsseite Änderungen gemacht werden können
(es wird dann eine Schaltfläche "Übernehmen" angezeigt); und
dann noch eine Public Sub ReadSettings ohne Parameter. In diesem
Beispiel genügt das, und GetCaps sollte immer 0 zurückgeben.
- Jetzt können Sie das UserControl beliebig bearbeiten und Steuerelemente
hinzufügen.
- Verwenden Sie die Prozedur ReadSettings dazu, das Steuerelement zu
initialisieren, d.h. mit Werten zu füllen (falls dies notwendig ist).
- (Zusatz: Wenn Sie auch das Übernehmen von Änderungen unterstützen
wollen, fügen Sie einfach noch eine globale Sub mit dem Namen Apply
hinzu und schreiben Sie dort den Code zum Speichern der neuen Werte hin.)
Das war's auch schon! Das Projekt kann jetzt kompiliert werden. Statt der
Dateiendung .ocx können Sie auch .dll eingeben, ohne die
Funktionalität zu beeinträchtigen. Die kompilierte Datei sollte (muss aber
nicht) im Windows-Systemverzeichnis stehen.
Um das Projekt bei den System Tools zu registrieren, müssen jedes Tools in
der Registrierung eintragen, wobei die ProgID (Projektname.Klassenname)
verwendet wird:
Legen Sie unter dem Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\MF-SOFT\System
Tools\Tools einen neuen Text-Wert mit dem Namen des Tools an, und legen Sie
ihn auf die ProgID fest.
|