Autor Beitrag
Lotto
Hält's aus hier
Beiträge: 10


Delphi 7 Prof / Enterprise
BeitragVerfasst: Mi 17.09.08 11:02 
Hallo zusammen,

auch auf die Gefahr hin, dass ich gesteinigt werde, stelle ich einfach Mal mein Problem mit der Zwischenablage hier rein und hoffe, dass mir jemand helfen kann (ich habe die Suche schon genutzt).

Ich würde gerne MEHRERE Dateien in Outlook in die Zwischenablage kopieren (also nicht den Link zur Datei, sondern die Dateien selber) und dann in meinem Programm dies wieder auslesen. Mein Problem Dabei ist, dass im FileDescriptor immer nur der Dateiname steht, alle anderen Werte wie Größe etc sind 0, auch wenn ich mit einem Clipboardviewer draufschaue. Hat jemand vll eine Lösung, wie man an diese Dateien kommen kann?

Schöne Grüße und schonmal Danke!
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 17.09.08 11:19 
Hallo es macht so den Eindruck als wärst du schon ein Stück weiter gekommen als ich. Mich würde mal der Quelltext interessieren mit dem du die Namen der Dateien in die Zwischenablage bekommst.
Soweit ich das bisher gesehen habe ist es dafür nötig das sich die Dateien irgendwo auf einem Datenträger befinden und du die Pfade zu den Dateien mit angibst.
Ich habe bisher aber immer nur den Weg vom Explorer in mein Programm geschafft. In die andere Richtung wäre auf jeden Fall eine praktikable Erweiterung.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Lotto Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 7 Prof / Enterprise
BeitragVerfasst: Mi 17.09.08 11:43 
Also bisher schreibt er immer nur die erste Datei, allerdings holt er sich in der Schleife die verschiedenen Dateinamen...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
//*******************************************************************************
function TForm1.WintFileOpen:Boolean;
//*******************************************************************************
begin
                try
                AssignFile(wintf,wintfile);
      Rewrite(wintf,1);
                Except

                end;
end;

//*******************************************************************************
function TForm1.WintFileWriteBinary(t:string;l:integer):Boolean;
//*******************************************************************************
begin
                try
                if l > 0 then BlockWrite(wintf,t[1],l);
      Result:=true;
   except
                Result:=false;
   end;
end;

//*******************************************************************************
function TForm1.WintFileClose:Boolean;
//*******************************************************************************
begin
                CloseFile(wintf);
   Result:=true;
end;


procedure TForm1.GetFilesFromClipboard;
var
handle:THandle;
handleCont:THandle;
size, sizeCont:dWord;
f:File;
Result, aResult, ResultCont:String;
Des:TFileDescriptor;
Grp:^TFileGroupDescriptor;
j, Pos:Integer;
nFiles:Integer;
begin
  CF_FILECONTENTS := RegisterClipboardFormat('FileContents');
  CFSTR_FILECONTENTS := RegisterClipboardFormat('CFSTR_FILECONTENTS');
  CF_FILEGROUPDESCRIPTOR := RegisterClipboardFormat('FileGroupDescriptor');
  if clipboard.HasFormat(CF_FILECONTENTS) then
  begin
   Clipboard.Open;
   try
      handle:= Clipboard.GetAsHandle(CF_FILEGROUPDESCRIPTOR);
      if handle<>0 then
        size:=GlobalSize(Handle);
        if size <> 0 then
        begin
          setString(Result, PChar(GlobalLock(Handle)), size);
          Grp:=Pointer(Result);
          nFiles:=Grp.cItems;
          handleCont:= Clipboard.GetAsHandle(CF_FILECONTENTS);
          Pos:=0;
          if handleCont<>0 then
            sizeCont := GlobalSize(HandleCont);
            if sizeCont<>0 then
            begin
              SetString(ResultCont, PChar(GlobalLock(HandleCont)), sizeCont);
              for j := 1 to nFiles do
              begin
                System.Move(Result[SizeOf(DWORD)+1+(j-1)*SizeOf(TFileDescriptor)], Des,
                SizeOf(TFileDescriptor));
                aResult:=copy(ResultCont,Pos,sizeCont);
                ShowMessage(des.cFileName);
                Wintfile:='C:\Temp\Test.doc';
                WintFileOpen;
                WintFileWriteBinary(aResult,sizeCont);
                WintFileClose;
              end;
              GlobalUnlock(handle);
            end;
        end;
   finally
      Clipboard.Close;
   end;
  end;
end;
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 17.09.08 17:06 
Probiere es mal mit Dateien deren Inhalt du in einem Texteditor prüfen kannst.
Es sieht mir danach aus als wenn du alle Dateien auf einmal erwischst.
Jedenfalls ziehst du die Größe der Dateien ja nur einmal vor der Schleife und du setzt auch den Offset nicht weiter.
Aber du hattest ja geschrieben das du die Daten dafür nicht findest.

Ich habe mal mit meinem Testprogramm fürs manipulieren der Zwischenablage geschaut, und muss sagen, ich kann mir nicht vorstellen das du die ganze Datei in der Zwischenablage finden wirst. Da wird immer nur ein Link auf irgend ein Verzeichnis drinne sein.
Denn das würde ja heißen das du unter Umständen mal eben ettliche MB oder GB in den RAM haben willst um diese von dort wieder abhohlen musst obwohl sie ja auf einem Datenträger liegen.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 17.09.08 18:09 
user profile iconSinspin hat folgendes geschrieben:
Ich habe bisher aber immer nur den Weg vom Explorer in mein Programm geschafft. In die andere Richtung wäre auf jeden Fall eine praktikable Erweiterung.
www.delphi-library.d...iewtopic.php?t=28786 ;-)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 17.09.08 19:10 
user profile iconjaenicke hat folgendes geschrieben:
user profile iconSinspin hat folgendes geschrieben:
Ich habe bisher aber immer nur den Weg vom Explorer in mein Programm geschafft. In die andere Richtung wäre auf jeden Fall eine praktikable Erweiterung.
www.delphi-library.d...iewtopic.php?t=28786 ;-)

Ich habe da drüber ja schon so einiges gelesen, auch das man dafür Interfaces braucht. Aber nichtmal bei MSDN bin ich da wirklich schlauer geworden.
Da wäre ich jedenfalls niemals drauf gekommen. :flehan: (alle beteiligten)

Danke.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?