![]() |
Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Ich habe einen MemoryStream. Dessen Daten möchte ich in die Zwischenablage kopieren, weil ich die Daten in einem anderen Programm brauche und dabei leider kein Weg über ein COM-Interface möglich ist, sondern nur per copy & paste.
Wäre an sich ja kein Problem mit einem der standardmäßigen ClipBoard Formate (wie z.B. CF_TEXT, CF_UNICODETEXT, etc). Mein Stream enthält jedoch neben mehreren Abschnitten mit AnsiText auch mehrfach $0-Bytes, ist also als binär zu behandeln. Somit ist die Übergabe an das Clipboard mit Hilfe des Formates CF_TEXT ausgeschlossen. Ein proprietäres ClipBoard Format CF_BINARY gibt es aber nicht. Es ginge zwar notfalls auf dem Umweg über das Format CF_HDROP, wozu jedoch zunächst erst einmal die Abspeicherung der Streamdaten als File notwendig ist, auf welches dann durch Verwendung einer PDropFiles-Variablen (cf. ShlObj) zugegriffen werden muss. Gefällt mir aber nur als äußerste Notlösung. Ich habe mehrfache Versuche unternommen, ein selbstdefiniertes, binäres Format zu deklarieren und mittels RegisterClipboardFormat() im System anzumelden, um damit dann die Daten unmittelbar aus dem Stream in das Clipboard befördern zu können, was aber bisher nicht zum Erfolg geführt hat. Hat jemand eigene Erfahrung oder einen erfolgversprechenden Vorschlag ? |
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Zitat:
|
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Liste der Anhänge anzeigen (Anzahl: 1)
Die Klasse TAdvClipboard kann auch Streams ins Clipboard anfügen und auslesen.
Wurde allerdings noch mit Delphi 5 programmiert. Wenn das jemand mit D2010 und höher kompatibel machen möchte, hätte ich gerne das Ergebnis zurück. |
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi shima, danke, ich habe mich beim Umbau nur auf den Streamteil konzentriert, der funktioniert hervorragend.
|
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Erst einmal danke für die Anregungen.
Wie man einen Stream nicht-binärer Daten in die Zwischenablage transferiert, war mir allerdings ja schon mit "klassischen" Prozeduren unter Delphi7 geläufig (ohne spezielle Klasse TAdvClipboard). Aber selbst die Methode ReadStream() von TAdvClipboard benötigt als Parameter explizit das genaue CF-Format der zu übertragenden Daten. Da es nun nach wie vor kein offizielles Format CF_BINARY gibt, bleibt also das eigentliche Problem mit binären Daten im Stream bestehen. Trotz eigener Deklaration eines CF_BINARY mittels RegisterClipboardFormat() funktioniert das mit binären Daten auch mit Hilfe der Methode ReadStream() der Klasse TAdvClipboard nicht. Hat das mit einem Stream binärer Daten wirklich schon einmal jemand in der Praxis erfolgreich versucht ? Das Base64-Encoding der binären Daten im Stream hätte eine mögliche Lösung sein können und funktioniert per se auch bestens. Aber das Zielprogramm, das vom Steuerprogramm aus die Anweisung bekommt, die Daten aus der Zwischenablage per paste zu laden, kann mit den derart codierten Daten nichts anfangen, da es kein Base64-Decoding kennt. Das geht als nur mit den originalen, binären Daten. |
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Durch einige Experimente, u.a auch unter Verwendung des von mir modifizierten Quellcodes des CLIPBOARD-ANALYZER aus dem Telecharger-Pool von DelphiFr, habe ich die Ursache meiner bisherigen Fehlschläge herausgefunden.
Die entscheidende Aufklärung hat schließlich die Idee gebracht, sofort nach der Ausführung von CopyStreamToClipboard(CF_BINARY, MemStream) ein CopyStreamFromClipboard(CF_BINARY, Filestream) anzuweisen. Und tatsächlich lagen anschließend die binären, aus bem Memorystream stammenden Daten komplett im derart abgespeicherten File vor. Somit funktioniert der Transfer der binären Daten in das Clipboard nach Anmeldung des selbstdefinierten Clipboardformats "CF_BINARY" vielmehr eben doch fehlerlos. Die Ursache des von mir anfangs beschriebenen Problems liegt im Empfängerprogramms selbst, da es das von mir definierte Format "CF_BINARY" nicht kennt bzw. trotz dessen Anmeldung im System nicht akzeptieren will und daher die Übernahme der binären Daten per paste aus dem Clipboard verweigert. Schreibe ich dagegen selbst ein separates Empfängerprogramm, das dieses Clipboardformat kennt, kann es auch die binären direkt aus dem Clipboard übernehmen. Leider gibt es kein allgemein bekanntes StandardClipboardformat für solche binäre Daten, weshalb für das spezielle, eigentliche Empfängerprogramm der Umweg über die Zwischenspeicherung der Daten als File unumgänglich ist, das dann vom Empfängerprogramms eingelesen werden muss. |
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Hallo,
also du willst Daten über die Zwischenablage an ein anderes Programm transferieren. Wie heißt den das Programm? Könnte man es kennen? Weil du kannst dir Formate ausdenken und registrieren wie du willst. Es gibt kein Algorithmus der in deinem Kopf nachschaut und die Daten der Zwischenablage korrekt interpretiert. Wenn man sowas machen will geht man eigentlich einen anderen Weg. Zuerst startet man das Programm, wo die Daten über die Zwischenablage rein sollen, zweimal und versucht diese Art von Daten per Kopieren und Einfügen von einer Instanz zur Anderen zu bekommen. Damit stellt man erst mal sicher, dass das Vorhaben überhaupt funktionieren könnte. Wenn man das Programm nicht zweimal unter einer Benutzeranmeldung starten kann, nimmt man zwei Rechner und baut zwischen denen eine RDP-Verbindung auf. In den Einstellungen der RDP-Verbindung kontrollieren, dass die Zwischenablage über die Verbindung übertragen wird. Den Test mit der RDP-Verbindung kann man auch gleich machen, weil man so testen kann ob das Programm das Kopieren und Einfügen über die Zwischenablage macht. Funktioniert dies erst mal, kann man dann mit einem Analyseprogram sich die Daten der Zwischenablage anschauen, den Aufbau dieser untersuchen und dann einen Algorithmus schreiben, welcher Daten in dem Format in die Zwischenablage kopiert. Stellt man beim Testen fest, das sich entweder diese Art von Daten im Programm nicht kopieren lassen oder dabei nicht die Zwischenablage benutzt wird, bleibt nur noch der Blick in die Dokumentation des Programms oder eine Nachfrage beim Hersteller übrig. einbeliebigername. |
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Zitat:
P.S. Vielleicht liest Du aber erst einmal meinen Beitrag hinreichend sorgfältig, bevor Du Dich im übrigen um eine derart verkorkste "Anleitung" bemühst. |
AW: Binäre Daten aus einem MemoryStream in die Zwischenablage überführen
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Und jetzt stellt sich mir noch die Frage was für Binär-Daten du hast? Was steht da denn drin? Und noch was zu meinem Vorgehen. Es ist durchaus wahrscheinlicher, dass ein Programm Formate aus der Zwischenablage lesen kann, welche es auch selber in die Zwischenablage schreibt. Zitat:
einbeliebigername. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz