Zwischenablage benutzen

K

Kanonenfutter

Wie kann ich einen String oder andere Datentypen in der Zwischenablage ablegen und danach abrufen?
 

Alexander Schuc

crazy-weasel
In dem du die Klasse Clipboard im Namespace System.Windows.Forms benutzt.
Beziehungsweise deren 2 statischen Methoden namens
# SetDataObject
und
# GetDataObject

Mfg,
Alex

// Edit:
Noch ein kleiner Nachtrag.
Da du mit den Klassen des .net Frameworks nur den Inhalt auslesen oder setzen kannst, aber es kein Event existiert, welches auselöst wird, wenn etwas in die Zwischenablage geschrieben wird gibts jetzt hier von mir noch ein bisschen Code der die Zeigen soll wie du benachrichtigt werden kannst.
Dazu hollen wir uns eine Methode aus der user32.dll.

Code:
..
using System.Runtime.InteropServices;
..

public class MeineKlasse : System.Windows.Forms.Form
{
	[DllImport("user32.dll",EntryPoint="SetClipboardViewer")]

	public static extern int SetClipboardViewer(int hWndNewViewer);

	...
	public MeineKlasse()
	{
		...
		SetClipboardViewer((int) this.Handle);
		...
	}
	protected override void WndProc(ref Message m)

	{

		const int WM_DRAWCLIPBOARD = 0x308;

		if (m.Msg == WM_DRAWCLIPBOARD)

		{

			CheckClipboard(); // Hier sollte der Code stehen,
						// der bei Änderungen der Zwischenablage ausgeführt wird

		}

		else

		{

			base.WndProc(ref m);

		}

	}
	...
}
 
Zuletzt bearbeitet:
K

Kanonenfutter

OK, danke
das hinzufügen zum clipboard hat anscheinend funktioniert, aber beim abrufen gibt es nur "System.Windows.Forms.DataObject" aus.
 

Alexander Schuc

crazy-weasel
Dann hast du es wohl falsch verwendet.
Noch ein bisschen Code von mir.

Code:
string[] NativeDataTypes	= Clipboard.GetDataObject().GetFormats(false);
foreach (string ndt in NativeDataTypes)

{

	if ((ndt == DataFormats.Dib)
		||(ndt == DataFormats.Dif)
		|| (ndt == DataFormats.Tiff)
		|| (ndt == DataFormats.Bitmap))

	{	// Eine Bitmap in der Zwischenablage...

		Bitmap bmp = (Bitmap) Clipboard.GetDataObject().GetData(DataFormats.Bitmap);

	}

	if (ndt == DataFormats.Text)

	{ // Text in der Zwischenablage

		string txt = (string) Clipboard.GetDataObject().GetData(DataFormats.Text);

	}

}

Nun verständlicher wie du Daten aus der Zwischenablage bekommst?