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.