投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/9/6 18:32:17
そういうバージョン情報は、最初に書いておいていただけると助かります。

> クリップボードに代入しているのはVB2005でMy.Computer.Clipboard.SetText() を使用しています。

それは System.Windows.Clipboard クラスではなく
System.Windows.Forms.Clipboard クラスです。紛らわしいですよね…。
(といっても、両者に機能的な差異は無いのですが)

System.Windows.Clipboard という名のクラスも存在しているのですが、
それは、.NET Framework 3.0 以降で利用可能な
WPF (Windows Presentation Foundation) 用のクラスなのです。

VB2005 が対応しているのは .NET Framework 2.0 ですので、
そもそも WPF アプリケーションを作成できません。


また My.Computer の Clipboard プロパティが返すオブジェクトは、
Microsoft.VisualBasic.MyServices 名前空間の ClipboardProxy クラスです。

これの SetText メソッドでは、内部的に、
System.Windows.Forms.Clipboard クラスを呼び出しています。
System.Windows.Clipboard クラスでありません。


> クリップボードの仕組みは良く理解しておりません。

まずは前提知識の確認。
下記の 3 点についてはご存知でしょうか?


(1)クリップボードは、アプリケーションごとに所有されているものではなく、OS 全体で単一のリソースです。


(2)一回のコピー操作では、一つのデータを表すために、同時に複数の形式のデータが書き込まれます。
これについては、Excel シート上で右クリックしたときに「形式を選択して貼り付け」という選択肢を選んでみると分かりやすいでしょう。
(Excel で対応していない形式は表示されないですけど)


(3)貼り付け操作時には、そのアプリが対応している形式が記録されているかどうかを調べ、それを貼り付けます。
対応形式が複数あった場合、どの形式で貼り付けられるのかは、貼り付け先アプリケーションの実装次第です。



たとえば、クリップボード上に画像をコピーしておいても、
それをメモ帳に貼ることができないことはご存知ですよね。
その理由が上記 (3) というわけです。

メモ帳は画像形式は扱えないので、貼り付け操作が行われません。
ただし画像形式と同時に、テキストや Unicode テキスト形式が
保持されている場合は、そのテキストが貼られることになります。