|
.NET TIPS クリップボードの内容をリアルタイムに取得するには?[C#、VB]デジタルアドバンテージ 岸本 真二郎2009/03/05 |
![]() |
|
|
|
.NET Frameworkによるプログラミングでは、Clipboardクラス(System.Windows名前空間)を用いて、テキストや画像をクリップボードにセットしたり、逆にクリップボードから取得したりできる。クリップボードの標準的なアクセス方法については、「TIPS:クリップボードへデータを送るには?」や「TIPS:クリップボードからデータを受け取るには?」などで解説している。
しかしながら、クリップボードの変更をリアルタイムに検知して、クリップボードの内容を取得するような処理は、Clipboardクラスだけでは実現できない。これには、Win32 APIに含まれるSetClipboardViewerという関数を呼び出すことにより、アプリケーションをクリップボードのビューアとして登録し、さらにWindowsメッセージを直接処理することで、クリップボードにデータが登録されたことを検知できる。
ここでは、NativeWindowクラス(System.Windows.Forms名前空間)を用いることにより、極力Windowsメッセージを意識しないで、リアルタイムにクリップボードからテキストを取得する例を示す。クリップボードにデータが登録(コピー)されたら、イベントハンドラを用いてクリップボードの内容を引き渡す。
| ||
| リアルタイムにクリップボードの内容を通知する処理(上:C#、下:VB) | ||
| クリップボード・ビューア・チェーンとは、本プログラムのようなクリップボードを監視するアプリケーションが登録されているリストで、Windowsにより管理されている。 |
この処理では、まずClipboardEventArgsクラスを定義して、イベントハンドラの引数として使用するクラスを定義する。この中のTextプロパティを使って、クリップボードのテキストを取得する。
MyClipboardViewerクラスは、NativeWindowの派生クラスとして宣言する。これにより、このクラスを“サブクラス化”できる。サブクラス化することで、元のウィンドウに送られてくるWindowsメッセージをサブクラス(ここではMyClipboardViewer)側で先に受け取ることができ、元のウィンドウのメッセージ処理には手を加えずに、Windowsメッセージ(ここで利用するのはクリップボード関連のメッセージ)を処理できるようになる。
このMyClipboardViewerクラスでは、Win32 APIのSetClipboardViewer関数を用いて、クリップボードのビューアを登録する。そして、Windowsメッセージ・ハンドラ(WndProcメソッド)でクリップボードにデータが登録された際(WM_DRAWCLIPBOARDメッセージが送られたとき)に、クリップボードからテキストを取り出して、イベントハンドラを使って文字列を渡すようにしている。
このクラスを利用する側は、MyClipboardViewerオブジェクトの作成と、そのClipboardHandlerイベントのイベントハンドラの設定を行っておけば、クリップボードにテキストがコピーされるたびにイベントハンドラが呼び出されるようになる。
| ||
| MyClipboardViewerクラスを利用したWindowsフォーム・アプリケーションの例(上:C#、下:VB) |
ここではまず、フォームのコンストラクタでMyClipboardViewerクラスのインスタンスを生成し、次にイベントハンドラを登録する。例として、上記のイベントハンドラでは、フォームに配置したテキストボックスに、取得したクリップボードの内容をセットしている。
この例では、クリップボードにテキストがコピーされた場合だけ処理しているが、ほかにも画像がクリップボードにコピーされた場合の処理を追加するには、ClipboardEventArgsクラスに画像を保持するメンバを追加し、WndProcメソッド内で画像を取得するようにすればよい。![]()
| カテゴリ:Windowsフォーム 処理対象:クリップボード カテゴリ:クラス・ライブラリ 処理対象:Win32 API 使用ライブラリ:Clipboardクラス(System.Windows名前空間) 使用ライブラリ:NativeWindowクラス(System.Windows.Forms名前空間) 関連TIPS:クリップボードへデータを送るには? 関連TIPS:クリップボードからデータを受け取るには? |
|
||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


