AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie Drag&Drop einzelner Anhänge aus Outlook?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Drag&Drop einzelner Anhänge aus Outlook?

Ein Thema von stalkingwolf · begonnen am 3. Dez 2024 · letzter Beitrag vom 4. Dez 2024
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#1

Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 08:56
Moin,

ich hänge schon seit Ewigkeiten an dem Thema einzelne Dateianhänge aus Outlook per Drag&Drop.
Ganze Emails funktionieren.

Ich habe mich gestern mit ChatGPT dran gesetzt. Mit dem Code bekomme ich auch Filedescription aber nicht den FileContent.
Hat sich jemand damit schon einmal beschäftigt?

Succeeded(DataObj.GetData(FormatEtc, Medium)) gibt immer false zurück

Code:
procedure Tform3.extractOutlookAttachment(DataObj: IDataObject;var FileList: TStringList);
var
  FormatEtc: TFormatEtc;
  Medium: TStgMedium;
  FileDescriptor: PFileGroupDescriptorW;
  I: Integer;
  Stream: IStream;
  FileName: string;
  FileHandle: THandle;
  FileBuffer: array of Byte;
  BytesRead: LongInt;
const
    CFSTR_FILEDESCRIPTOR = 'FileGroupDescriptorW';
    CFSTR_FILECONTENTS = 'FileContents';
    function GetFormatEtc(Format: string): TFormatEtc;
    begin
        Result.cfFormat := RegisterClipboardFormat(PChar(Format));
        Result.ptd := nil;
        Result.dwAspect := DVASPECT_CONTENT;
        Result.lindex := -1;
        Result.tymed := TYMED_HGLOBAL;
    end;
begin
  // 1. Datei-Beschreibung abrufen
  FormatEtc := GetFormatEtc(CFSTR_FILEDESCRIPTOR);
  if Succeeded(DataObj.GetData(FormatEtc, Medium)) then
  try
    FileDescriptor := GlobalLock(Medium.hGlobal);
    try
      for I := 0 to FileDescriptor.cItems - 1 do
      begin
        FileName := GetEnvironmentVariable('TEMP') + '\'+WideCharToString(FileDescriptor.fgd[I].cFileName);
        FileList.add(FileName);
        showmessage(FileName);
        // 2. Datei-Inhalt abrufen
        FormatEtc := GetFormatEtc(CFSTR_FILECONTENTS);
        FormatEtc.lindex := I; // Dateiindex setzen
        if Succeeded(DataObj.GetData(FormatEtc, Medium)) then // Wird nie getriggert
        try
          Stream := IStream(Medium.stm);
          FileHandle := FileCreate(FileName);
          try
            SetLength(FileBuffer, 4096);
            repeat
              Stream.Read(@FileBuffer[0], Length(FileBuffer), @BytesRead);
              FileWrite(FileHandle, FileBuffer[0], BytesRead);
            until BytesRead = 0;
          finally
            FileClose(FileHandle);
          end;
        finally
          ReleaseStgMedium(Medium);
        end;
      end;
    finally
      GlobalUnlock(Medium.hGlobal);
    end;
  finally
    ReleaseStgMedium(Medium);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 09:51
Ich glaube, dass du in FormatEtc zu wenige Werte setzt. Ich glaube nach Lektüre der API du müsstest setzen:
cfFormat = CF_HDROP
dwAspect = DVASPECT_CONTENT
tymed = TYMED_HGLOBAL (oder da du einen Stream nutzt wohl TYMED_ISTREAM)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#3

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 11:40
Mein Held

tymed = TYMED_ISTREAM war die Lösung.

Vielen Dank.
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
24 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 12:39
Moin,
ich hätte noch ein paar Anregungen: Die Schleife für FileDescriptor.cItem ist meiner Ansicht nicht nötig, da man aus Outlook nur eine Datei per Drag ziehen kann. Außerdem steht FormatEtc.lindex nicht für den Dateiindex. Das erneute Setzen nach dem Aufruf von GetFormatEtc wird deshalb nicht benötigt.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 12:52
Ich hab mich das auch gefragt, aber ich benutze die Suite von Anders Melander und Sven Harazim, aber das Ding ist so riesig, dass ich nicht weiß, wo man da was einfügen könnte.

da man aus Outlook nur eine Datei per Drag ziehen kann.
Nein.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.664 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 12:54
kommt der Code denn mit Win64 Outlook und Win32 Anwendung klar? Da gibts immer mal wieder Probleme in der Drag&Drop Bibliothek.
Sven Harazim
--
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
24 Beiträge
 
Delphi 12 Athens
 
#7

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 3. Dez 2024, 13:20
da man aus Outlook nur eine Datei per Drag ziehen kann.
Nein.
Stimmt sorry, mit STRG kann man mehrere markieren.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#8

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 4. Dez 2024, 17:08
kommt der Code denn mit Win64 Outlook und Win32 Anwendung klar? Da gibts immer mal wieder Probleme in der Drag&Drop Bibliothek.
Nein. Nur 32 Bit aktuell.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Wie Drag&Drop einzelner Anhänge aus Outlook?

  Alt 4. Dez 2024, 19:38
kommt der Code denn mit Win64 Outlook und Win32 Anwendung klar? Da gibts immer mal wieder Probleme in der Drag&Drop Bibliothek.
Zitat:
CFSTR_FILEDESCRIPTOR
Und Outlook verwendet aktuell mal wieder Streams, womit das hier auch nicht hilfreich ist.

Die bauen da aber auch gefühlt alle 1-2 Jahre alles komplett um, damit uns nicht langweilig wird.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz