2015-04-17 11 views
5

Ich versuche, ein Client-Server-Programm zu machen, in dem es möglich ist, den Inhalt der Zwischenablage zu teilen.Kopiere Byte-Array in die Zwischenablage

Jetzt kann ich es teilen, wenn der Inhaltstyp Audio, Bild oder Text ist. Die Idee ist, dass ich die Inhalte in einer Byte-Array zu konvertieren, es zu senden, es in seinem ursprünglichen Typ konvertieren zurück (Stream, BitmapSource oder string), und es in der Client-Zwischenablage injizieren, indem sie die Methoden Clipboard.SetAudio, Clipboard.SetImage oder Clipboard.SetText.

Mein Problem ist, wenn einige Dateien in der Zwischenablage sind. Ich verwende die Methode Clipboard.GetFileDropList, um eine Liste der Dateien zu erhalten, und für jede Datei in der Liste wandle ich sie in einem Byte-Array um und sende sie an den Client. Wie kann ich dieses Byte-Array in die Client-Zwischenablage injizieren?

Ich weiß, es gibt die Methode Clipboard.SetFileDropList, aber es erfordert, dass ich eine Dateiliste bereitstellen und da die Datei nicht auf dem Client vorhanden ist, kann ich es nicht verwenden.

Wie kann ich dieses Problem lösen?

+1

Wenn nichts besser ist, können Sie die Datei in einem temporären Ordner neu erstellen und dann kopieren. Das ist, was Mouse Without Borders macht, ich denke es ist kein Zufall –

Antwort

3

Damit der Client die Dateien als verhandelbar behandelt, müssen sie auf dem Client-Dateisystem in irgendeiner Weise vorhanden sein, da die Zwischenablage beim Festlegen des Inhalts der Zwischenablage eine Liste von Dateinamen erwartet.

Dies kann durch die Übertragung der Daten als Stream an Ihren Kunden, und dann macht der Kunde sofort auspacken, dass Strom in einen temporären Ordner, der Pfad ist über erhältlich, zu dem geschehen:

var temp = Environment.ExpandEnvironmentVariables("%TEMP%"); 

das erledigt und die dateien sind i place, sie können diese dateien in der zwischenablage so positionieren, als ob sie kopiert worden wären.

Seien Sie gewarnt, dass das Unterstützen der Datei Kopieren/Einfügen anstelle einer Option zum "Übertragen" von Dateien viel langsamer als andere Operationen ausgeführt werden kann, aufgrund dessen, wie groß Dateien werden können.

+0

Ich dachte über diesen Ansatz nach, aber ich fragte mich, ob es bessere gab. Meine Sorge ist, dass es einige Speicherverschwendung geben könnte, wenn die übertragenen Dateien groß sind. Wie auch immer, ich werde versuchen zu implementieren, was Sie vorgeschlagen haben. –

Verwandte Themen