Die CPL-Datei registrieren


Ein sehr wichtiges Thema ist das Registrieren der CPL-Datei. Der Dateityp sollte zwar im System bekannt sein, so dass ein Doppelklick im Explorer auch den Dialog öffnet, aber wenn Sie das mit dem Beispiel probieren, dann sehen Sie immer nur den ersten Dialog (= das erste Einzelmodul). Darum sollten Sie bei der Weitergabe Ihrer CPL-Datei ein Setup oder ein Hilfsprogramm verwenden, mit dem sie im System registriert werden kann. Dabei gibt es systembedingte Unterschiede zu beachten.


Windows 9x und NT

Eine Möglichkeit wäre, die CPL-Datei direkt in das Systemverzeichnis von Windows zu kopieren. Dadurch würde sie automatisch gefunden und geladen werden. Allerdings wird dieser Weg generell von Microsoft missbilligt. Sie sollten es vermeiden, eigene Dateien in wichtige System- o.ä. Ordner zu kopieren. Das gilt nicht nur für CPL-Anwendungen sondern generell für diverse Dateien.
Der bessere Weg ist, die CPL-Datei in der "control.ini" zu registrieren. Erstellen Sie in dieser Datei ggf. die Sektion MMCPL und tragen Sie hier Pfad und Namen Ihrer CPL-Datei ein. Auf die Weise kann sie im Ordner Ihrer Anwendung bleiben und steht der Systemsteuerung dennoch zur Verfügung

[MMCPL]
TUTTESTCPL=C:\Programme\Ihre Anwendung\CONTRO~1.CPL

Wählen Sie nach Möglichkeit einen kurzen Dateinamen, oder benutzen Sie das im Beispiel gezeigte Muster, denn zumindest Windows 98 hat ein Problem mit CPL-Dateien, deren Namen das Maß 8.3 übersteigen. Interessanterweise gilt das aber nicht für den Pfad.

Hinweis

Weil diese Art der Registrierung auch für Windows NT 4 gilt, sollten Sie sich Gedanken über die Benutzerrechte machen. Ob Sie die CPL-Datei nun in das Systemverzeichnis kopieren, oder ob Sie die genannte INI-Datei bearbeiten, beides setzt meiner Ansicht nach min. Admin-Rechte voraus. Ihr Setup bzw. Ihr Registrierungsprogramm sollte dies entsprechend berücksichtigen.


Windows 2000 und XP

Ab Windows 2000 tragen Sie den Namen der CPL-Datei in die Registry ein. Dabei spielen die Benutzerrechte natürlich eine wichtige Rolle. Wenn Sie möchten, dass die CPL-Datei allen Benutzern zur Verfügung steht, dann müssen Sie im Schlüssel HKEY_LOCAL_MACHINE tätig werden, was allerdings Administratorrechte erfordert. Mit normalen Benutzerrechten können Sie die CPL-Datei aber auch unter HKEY_CURRENT_USER eintragen, womit sie dann aber auch nur dem gerade angemeldeten Benutzer zur Verfügung steht. Der Pfad ist in beiden Fällen identisch:

Software\Microsoft\Windows\CurrentVersion\Control Panel\Cpls

Wenn Sie diesen Schlüssel in Ihrem HKCU-Zweig nicht finden, können Sie ihn mit dem VBSkript "CreateUserCPLKey.vbs" erzeugen lassen. Das Skript finden Sie im Ordner des Beispielprogramms. Erstellen Sie in diesem Schlüssel nun einen String vom Typ REG_EXPAND_SZ, dem Sie als Wert den Pfad und Namen der CPL-Datei übergeben, bspw.

RegSetValueEx(reg,'TUTTESTCPL',0,REG_EXPAND_SZ,
  pointer(ExtractFilePath(paramstr(0)) + 'ControlPanel.cpl'),
  length(ExtractFilePath(paramstr(0)) + 'ControlPanel.cpl'));



Kategorien

Wenn Sie Windows XP besitzen, dann ist Ihnen sicher schon die neue Kategorienansicht der Systemsteuerung aufgefallen. Dabei handelt es sich um eine Art logische Gruppierung, bei der die einzelnen Module thematisch zusammengefasst werden. Sie können Ihre eigene CPL-Datei ebenfalls in diese Kategorien aufnehmen. Allerdings sind dazu min. Administratorrechte erforderlich, weil der notwendige Eintrag unter HKEY_LOCAL_MACHINE vorgenommen werden muss.

Zuerst muss man wissen, welche Kategorien es gibt. Informationen darüber finden Sie im PSDK, im Kapitel "User Interface Services/Windows Shell/Shell Programmer's Guide/What's New in the Shell/Control Panel Categories".

KategorieBedeutung
Appearance and Themesentspricht Darstellung und Designs, also den Modulen zur optischen Anpassung von Windows
Printers and HardwareHardware-Assistent, Drucker, Maus, Scanner, usw.
Network and InternetNetzwerkeinstellungen, Internetoptionen
Sound, Speech and Audio Devicesdas, was man unter dem Begriff Multimedia zusammenfassen würde
Performance and MaintenanceSystemverwaltung ("Leistung und Wartung")
Date, Time, Language, ...Datum, Zeit, regionale Einstellungen, usw.
AccessibilityEingabehilfen

Außerdem gibt es noch drei besondere Kategorien

KategorieBedeutung
Add or Remove Programsdas Software-Modul mit den installierten Programmen
User AccountsBenutzerkonten
Security CenterDas Sicherheitscenter (erst ab Windows XP Servicepack 2)

Diese drei öffnen normalerweise separate Fenster, bspw. die Liste mit den installierten Programmen. Wenn Sie allerdings eigene Module integrieren, dann verhalten sie sich wie die anderen Kategorien und zeigen eine Auswahl an. Das sich normalerweise selbstständig öffnende Fenster (die Liste mit der Software, um beim Beispiel zu bleiben) sehen Sie dann nur, wenn Sie das entsprechende Symbol auswählen.

Wie gesagt, Admin-Rechte sind erforderlich, und der Pfad lautet:

SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Extended Properties

Hier finden Sie einen Unterschlüssel namens "{305CA226-D286-468e-B848-2B2E8E697B74} 2" (die 2 am Ende ist kein Fehler!), der die notwendigen Einträge in Form von dwords enthält. Für mein Beispiel verwende ich die Kategorie "Leistung und Wartung", die den Wert 0x05 hat. Der folgende Code stammt aus dem Programm "RegisterCPL.dpr", das der Beispielanwendung beiliegt

RegSetValueEx(reg,
  pchar(ExtractFilePath(paramstr(0)) + 'ControlPanel.cpl'),
  0,
  REG_DWORD,
  @CategoryMaintenance,
  sizeof(dword));

Sie erstellen also lediglich einen dword-Schlüssel mit dem Namen Ihrer CPL-Datei und ordnen diesem den Wert der gewünschten Kategorie zu. Und das Ergebnis kann sich sehen lassen:



Allerdings sehen Sie auch, dass Sie u.U. mehrere CPL-Dateien erstellen müssen, wenn Sie Module für verschiedene Kategorien entworfen haben. Da Sie lediglich den Dateinamen im o.g. Schlüssel angeben, werden alle in der CPL-Datei enthaltenen Einzelmodule der selben Kategorie zugeordnet.

Ab Windows XP Servicepack 2 können Sie ein Modul auch mit Hilfe eines string-Eintrags für eine Kategorie registrieren. Das Prinzip ist das gleiche, nur dass Sie ein Modul so auch für mehrere Kategorien registrieren können. Die IDs werden dabei durch Komma voneinander getrennt, wie das folgende Beispiel kurz demonstriert:

sp2Categories := Format('%d,%d', [CategoryMaintenance, CategorySound]);
RegSetValueEx(reg, pchar(ExtractFilePath(paramstr(0)) + 'ControlPanel.cpl'),
  0, REG_SZ, pointer(sp2Categories), length(sp2Categories));



Hinweis zu Windows XP

Wenn Sie Ihren Modulen das Aussehen von XP (sprich: die Themes) spendieren wollen, dann muss Ihre Manifestressource zwingend die ID 123 haben. Bei allen anderen Werten wird die Ressource ignoriert und der jeweilige Dialog im alten, klassischen Stil angezeigt.

123 RT_MANIFEST "../../Common~1/manifest.xml"


Windows Vista

Das Programm "RegisterCPL.exe" läuft nicht unter Windows Vista. Rein technisch würde es natürlich funktionieren, da der Registrierungsprozess der CPL-Datei der gleiche ist. Vista bietet darüber hinaus aber noch weitere Optionen an, so dass ich mich entschlossen habe, ein eigenes Programm dafür zu schreiben. Ich habe es in CSharp entwickelt, darum ist es nicht Teil dieser Tutorialsammlung. Die Informationen möchte ich Ihnen aber natürlich nicht vorenthalten.

Wie gesagt, die Registrierung der CPL-Datei ist identisch mit dem Vorgang von Windows 2000 und XP. Auch der Registryschlüssel ist der gleiche. Die Speicherung der Kategorien ist ebenfalls identisch, nur der Registryschlüssel ist ein anderer:

Software\Microsoft\Windows\CurrentVersion\Control Panel\Extended Properties\System.ControlPanel.Category

Die Vista RC2 unterstützte zwar auch den Schlüssel, der bei XP verwendet wurde, aber ich empfehle die Nutzung des Vista-eigenen Registryschlüssels. Und es gibt eine neue Kategorie mit dem Code 0x0b, die aber nur auf mobilen Computern zu sehen ist

KategorieBedeutung
Mobile PCfür mobile Rechner

Zusätzlich können Sie Ihr Modul unter Vista mit einer eindeutigen GUID und einem so genannten Anwendungsnamen speichern. Dieser Name sollte sich am Standard "Firmenname.ControlPanelName" orientieren und dient zum Starten des Moduls

control.exe /name Firmenname.ControlPanelName

Es gibt noch weitere Dinge, aber in dem Fall lege ich Ihnen das aktuelle Windows SDK ans Herz.