9

私が書いている小さなユーティリティ(.NET、C#)の場合、クリップボードのコピー操作とクリップボードの貼り付け操作を監視したいと思います。

私の考えは、任意のアプリケーションに貼り付けるときに自分のデータを提供することです。

コピー操作の監視は、クリップボードビューアを使用して簡単に行うことができます。

私にとってはるかに進んでいるように見えるのは、「クリップボードペーストプロバイダー」を作成することです。

  • アプリケーションの「利用可能なフォーマット」クエリへの回答。
  • アプリケーションの貼り付け操作にデータを提供します。

私はこの投稿この投稿を見つけましたが、どれも本当に私を助けていないようです。

私が推測するのは、どういうわけか現在のクリップボードを模倣/ハイジャックする必要があるということです。

質問:

貼り付け操作の観点からクリップボードを「ラップ」して、独自の「クリップボードプロキシ」を提供することは可能ですか?

4

2 に答える 2

12

WinAPI の「遅延レンダリング」を調べてください。この手法では、null ハンドルを使用してクリップボードをロードし、貼り付け時に Windows から WM_RENDERFORMAT メッセージで通知されます。これが、Excel のようなアプリが 25 の異なる形式を「コピー」する方法です。それらすべてを実際にコピーするわけではありません。実際には、TEXT などの一般的なものをいくつか生成しますが、Bitmap、Html、WKS などの他のものを「アドバタイズ」し、ターゲット アプリケーションが貼り付けたいものを確認するのを待つことを選択します。
これを考慮してください。Excel で 5000 個のセルを選択してコピーすると、クリップボードはすぐに更新されます。ここで Windows ペイントに貼り付けると、Excel が巨大なビットマップをレンダリングしようとすると、突然システムがクロールします。古いバージョンは通常、使用可能なメモリをすべて使用してページファイルを食べた後にクラッシュします。ただし、これは Windows 3.1 の時代にさかのぼります。最近のバージョンでは、「ビットマップが大きすぎます」または「メモリが不足しています」というメッセージが表示されます。警告: 遅延レンダリングは、リモート デスクトップ、VMWare、Office クリップボード、自分の ClipMate など、クリップボードを監視し、データをアプリ自体に自動貼り付けするアプリによって時期尚早にトリガーされます。一部のクリップボード監視プログラムは、CF_Clipboard_Viewer_Ignore フラグを使用してクリップボードの更新を無視するように指示でき ます。

于 2010-03-13T03:40:09.820 に答える
11

Windows フックを使用して、クリップボード フックをフックする必要があります。Windows フックは、発生しているグローバル イベントをインターセプトし、メッセージを置換またはインターセプトするための独自のフック プロシージャを提供する方法です。フックする方法を説明しているCodeProjectのこちらをご覧ください。これは、コピー/貼り付け機能をリッスンするクリップボード ヘルパーです。これは、それを行うクリップボードスパイです。クリップボード フックを実装する別の記事を次に示します。

于 2010-02-19T17:51:56.157 に答える