Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateien in der Zwischenablage auslesen (https://www.delphipraxis.net/116241-dateien-der-zwischenablage-auslesen.html)

berens 25. Jun 2008 14:42


Dateien in der Zwischenablage auslesen
 
Hi!

Ich würde gerne mein Programm so aufpolieren, dass wenn der Kunde eine XML-Konfigurationsdatei in die Zwischenablage kopiert, mein Programm anbietet, diese Konfiguration zu laden.

Das mit dem Ändern der Zwischenablage ist kein Problem, das auslesen der Dateien schon:

Unter http://www.swissdelphicenter.ch/de/showcode.php?id=791 wird zwar schon erklärt, wie ich Dateinamen auslese, die vom Windows Explorer kopiert wurden (funktioniert auch). Wenn ich aber z.B. in Outlook einen Anhang mit Rechte-Maustaste --> Kopieren kopiere wird mir der Pfad nicht angezeigt.

Wird vielleicht von Outlook gleich das komplette Attachement in die Zwischenablage gelegt, und vom Explorer nur die Dateinamen? Aber warum kann ich dann im Windows Explorer diese Datei von Outlook über [Bearbeiten] - Einfügen?

Wie kann mein Programm erkennen, dass eine gültige Datei sich in der Zwischenablage befindet?

Weitere Tags für diesen Beitrag: ClipBrd, ClipBoard, Zwischenablage, Datei, Kopieren, TFileName, HasFormat

RavenIV 25. Jun 2008 14:53

Re: Dateien in der Zwischenablage auslesen
 
Zitat:

Zitat von berens
Weitere Tags für diesen Beitrag: ClipBrd, ClipBoard, Zwischenablage, Datei, Kopieren, TFileName, HasFormat

Sowas kannst Du Dir sparen, deshalb bekommst Du auch nicht mehr (sinnvolle) Antworten.
Eher wirst Du zugemüllt, so wie mit diesem Post.

berens 25. Jun 2008 14:56

Re: Dateien in der Zwischenablage auslesen
 
Die Tags sind ja nicht für mich, sondern für die Nachwelt. Ich selbst habe mit diesen Begriffen hier in DP und Google gesucht, aber nichts passendes gefunden. Da ich hier mein Problem nur mit "Zwischenablage" formuliert habe, wäre z.B. die Leute ausgeschlossen, die nur nach "ClipBoard" suchen.

Wenn sich wer durch die Tags zugespammt fühlt, kann ich die auch wieder rausnehmen, das soll ja kein Problem sein.

shmia 25. Jun 2008 17:18

Re: Dateien in der Zwischenablage auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also im Clipboard stehen immer mehrere Formate gleichzeitig drin.
Das ist ganz wichtig zu wissen!
Mit meinem Clipboard-Explorer kann man sich die verschiedenen Formate anzeigen lassen.
Wenn man in Outlook einen Anhang kopiert, dann wird unter anderem auch ein Format mit dem Namen FileContents im Clipboard abgelegt.
In diesem Format ist die gesamte Datei enthalten.

Um an die Daten ranzukommen, muss man im eigenen Programm diese Format ebenfalls registrieren:
Delphi-Quellcode:
var CF_FILECONTENTS : Word;
...
CF_FILECONTENTS := RegisterClipboardFormat('FileContents'); // nur einmal beim Prog.start
Dann kann man abfragen, ob dieses Format im Clipboard enthalten ist und auslesen:
Delphi-Quellcode:
if clipboard.HasFormat(CF_FILECONTENTS) then
// folgendes Code-Stückchen habe ich aus meiner Unit ClipboardTools rausgeschnitten
with Clipboard do
begin
//var
//   size : DWORD;
//   handle : THandle;
   Open;
   try
      handle := GetAsHandle(fmt);
      if handle <> 0 then
      begin
         size := GlobalSize(handle);
         if size > 0 then
         begin
            // Daten nach Result(string) kopieren
            SetString(Result, PChar(GlobalLock(Handle)), size);
            GlobalUnlock(handle);
         end;
      end;
   finally
      Close;
   end;
end;

berens 25. Jun 2008 23:02

Re: Dateien in der Zwischenablage auslesen
 
Ah, ok. Klappt zwar anders, als ich mir das vorgestellt habe, aber es geht. Spart mir sogar noch einen Arbeitsschritt...

Delphi-Quellcode:
   try
      handle := GetAsHandle(fmt);
wird zu

Delphi-Quellcode:
   try
      handle := GetAsHandle(CF_FILECONTENTS);
Danke für die Antwort, hast mir sehr geholfen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 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