Autor Beitrag
Doc_Shaggyman
Hält's aus hier
Beiträge: 4

Win 98

BeitragVerfasst: Mo 07.07.03 10:56 
Hi Leute

Ich möchte in ein Programm einen Button einbinden, mit dem ich das Standartmailprogramm (also nicht nur Outlook Express, sondern der festgelegte Standart) ausführen kann.

Es gibt dazu zwar das eine oder andere Tutorial, aber diese arbeiten über ShellExecute(blabla 'mailto:user@host.de' blabla) und bewirken nur, daß ein Fenster "neue E-Mail schreiben" auftaucht.

Da das Mailprogramm aber zum Abrufen der Mails verwendet werden soll bringt mir das NIX, da das Hauptprogramm ja dabei nicht gestartet wird.

Vielleicht kann mir ja jemand von euch helfen....

Schonmal Danke

Baddy
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.07.03 11:21 
Ja. In der Delphi-PRAXiS gibt es ein Freeware-Programm, das dein Postfach auf Emails prüfen kann. Und dort werden (in der Kritik zu diesem Programm) auch die Registryschlüssel genannt, in denen du das Standard-Mailprogramm des Systems findest. :)

Gruß.
Doc_Shaggyman Threadstarter
Hält's aus hier
Beiträge: 4

Win 98

BeitragVerfasst: Di 08.07.03 08:38 
So wie ich das sehe, kann man dann aber auch nur den installationspfad von Outlook herausfinden, da ja "HKEY_LOCAL_MACHINE\SOFTWARE\CLIENTS\MAIL" zwar den Namen des Mailprogramms enthält, man den Installationspfad erst im Unterverzeichnis des jeweiligen Programms findet (z.B."..\Outlook Express\shell\open")

Aber dieses sieht ja ganz anders aus, wenn der USER z.B. OperaMail verwendet... ziemlicher SCH.....

Ausserdem hab' ich nicht ganz verstanden WIE ich diese Registry-Abfrage implementiere

Vielleicht kann mir das jemand genauer erklären. :?:

Baddy
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.07.03 12:46 
  1. 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:
    ausblenden Quelltext
    1:
    mailto:bla@bla.bla					

  2. Logischerweise besitzt jedes, in der Registry eingetragene Email-Programm seinen eigenen Unterschlüssel. Im Fall von Outlook Express eben
    ausblenden 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.
  3. 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
ausblenden 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:
ausblenden 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
    // hier drin geht´s weiter
  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
ausblenden Quelltext
1:
Software\Clients\Mail\Outlook Express\Protocols\mailto\shell\open\command					

Wenn du stattdessen den Begriff "Opera" bekommst, dann öffnest du eben
ausblenden 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:
ausblenden 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. :wink:


Gruß.
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: Sa 18.06.05 22:11 
Ich erlaube mir mal, für die, die auf diese Frage eine ausführlichere Antwort suchen, hier einen Link zu posten: www.delphi-forum.de/....php?p=264405#264405

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG