Clipboard.SetTextメソッドを使えば、簡単に文字列をクリップボードにコピーできます。
'Imports System.Windows.Forms
'クリップボードに文字列をコピーする
Clipboard.SetText("コピーする文字列です。")
//using System.Windows.Forms;
//クリップボードに文字列をコピーする
Clipboard.SetText("コピーする文字列です。");
VB.NETでは、My.Computer.Clipboard.SetTextメソッドを使っても同じことができます。
この方法ではアプリケーション終了後もクリップボードにデータが残りますが、残さない方法は次をご覧下さい。
.NET Framework 1.1以前でクリップボードに文字列をコピーするには、Clipboard.SetDataObjectメソッドを使います。アプリケーション終了後もクリップボードにデータを残しておくか否かの指定もできます。
'Imports System.Windows.Forms 'クリップボードに文字列をコピーする 'アプリケーション終了後、クリップボードからデータは削除される Clipboard.SetDataObject("コピーする文字列です。") 'アプリケーション終了後もクリップボードにデータを残しておく Clipboard.SetDataObject("コピーする文字列です。", True)
//using System.Windows.Forms; //クリップボードに文字列をコピーする //アプリケーション終了後、クリップボードからデータは削除される Clipboard.SetDataObject("コピーする文字列です。"); //アプリケーション終了後もクリップボードにデータを残しておく Clipboard.SetDataObject("コピーする文字列です。", true);
.NET Framework 2.0以降では、Clipboard.GetTextメソッドを使います。
下の例ではClipboard.ContainsTextでクリップボードに文字列データがあるか事前に確認していますが、GetTextが空の文字列(String.Empty)を返すかによっても判断することができます。
'Imports System.Windows.Forms 'クリップボードに文字列データがあるか確認 If Clipboard.ContainsText() Then '文字列データがあるときはこれを取得する '取得できないときは空の文字列(String.Empty)を返す Console.WriteLine(Clipboard.GetText()) End If
//using System.Windows.Forms; //クリップボードに文字列データがあるか確認 if (Clipboard.ContainsText()) { //文字列データがあるときはこれを取得する //取得できないときは空の文字列(String.Empty)を返す Console.WriteLine(Clipboard.GetText()); }
VB.NETでは、My.Computer.Clipboard.GetTextメソッドを使っても同じことができます。
補足:GetTextメソッドは、Windows2000以降のNT系OSであればTextDataFormat.UnicodeText、それ以外はTextDataFormat.Textを使って、IDataObject.GetDataメソッドでデータを取得しているようです。
.NET Framework 1.1以前でクリップボードの文字列のデータを取得するには、Clipboard.GetDataObjectメソッドを使います。下の例ではGetDataPresentメソッドでクリップボードに文字列データがあるか確認していますが、GetDataメソッドがnullを返すかによって判断することもできます。
'Imports System.Windows.Forms 'クリップボードのデータを取得する 'クリップボードにデータが無いときはNothingを返す Dim iData As IDataObject = Clipboard.GetDataObject() 'クリップボードに文字列データがあるか確認 If (Not iData Is Nothing) AndAlso (iData.GetDataPresent(DataFormats.Text)) Then '文字列データがあるときはこれを取得する '文字列データを取得できないときはNothingを返す Console.WriteLine(DirectCast(iData.GetData(DataFormats.Text), String)) End If
//using System.Windows.Forms; //クリップボードのデータを取得する //クリップボードにデータが無いときはnullを返す IDataObject iData = Clipboard.GetDataObject(); //クリップボードに文字列データがあるか確認 if (iData != null && iData.GetDataPresent(DataFormats.Text)) { //文字列データがあるときはこれを取得する //文字列データを取得できないときはnullを返す Console.WriteLine((string)iData.GetData(DataFormats.Text)); }
クリップボードの文字列をDataFormats.Textで取得すると文字化けをするケースがわずかにあります(Visual Studioでコピーしたとき)。そのような場合は、DataFormats.Textの代わりにDataFormats.UnicodeTextを使用して下さい。