Autor |
Beitrag |
Lotto
Hält's aus hier
Beiträge: 10
Delphi 7 Prof / Enterprise
|
Verfasst: 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
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 10
Delphi 7 Prof / Enterprise
|
Verfasst: 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...
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
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 17.09.08 18:09
Sinspin 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
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 17.09.08 19:10
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.  (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?
|
|
|