OpenGroupware Windows Binary :O)

"Burkhard Sell" <[email protected]> Tue, 21 Oct 2003 04:42:09 +0200
Newsgroups gmane.comp.cms.opengroupware.discuss.german
Message-ID <001f01c3977c$ed35a2c0$6601a8c0@taz>
>> Yup. Das kompliziertere ist hierbei wohl die Datenuebergabe - das
Word 
>> muss diesem Kommando ja das Dokument uebergeben (oder den Filenamen
oder 
>> xxx), und dafuer muss man meinem aktuellen Verstaendnis nach ein MAPI

>> Objekt implementieren?
>>
>> Gruss
>>    Helge
>
>
>Ich denke nicht. Es lassen sich genauso gut Webmailer einbinden (bei
meinem
>W2K hab ich z.B. HotMail per default mit dabei).
>
>google mal nach: HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\(default)
>
>http://www.squirrelmail.org/wiki/en_US/WindowsMailto
>
>Hoffe, das hilft
>
>Michael

Hotmail bringt ebenfalls eine DLL mit
(%ProgramFiles%\INTERN~1\hmmapi.dll).
Die Shell=... Einträge scheinen nur für mailto links (und wahrscheinlich

noch für anderen Kram) zu sein.

Das Senden via Explorer und vor allem aus MS Word heraus funktioniert
über
die MAPI Schnittstellen (Simple MAPI reicht).

Du musst also eine DLL schreiben, die die MAPI Schnittstelle
implementiert
und in der Registry unter DLLPath eintragen.

Ich habe das Teil auch so gut wie fertig, jedoch im Moment ein
"kleines??!"
Problem mit dem Datenaustausch. Ich habe das vor Jahren mal in Delphi
gemacht,
finde aber die Sourcen nicht mehr.

Daher wollte ich Dich (Michael) mal fragen, ob Du nen kleinen Tip für
mich
hast, auch wenn's vom Thema nicht ganz hier reinpasst:

In der zu implementierenden Schnittstelle gibt es eine Funktion namens
MAPISendMail. Der wird unter anderem ein Zeiger auf eine MAPIMessage
struct 
übergeben.

typedef struct {
     ULONG ulReserved;
     LPTSTR lpszSubject;
     LPTSTR lpszNoteText;
     LPTSTR lpszMessageType;
     LPTSTR lpszDateReceived;
     LPTSTR lpszConversationID;
     FLAGS flFlags;
     lpMapiRecipDesc lpOriginator;
     ULONG nRecipCount;
     lpMapiRecipDesc lpRecips;
     ULONG nFileCount;
     lpMapiFileDesc lpFiles;
} MapiMessage, FAR *lpMapiMessage;

(Das FAR kannst du ignorieren!!!)

Wie Du siehst, sind dort weitere Zeiger definiert.
Nun sende ich die Daten via SendMessage aus meiner DLL zum Programm
(Skyrix Browser)

LRESULT result = SendMessage(mHwnd, 
                             iMessageID, 
                             0, 
                             (LPARAM)lpMapiMessage);

Die "äussere" struct kommt noch vernünftig an, aber die "inneren" Zeiger
sind kapputt,
Zeigen also nicht mehr auf die korrekten Daten (invalid pointer).

Lasse ich sie mir in der DLL ausgeben, funktioniert das, aber nach dem
sendMessage()
nicht mehr.

Soweit ich mich erinnern kann, war die Programmierweise in Delphi
ziemlich gleich,
da das ja alles Win32API ist.

Würde mich freuen, wenn Du mir einen Tipp geben kannst, wie ich das
hinbekomme.
Oder kennst Du einen besseren Weg (ausser COM/DCOM/OLE) um die Daten an
das Programm
zZu übergeben.

Gruss
Burkhard

-- 
OpenGroupware.org German Discussion
[email protected]
http://mail.opengroupware.org/mailman/listinfo/discuss-de