Laden...

Was macht Strg+C genau?

Erstellt von MoaByter vor 2 Jahren Letzter Beitrag vor 2 Jahren 509 Views
M
MoaByter Themenstarter:in
68 Beiträge seit 2016
vor 2 Jahren
Was macht Strg+C genau?

hallo,

jetzt sagt bitte nicht: "das kopiert", denn das ist nur die halbe Wahrheit.
Beispiel:
Ich erhalte eine Mail mit formatiertem Text, also mit bold und kursiv und sowas.
Den Text markiere ich, dann Strg+C und füge das Kopierte in ein Textfeld (<textarea>...</textarea>) im Browser FF ein. Funktioniert wunderbar, aber ich möchte es mit C#-Code realisieren.

Ich versuchte


	dynamic doc = webbrowser.Document.DomDocument;
	Clipboard.SetData("html", doc.selection.createRange().htmltext);   // statt "html" habe ich auch 'DataFormats...' versucht

aber es gelingt nicht, die Zwischenablage ist über


	string str = Clipboard.GetData(DataFormats.Html) + "";

nicht auslesbar, auch mit anderen DataFormats nicht.
Wieso also funktioniert es mit Strg+C? Was genau macht Strg+C?

Hat jemand 'ne Idee? Danke!

16.807 Beiträge seit 2008
vor 2 Jahren

Das wird eher an Deinem doc liegen als an Copy Paste.
Das funktioniert mit SetData und GetData mit den entsprechenden Formaten einwandfrei.
Da ist im Betriebssystem auch nicht viel Logik dahinter; ist nur ein Datenspeicher.

M
MoaByter Themenstarter:in
68 Beiträge seit 2016
vor 2 Jahren

Das doc wird im Browser korrekt angezeigt, ist ganz korrektes, einfaches Html, und wenn ich es dort komplett markiere, egal ob manuell oder mit


	webbrowser.Focus();
	webbrowser.Document.ExecCommand("SelectAll", true, null);

markieren lasse und dann mit Strg+C den Text heruakopiere und dann bei FF einfüge, funktioniert es wunderbar, nur eben nicht mit


	Clipbord.SetData(...);

Meine Freundin und ich haben dazu gestern zwei recht interessante Links gefunden, auch wenn's mir noch nicht geholfen hat:

https://de.wikipedia.org/wiki/Zwischenablage
https://docs.microsoft.com/de-de/windows/win32/dataxchg/clipboard-operations#cut-and-copy-operations

So ganz wenig ist das nicht, was da passiert.

Nunja, erstmal Danke für deine Antwort, ich werd' mal weiter suchen, es geht ja auch so.
Wäre nur interessasnt zu wissen, was da alles passiert und wie.

16.807 Beiträge seit 2008
vor 2 Jahren

Was unter der Haube passiert, kannst Du einfach im Quellcode von .NET nachlesen.
https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Clipboard.cs

Es gibt auch stabilere Implementierungen, zB. https://github.com/CopyText/TextCopy

So ganz wenig ist das nicht, was da passiert.

Deine Dokumentation erklärt im Endeffekt das Verhalten durch die C++ Implementierung, dass Dinge aufgeräumt und freigegeben werden müssen.
Mit den Daten selbst passiert nichts.

C
2.121 Beiträge seit 2010
vor 2 Jahren

Meines Wissens kann die Zwischenablage Daten in mehrerem Variationen speichern. Vielleicht setzt du die falsche?
Guck dir doch den funktionierenden Inhalt mit GetData an, dann siehst du möglicherweise den entscheidenden Unterschied zu dem was du setzt.

M
MoaByter Themenstarter:in
68 Beiträge seit 2016
vor 2 Jahren

Meines Wissens kann die Zwischenablage Daten in mehrerem Variationen speichern. Vielleicht setzt du die falsche?
Guck dir doch den funktionierenden Inhalt mit GetData an, dann siehst du möglicherweise den entscheidenden Unterschied zu dem was du setzt.

Es geht nicht um das GetData(), sondern um das SetData(). Das GetData() oder wie auch immer macht dann der Firefox. Dort will ich die Daten aus der Zwischenablage in ein <textarea>-Eingabefeld einfügen.
Über Strg+C (WebBrowser) und Strg+V (Firefox) klappt das prima, es funktioniert nur nicht, wenn ich die Daten über SetData in die Zwischenablage bringe. SetData(DataFormats.Html) und SetData(DataFormats.Text) schreiben die Daten des WebBrowsers als Klartext (mit allen Html-Tags) in die Zwischenablage. In der <textarea> erscheint dann der Html-Text oder eben nur der Text, aber nicht der formatierte.
Alle anderen SetData(DataFormats...) sind nicht lesbar oder werden nicht gelesen.

Das ganze ist nicht von fundamentaler Bedeutung. Ich wollte es nur ausprobieren und dabei kam diese Frage auf.
Wie schon gesagt/geschrieben werde ich mich mal weiter informieren, ein paar Gedenkanstöße habe ich ja erhalten.

Viele Grüße - Moabyter

4.931 Beiträge seit 2008
vor 2 Jahren

Lade dir mal den Free Clipboard Viewer herunter. Damit kannst du die im Clipboard enthaltenen Formate detailiert anschauen.

Das "HTML Format" ist nicht einfach nur HTML-Text, sondern hat ein bestimmtes Format: HTML-Zwischenablageformat.
Ich habe für ein Projekt dafür den Code von ClipboardHelper.cs benutzt.