Frage

Microsoft Word „senden als Anhang“ Funktionalität hat, die mit dem Dokument angebracht, um eine neue Nachricht in Outlook erstellt.

Ich mag Outlook ersetzen mit einem benutzerdefinierten Mail-Agenten, aber ich weiß nicht, wie dies zu erreichen. Nun mein Mail-Agent ist einfach ein Programm, das ausgeführt wird, und nimmt einen Dateinamen als Parameter.

Soweit ich weiß „als Anlage senden“ wird mit einigen DLL / API namens MAPI. Ich müsste meine App ändern, so dass es einfach nicht Dateinamen Argumente akzeptieren, kann aber erhalten MAPI (?) Ruft MS Word verwendet, wenn „als Anlage senden“.

Außerdem muss ich die Standard-Mail-Agenten ändern, indem Sie meinen eigenen MAPI32.dll Stummel zu schaffen, die einfach zu meiner App umleitet.

Ich schätze würde, wenn jemand mehr Informationen über hatte, wie dies erreicht werden könnte!

War es hilfreich?

Lösung

Wenn Sie Ihre eigene MAPI-Implementierung zu schreiben ist es entscheidend, eine DLL sowohl mit den richtigen Exporte und Aufrufkonventionen, um für das System Stummel mapi dll (c zu erstellen: \ windows \ system32 \ mapi32.dll, sollte die gleiche wie MAPIStub sein .dll) passieren Anrufe an Ihre dll durch. MAPI-Funktionen werden mit der __stdcall Aufrufkonvention genannt. Ebenfalls kritisch ist, die richtigen Registrierungsschlüssel, um Einstellung für Sie mapi dll vom System Stummel gewählt werden, sieht es aus wie Sie bereits das richtige, um einen bestimmten mapi angeben gefunden dll verwendet werden, wenn Ihre applicaion mapi Anrufe macht.

habe ich genau dieses Ding vor kurzem schrieb: mein eigenes Skelett mapi dll, und hatte meine erweiterten Funktionen mapi viel Mühe, das System Stummel immer anrufen. Der Schlüssel war, dass mapi32.dll GetProcAddress auf der „foo @ x“ Einstiegspunkt nennt, nicht die „foo“ Einstiegspunkt in die MAPI-Schnittstelle, um zu testen, ob Ihr dll „compliant“ mit erweiterten mapi ist (ich glaube, für eine einfache mapi nennt es nicht die „foo @ x“ nicht verwendet, aber die Ebene „foo“ Einstiegspunkt Name). Ich hatte auch meine Skelett Bibliothek Interface-Datei in meinem Projekt „Als C“ und nicht „wie C ++“, um kompilieren alle Symbolnamen richtig zu machen.

Zum Beispiel sollte MAPIInitialize wie dies im Quellcode deklariert werden:

HRESULT __stdcall MAPIInitialize( LPVOID lpMapiInit )
...

und Sie werden eine DEF-Datei mit Einträgen wie folgt angeben müssen:

EXPORTS
    MAPIInitialize@4=_MAPIInitialize@4
    MAPIInitialize=_MAPIInitialize@4

Für die einfachen MAPI-Aufrufe (im Gegensatz zu erweiterten mapi Anrufen entgegengesetzt), können Sie den „double-Export“ nicht benötigen. Um zu sehen, was die Exporte sehen aus wie für eine funktionierende mapi Implementierung, Sie können dies tun (wenn Sie Outlook auf Ihrem System installiert haben):

c:\> dumpbin /exports c:\Program Files\Common Files\SYSTEM\MSMAPI\1033\msmapi32.dll

(oder ersetzen Sie den Pfad, den Sie in der Registrierung in HKLM\Software\Clients\Mail\Microsoft Outlook\DLLPathEx finden)

Andere Tipps

OK, meine eigene Frage zu beantworten. Ich brauche eine DLL mit „MAPISendDocuments“ und / oder „MAPISendMail“ Funktionen definiert zu bauen.

Diese DLL kann einen beliebigen Namen haben, und wird in der Registrierung unter HKLM / Software / Kunden / Mail / MyMailApp / DLLPath.

verwiesen

Gefunden Beispiele mit Delphi ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top