4

次のコードを使用して、テキストをクリップボードにコピーしています。

System.Windows.Forms.SendKeys.SendWait("^c");

それから私は使用します

Clipboard.GetText()

クリップボードからテキストを取得します。正常に動作しますが、クリップボードをループで操作し、次にコピーされたテキストで上書きする必要のあるコンテンツを取得すると、遅延しているように見えます。Thread.sleepを置くと、正常に動作します。クリップボードから適切なコンテンツを遅滞なくループで高速コピーして取得するにはどうすればよいですか?

4

2 に答える 2

3

ループでクリップボードを更新して、データがすぐに利用可能になる (そしてアプリからアクセスできる) ことを期待することは絶対にできません。キーストロークを送信しているアプリケーションは独自のプロセスで実行されており、ウィンドウはマルチプロセッシング、マルチスレッドなどです。したがって、他のアプリが取得する前に、クリップボードが更新されるのを探しています。コピーするチャンス。
さらに、システム上で他のプログラムが実行され、クリップボードの更新を監視している可能性があるため (クリップボード ビューアー)、クリップボードからデータを取得しようとすると、それらのプログラムと衝突することになります。
なぜあなたがやっていることをやろうとしているのかはわかりませんが、常にうまくいくとは限らないことに注意してください. 場合によっては動作させることができるかもしれませんが、すべての場合ではありません。これが自分で使用するための教育的な演習でない限り、このアプローチを放棄する必要があります。

そして、この主題に関するこの引用を読んでください:

「プログラムは、ユーザーからの明示的な指示なしに、クリップボードからデータを転送するべきではありません。」<br> — Charles Petzold、Programming Windows 3.1、Microsoft Press、1992 年

于 2013-03-15T20:34:05.860 に答える