{"id":55000218,"date":"2020-04-01T00:00:00","date_gmt":"2020-08-25T08:59:36","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=218"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Programmieren_der_Zwischenablage_mit_VB","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Programmieren_der_Zwischenablage_mit_VB\/","title":{"rendered":"Programmieren der Zwischenablage mit VB"},"content":{"rendered":"<p><b>Unter VBA war das Zugreifen auf die Inhalte der Zwischenablage mit dem Einsatz einiger API-Funktionen verbunden. Unter VB und .NET gelingt das wesentlich einfacher. Dieser Artikel zeigt, wie Sie Inhalt in die Zwischenablage kopieren, den Inhalt der Zwischenablage auslesen und weitere Funktionen nutzen wie etwa das Ermitteln des Typs des Inhalts der Zwischenablage.<\/b><\/p>\n<p><b>Die ClipBoard-Klasse<\/b><\/p>\n<p>Die <b>ClipBoard<\/b>-Klasse ist das Herzst&uuml;ck der nachfolgend vorgestellten Techniken. Da die Zwischenablage computerweit genutzt wird, also auch von anderen Programmen und auch von Windows selbst, referenzieren wir die <b>ClipBoard<\/b>-Klasse &uuml;ber <b>My.Computer<\/b>. <b>My <\/b>ist eine Funktion, die einen einfachen Zugriff auf verschiedene Klassen bietet, die sich auf den Computer, die Anwendung, Einstellungen, Ressourcen und so weiter beziehen.<\/p>\n<p>Wir referenzieren &uuml;ber <b>My <\/b>die <b>Computer<\/b>-Klasse, die uns auch die <b>ClipBoard<\/b>-Klasse zur Verf&uuml;gung stellt. Die <b>ClipBoard<\/b>-Klasse bietet wiederum die folgenden M&ouml;glichkeiten &#8211; in alphabetischer Reihenfolge:<\/p>\n<ul>\n<li><b>Clear<\/b>: Leert den Inhalt der Zwischenablage. Vorsicht, da die Zwischenablage ja auch von anderen Anwendungen genutzt wird!<\/li>\n<li><b>ContainsAudio<\/b>: Gibt an, ob die Zwischenablage <b>WaveAudio<\/b>-Inhalt enth&auml;lt.<\/li>\n<li><b>ContainsData(&lt;String&gt;)<\/b>: Gibt an, ob die Zwischenablage Daten des mit dem Parameter <b>String <\/b>angegebenen Typs enth&auml;lt. Beispielwerte f&uuml;r den Parameter sind <b>Bitmap<\/b>, <b>StringFormat<\/b>, <b>WaveAudio <\/b>et cetera.<\/li>\n<li><b>ContainsFileDropList<\/b>: Gibt an, ob die Zwischenablage Daten im <b>FileDrop<\/b>-Format enth&auml;lt.<\/li>\n<li><b>ContainsImage<\/b>: Gibt an, ob sich in der Zwischenablage Daten im Bitmap-Format befinden.<\/li>\n<li><b>ContainsText<\/b>: Gibt an, ob die Zwischenablage Text enth&auml;lt.<\/li>\n<li><b>ContainsText(Optional &lt;TextDataFormat&gt;)<\/b>: &Uuml;berladung von <b>ContainsText<\/b>. Gibt an, ob die Zwischenablage Text enth&auml;lt. Der optionale Parameter erm&ouml;glicht eine genauere Pr&uuml;fung des Inhalts. Hier gibt es die folgenden Werte: <b>Text <\/b>(<b>0<\/b>), <b>UnicodeText <\/b>(<b>1<\/b>), <b>Rtf <\/b>(<b>2<\/b>), <b>Html <\/b>(<b>3<\/b>), <b>CommaSeparatedValue <\/b>(<b>4<\/b>)<\/li>\n<li><b>GetAudioStream<\/b>: Liefert einen in der Zwischenablage gespeicherten Audiostream.<\/li>\n<li><b>GetData(&lt;String&gt;)<\/b>: Liefert den Inhalt der Zwischenablage in dem mit dem Parameter <b>String <\/b>angegebenen Format.<\/li>\n<li><b>GetDataObject<\/b>: Ruft die Daten der Zwischenablage ab &#8212; unabh&auml;ngig vom Typ.<\/li>\n<li><b>GetFileDropList<\/b>: Ruft einen oder mehrere Dateinamen aus der Zwischenablage ab.<\/li>\n<li><b>GetImage<\/b>: Ruft ein Bild aus der Zwischenablage ab.<\/li>\n<li><b>GetText<\/b>: Ruft Text aus der Zwischenablage ab.<\/li>\n<li><b>GetText(&lt;TextDataFormat&gt;)<\/b>: &Uuml;berladung von <b>GetText<\/b>. Ruft Text im angegebenen Textformat ab. Hier gibt es die folgenden Werte: <b>Text <\/b>(<b>0<\/b>), <b>UnicodeText <\/b>(<b>1<\/b>) , <b>Rtf <\/b>(<b>2<\/b>), <b>Html <\/b>(<b>3<\/b>), <b>CommaSeparatedValue <\/b>(<b>4<\/b>)<\/li>\n<li><b>SetAudio(&lt;Byte[]&gt;)<\/b>: F&uuml;gt ein Byte-Array im WaveAudio-Format als Stream hinzu.<\/li>\n<li><b>SetAudio(&lt;Stream&gt;)<\/b>: &Uuml;berladung von <b>SetAudio<\/b>. F&uuml;gt den mit dem Parameter referenzierten Stream im WaveAudio-Format hinzu.<\/li>\n<li><b>SetData(&lt;String&gt;, &lt;Object&gt;)<\/b>: F&uuml;gt die Daten aus dem Parameter <b>Object <\/b>im mit dem Parameter <b>String <\/b>angegebenen Format in die Zwischenablage ein.<\/li>\n<li><b>SetDataObject(&lt;Object&gt;)<\/b>: F&uuml;gt ein Objekt in die Zwischenablage ein. Dieses Objekt ist nur tempor&auml;r bis zum Beenden der ausl&ouml;senden Anwendung in der Zwischenablage verf&uuml;gbar.<\/li>\n<li><b>SetDataObject(&lt;Object&gt;, <Boolean>)<\/b>: &Uuml;berladung von <b>SetDataObject<\/b>. Der Parameter <b>Boolean <\/b>gibt an, ob die in die Zwischenablage eingef&uuml;gten Daten auch nach dem Beenden der Anwendung noch in der Zwischenablage verf&uuml;gbar sein sollen.<\/li>\n<li><b>SetDataObject(&lt;Object&gt;, <Boolean>, <Int32>, <Int32>)<\/b>: &Uuml;berladung von <b>SetDataObject<\/b>. Die beiden <b>Int32<\/b>-Parameter geben an, wie oft versucht wird, <b>&lt;Object> <\/b>in die Zwischenablage zu &uuml;bertragen und in welchem zeitlichen Abstand.<\/li>\n<li><b>SetFileDropList(StringCollection)<\/b>: F&uuml;gt eine Liste von einem oder mehreren Dateipfaden in einer <b>StringCollection <\/b>zur Zwischenablage hinzu.<\/li>\n<li><b>SetImage(&lt;Image&gt;)<\/b>: F&uuml;gt ein Objekt des Datentyps <b>Bitmap <\/b>zur Zwischenablage hinzu.<\/li>\n<li><b>SetText(&lt;String&gt;)<\/b>: F&uuml;gt einen Text zur Zwischenablage hinzu.<\/li>\n<li><b>SetText(&lt;String&gt;, <TextDataFormat>)<\/b>: &Uuml;berladung von <b>SetText<\/b>. F&uuml;gt einen Text mit dem in <b>TextDataFormat <\/b>angegebenen Format zur Zwischenablage hinzu.<\/li>\n<\/ul>\n<p><b>Text in der Zwischenablage<\/b><\/p>\n<p>Das Hinzuf&uuml;gen von Text in die Zwischenablage ist schnell erledigt. In einem Beispielprojekt haben wir dazu ein Textfeld namens <b>txtText <\/b>und eine Schaltfl&auml;che namens <b>btnInZwischenablage <\/b>hinzugef&uuml;gt:<\/p>\n<pre>&lt;Button x:Name=\"btnInZwischenablage\" Click=\"BtnInZwischenablage_Click\"&gt;In Zwischenablage&lt;\/Button&gt;\r\n&lt;Label&gt;Text:&lt;\/Label&gt;\r\n&lt;TextBox x:Name=\"txtZwischenablage\" Width=\"200\"&gt;&lt;\/TextBox&gt;<\/pre>\n<p>Ein Klick auf die Schaltfl&auml;che <b>btnInZwischenablage <\/b>soll den aktuellen Inhalt des Textfeldes <b>txtZwischenablage <\/b>in die Zwischenablage kopieren, was wir so realisieren: <\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BtnInZwischenablage_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     Clipboard.SetText(txtZwischenablage.Text)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sehen Sie in Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_218_001.png\" alt=\"Text aus einem Textfeld in die Zwischenablage kopieren\" width=\"549,6265\" height=\"182,8418\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Text aus einem Textfeld in die Zwischenablage kopieren<\/span><\/b><\/p>\n<p><b>Text aus der Zwischenablage abrufen<\/b><\/p>\n<p>Wenn Sie den soeben in der Zwischen-ablage gespeicherten Text oder einen anderen in der Zwischenablage gespeicherten Text auslesen wollen, verwenden Sie die Methode <b>GetText<\/b>.<\/p>\n<p>Eine zweite Schaltfl&auml;che namens <b>btnAusZwischenablage <\/b>soll den Inhalt der Zwischenablage in das Textfeld kopieren. Dazu verwenden wir schlicht die Methode <b>GetText <\/b>der <b>ClipBoard<\/b>-Klasse:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BtnAusZwischenablage_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     txtZwischenablage.Text = Clipboard.GetText\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit wird allerdings der komplette Inhalt des Textfeldes &uuml;berschrieben. Um den Inhalt der Zwischenablage an der Position der Einf&uuml;gemarke einzuf&uuml;gen beziehungsweise anstelle des aktuell markierten Textes, verwenden Sie die folgende Anweisung:<\/p>\n<pre>txtZwischenablage.SelectedText = Clipboard.GetText()<\/pre>\n<p><b>Pr&uuml;fen, ob die Zwischenablage Text enth&auml;lt<\/b><\/p>\n<p>Wenn die Zwischenablage keinen Text enth&auml;lt, wird auch nichts in die Zwischenablage eingef&uuml;gt. Wenn Sie vor dem Einf&uuml;gen von Text pr&uuml;fen wollen, ob die Zwischenablage &uuml;berhaupt Text enth&auml;lt, k&ouml;nnen Sie die <b>ContainsText<\/b>-Methode wie folgt verwenden:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>Clipboard.ContainsText<span style=\"color:blue;\"> Then<\/span>\r\n     txtZwischenablage.SelectedText = Clipboard.GetText()\r\n<span style=\"color:blue;\">Else<\/span>\r\n     MessageBox.Show(\"Zwischenablage enth&auml;lt keinen Text.\")\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p><b>Zwischenablage leeren<\/b><\/p>\n<p>Mit der <b>Clear<\/b>-Methode der <b>Clipboard<\/b>-Klasse leeren Sie die Zwischenablage:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BtnZwischenablageLeeren_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     Clipboard.Clear()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Zwischenablage und Dateien<\/b><\/p>\n<p>Wie genau k&ouml;nnen wir die Zwischenablage mit Dateien nutzen Wir k&ouml;nnen beispielsweise eine Liste von Dateien im Windows Explorer markieren, per <b>Strg + C <\/b>in die Zwischenablage kopieren und die Namen dieser Dateien &uuml;ber eine Schaltfl&auml;che dann aus der Zwischenablage weiterverarbeiten. Wir f&uuml;gen wieder zwei Schaltfl&auml;chen hinzu, welche zum Hinzuf&uuml;gen von Daten zur Zwischenablage und zum Auslesen der Zwischenablage dienen. Au&szlig;erdem legen wir ein Listenfeld an, in dem wir die Daten aus der Zwischenablage anzeigen wollen:<\/p>\n<pre>&lt;Button x:Name=\"btnInZwischenablageDatei\" Click=\"BtnInZwischenablageDatei_Click\"&gt;In Zwischenablage&lt;\/Button&gt;\r\n&lt;Button x:Name=\"btnAusZwischenablageDatei\" Click=\"BtnAusZwischenablageDatei_Click\"&gt;Aus Zwischenablage&lt;\/Button&gt;\r\n&lt;Label&gt;Text:&lt;\/Label&gt;\r\n&lt;ListBox x:Name=\"lstZwischenablageDatei\" Width=\"300\" Height=\"100\"&gt;&lt;\/ListBox&gt;<\/pre>\n<p>Dann gehen wir davon aus, dass der Benutzer eine oder mehrere Dateien im Windows Explorer markiert und per Strg + C in die Zwischenablage kopiert hat und dann die Schaltfl&auml;che <b>btnAusZwischenablageDatei <\/b>bet&auml;tigt. Dies l&ouml;st die folgende Methode aus. F&uuml;r die dort verwendete Variable des Typs <b>StringCollection <\/b>m&uuml;ssen wir der Code behind-Klasse noch einen Verweis auf den folgenden Namespace hinzuf&uuml;gen:<\/p>\n<pre>Imports System.Collections.Specialized<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000218\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000218?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000218\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"45e493ab83\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter VBA war das Zugreifen auf die Inhalte der Zwischenablage mit dem Einsatz einiger API-Funktionen verbunden. Unter VB und .NET gelingt das wesentlich einfacher. Dieser Artikel zeigt, wie Sie Inhalt in die Zwischenablage kopieren, den Inhalt der Zwischenablage auslesen und weitere Funktionen nutzen wie etwa das Ermitteln des Typs des Inhalts der Zwischenablage.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022020,662020,44000034,44000016],"tags":[],"yst_prominent_words":[],"class_list":["post-55000218","post","type-post","status-publish","format-standard","hentry","category-66022020","category-662020","category-COMAddIns_programmieren","category-VBGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000218"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000218\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000218"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}