Thema: MAPI umbiegen

Einzelnen Beitrag anzeigen

Xeres

Registriert seit: 11. Aug 2008
18 Beiträge
 
#7

Re: MAPI umbiegen

  Alt 20. Okt 2008, 10:44
Ich weiß leider nicht mehr woher ich diese Routinen genau hab. Hab sie aber auf jeden Fall auch angepasst gehabt. Leider gibt es ab und zu bei manchen Rechner trotzdem noch Probleme, dass sich z.B. Outlook statt unser Mailprogramm öffnet. Bei 95-99% aller Rechner funktionierts aber komischer weise:

Delphi-Quellcode:
procedure SetDefaultMailTo(AppName,Clientname : string);
var
  Reg : TRegistry;
  DW : DWord;
  aClient, strOMHelperPath : string;
begin
  aClient := Appname;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if Reg.OpenKey('\mailto\shell\open\command',True)
      then Reg.WriteExpandString('',aClient+' %1');
    Reg.CloseKey;
    if Reg.OpenKey('\mailto\DefaultIcon',True)
      then Reg.WriteExpandString('',aClient+',0');
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
  DW := 2;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\Clients\Mail',True) then Reg.WriteString('',ClientName);
    Reg.CloseKey;
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName,True) then Reg.WriteString('',ClientName);
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName,True) then Reg.WriteString('DLLPath',ExtractFilepath(aClient)+'om_mapi_dll.dll');
    Reg.CloseKey;
    strOMHelperPath := ExtractFileDir(Application.ExeName) + '\om_Helper.exe';
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\InstallInfo\',True) then Reg.WriteString('HideIconsCommand', strOMHelperPath + ' -HideShortcuts');
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\InstallInfo\',True) then Reg.WriteString('ReinstallCommand', strOMHelperPath + ' -SetAsDefaultMail');
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\InstallInfo\',True) then Reg.WriteString('ShowIconsCommand', strOMHelperPath + ' -ShowShortcuts');
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\InstallInfo\',True) then begin
    Reg.WriteInteger('IconsVisible',0);
    Reg.CloseKey;
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\protocols\mailto\',True) then Reg.WriteString('','URL:MailTo Protocol');
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\protocols\mailto\',True) then Reg.WriteBinaryData('EditFlags',dw,SizeOf(DWord));
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\protocols\mailto\',True) then Reg.WriteString('URL Protocol','');
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\protocols\mailto\DefaultIcon',True) then Reg.WriteExpandString('',aClient+',0');
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\protocols\mailto\shell\open\command',True) then Reg.WriteExpandString('',aClient+' %1');
    Reg.CloseKey;
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName+'\shell\open\command',True) then Reg.WriteExpandString('',aClient+' %1');
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;


function CheckDefaultMailTo(strAppName,strClientname : string) : Boolean;
var
  Reg : TRegistry;
  blnStandardClient : Boolean;
begin
  blnStandardClient := false;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if Reg.OpenKey('\mailto\shell\open\command',false)
      then blnStandardClient := (AnsiUpperCase(Reg.ReadString('')) = AnsiUpperCase(strAppName)+' %1');
    Reg.CloseKey;
    if blnStandardClient then begin
      Reg.RootKey := HKEY_LOCAL_MACHINE;
      if Reg.OpenKey('\Software\Clients\Mail',True)
        then blnStandardClient := (AnsiUpperCase(Reg.ReadString('')) = AnsiUpperCase(strClientname));
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
  result := blnStandardClient;
end;

Wichtig ist hierbei noch:
Die om_helper.exe die da oben auftaucht ist ein Programm, dass über Parameter aufgerufen werden kann und auch diese Funktionen beinhaltet.
Sie wird benutzt wenn der User über "Start->Einstellungen->Systemsteuerung->Software->Programmzugriff und -standards festlegen->E-Mail-Standardprogramm" die Optionen für mein Programm ändert.

Zu deinen Fragen vom 17.10.:
1.) Mach einfach mal ne Showmessage rein und lass dir die Resultate ausgeben. Dann wirst du es am besten verstehen, was hier übergeben wird und wie hiermit umzugehen ist.
2.) Das wird durch die Routine, die ich oben gepostet habe erledigt:

Delphi-Quellcode:
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName,True) then Reg.WriteString('',ClientName);
    if Reg.OpenKey('\Software\Clients\Mail\'+ClientName,True) then Reg.WriteString('DLLPath',ExtractFilepath(aClient)+'om_mapi_dll.dll');
Hier sieht man es gut

3+4.) Das hast du richtig verstanden.


Viel Erfolg.

P.S.: Wenn du den Fehler in der Routine oben finden solltest, der dafür sorgt, dass es nicht bei jedem User funktioniert, dann geb bescheid
Blog von Entwicklern für Entwickler:

http://www.entwicklerforum.org
  Mit Zitat antworten Zitat