- In der Client-Liste der Registry stehen alle echten Email-Programme, die der User installiert hat. Ob das nun Outlook Express, Pegasus, Eudora, ... oder weiß der Geier was ist. Jedes dieser Programme bietet die Möglichkeit, den Standardhandler "mailto:" auf sich umzulenken, wodurch es zum Standard-Mailprogramm des Systems wird und diesen Namen auch verdient.
Du erkennst es daran, dass dein bevorzugtes Mailprogramm startet, wenn du in "Start > Ausführen" (oder stilecht über Delphi und ShellExecute) eine Mailadresse samt Protokoll angibst:
Quelltext
- Logischerweise besitzt jedes, in der Registry eingetragene Email-Programm seinen eigenen Unterschlüssel. Im Fall von Outlook Express eben
Quelltext
1:
| HKLM\Software\Clients\Mail\Outlook Express |
Schau doch mal in die Internetoptionen deiner Systemsteuerung, und dort auf die Seite "Programme". Dort kannst du wählen, welches installierte und eingetragene Mailprogramm als Standard benutzt werden soll. Wie würde diese Auswahl wohl aussehen, wenn sich jedes installierte Programm in den selben Schlüssel eintragen und damit die Einstellungen anderer Programme überschreiben würde? Richtig: es gäbe keine Auswahl.
- Wenn du das Mailprogramm des Opera vermisst, dann solltest du das Protokoll "mailto" auf den Opera setzen. In der Version 7 öffnest du dazu den Einstellungsdialog und aktivierst unter "Standardprogramm" die entsprechende Option. Sorry, wenn das jetzt sarkastisch klingt, aber -oh Wunder!- danach gibt´s den neuen Eintrag "Opera" in der Registry.

Und nun die Moral von der G´schicht´: Du öffnest in deinem Programm zuerst den Registryschlüssel
Quelltext
1:
| HKEY_LOCAL_MACHINE\Software\Clients\Mail |
Da es sich um einen besonderen Schlüssel handelt, der z.B. unter Windows XP nicht von jedem x-beliebigen Benutzer geöffnet werden darf, darfst du nur lesend darauf zugreifen. Ich habe das zwar schon mehrfach gepostet, aber weil du´s bist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| reg := TRegistry.Create(KEY_READ); with reg do try RootKey := HKEY_LOCAL_MACHINE;
if(OpenKey('Software\Clients\Mail',false)) then try finally CloseKey; end; finally Free; end; |
Wenn der Schlüssel offen ist, liest du den Standardwert aus. Dazu benutzt du die Funktion "ReadString" und übergibst einen leeren String als Wert. Ganz einfach deshalb, weil der Standardwert keinen Namen hat - auch wenn in deinem Registryeditor vielleicht "(Standard)" steht; er hat keinen Namen!
Rückgabewert der Funktion ist ein String mit dem Namen des zu öffnenden Schlüssels. In einem Punkt gebe ich dir recht, der Schlüssel, den ich in der DP erwähnt habe, den scheint es nur für Outlook Express (bzw. generell Microsoft-Programme) zu geben. Dafür haben aber
alle eingetragenen Emailprogramme einen anderen Schlüssel gemeinsam!
Wenn also die Funktion den Begriff "Outlook Express" zurückliefert, dann öffnest du
Quelltext
1:
| Software\Clients\Mail\Outlook Express\Protocols\mailto\shell\open\command |
Wenn du stattdessen den Begriff "Opera" bekommst, dann öffnest du eben
Quelltext
1:
| Software\Clients\Mail\Opera\Protocols\mailto\shell\open\command |
In diesem Schlüssel liest du wieder den Standardwert (den ohne Namen!) aus und bekommst im Gegenzug den Pfad und Namen des Emailprogramms.
Achtung! Da es sich dabei um den Protokollaufruf handelt, werden am Programmnamen noch ein oder mehrere Parameter hängen. Bei Outlook Express sieht das in der Registry z.B. so aus:
Quelltext
1:
| "\...\OUTLOOK EXPRESS\MSIMN.EXE" /mailurl:%1 |
Dieses
/mailurl:%1 (bei anderen Programmen wird das anders aussehen!) solltest du aus dem String entfernen (delete, pos, u.ä. Funktionen). Sonst öffnet sich nämlich wieder nur das "Neue Mail schreiben"-Fenster. Und das wolltest du ja nicht.
Gruß.