【C#】クリップボード処理プログラミングの原則


コーディング上の注意

参考:方法 : クリップボードからデータを取得する

オブジェクトは複数ある

文字列のコピーを意識しがちですが、イメージや音、ファイルなど、様々なタイプが有るだけでなく、同時にテキストと、EXCEL方式、HTML形式など複数の情報を保持することも可能になっています。

似たような形式は自動で変換

似たような形式があると自動的に変換してくれるらしいです。(autoconvert)

そのものの形式がなくても、画像やテキストなど近い形式から変換して取得できます。

例:HTML形式でも、テキストでとることが可能。

参考:IDataObject.GetData メソッド (String, Boolean) (System.Windows.Forms)

連動させると遅い

ユーザによる非同期操作な処理のため(おそらく)、特にアプリケーション間で何度もコピペを繰り返すと、ロックがかかります。(10秒位)

ClipBoardのClassは

クリップボード処理ではなく、ClipBoardに対する機能があるだけです。 もやっと漠然とクリップボード操作がしたいなと考えるのではなく、 "クリップボードという情報"に対するアクセス方法が、 そのClipBoardクラスに用意されているということを意識します。

なので、その情報にアクセスすることと直接関係ないこと (コピーとか貼り付け)は、別のやり方を行います(後述)。

サンプル

テキストの取得・設定

Clipboard.GetText();

Clipboard.SetText();

イメージの取得

Clipboard.GetImage();

ファイルリストの取得

Clipboard.GetFileDropList();

形式が含まれているかの確認 Clipboard.GetDataObject().GetDataPresent(DataFormats.Text);

※本来はnullチェックが必要。

貼り付け操作などはクリップボード操作ではなく、キーエミュレート

先ほど言ったように、コピーなどは 直接には、クリップボードのデータの処理ではないので キーエミュレートで行います。

コピー操作: アプリケーションの選択範囲を取得 +   クリップボードに適切に情報をコピー

※前半部分のコーディングが面倒だから。

テキストの貼り付け

SendKeys.Send("コピペしたい内容はこれか!”);

キーエミュレートによる貼付け

SendKeys.Send("^V");

SendKeys.Send("+{INS}");

※keybd_event()による方法もあります。

コピー

SendKeys.Send("^C");

SendKeys.Send("^{INS}");

カット

SendKeys.Send("^X");

SendKeys.Send("+{DEL}");

参考:キーエミュレート送信のまとめ【C#】【覚書メモ】

作成している同一アプリ内であれば、こんな面倒で不安定な処理はしないでよいですが、、

おまけ

全てのオブジェクト取得方法

 IDataObject backup = Clipboard.GetDataObject();
 DataObject backupObje = new DataObject();
 Object obje;
 //関連付けられているすべての形式を列挙する
 foreach (string fmt in backup.GetFormats())
 {
     obje = backup.GetData(fmt);
     if (obje != null)
         backupObje.SetData(obje);
 }
 Clipboard.SetDataObject(backupObje);

テキストコピペの複数のやり方

いずれもほぼ同様、GetTextで十分。

Clipboard.GetText();

obj = Clipboard.GetDataObject(); obj.GetData(DataFormats.StringFormat);

obj = Clipboard.GetDataObject(); obj.GetData(DataFormats.Text);

データ・タイプはこちらを参照:DataFormats クラス (System.Windows.Forms) 

関連ページリンク

メソッド作成時に手を抜く方法(メソッドが引数、無名メソッド)【C#】

アプリケーションの設定を保存しておく方法【C#】

デバッグや通知に便利なメッセージ通知方法の使い分け【C#】

座標操作のメソッドの使い分け【C#】

クリップボード操作方法の原則【C#】

アイコンイメージ3つの取得方法サンプルプログラム【C#】

キーエミュレート送信のまとめ【C#】【覚書メモ】

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

1,470 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です