C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 82 を表示中)
■48335 / )  クリップボードのコピー・貼り付けが完了するタイミングは?
□投稿者/ ダッチ (8回)-(2010/04/02(Fri) 17:12:31)

分類:[.NET 全般] 

Windows XP 以降 32bit, 64bit
.NET Framework 3.5
VB or C#
Windows Forms アプリケーション


こんにちは、ダッチです。

アクティブ ウィンドウに対して貼り付けを
数回に分けてやりたいと思っています。

コード------------------
Clipboard.SetText("a")
SendPasteKey()
Clipboard.SetText("b")
SendPasteKey()
' SendPasteKey メソッドは SendInput 関数を使用して Ctrl+V を送信しています。
' このコードは STA のサブスレッド上で実行されます。
------------------------

例えばメモ帳をアクティブにしてから上記のコードを実行すると、
"bb" と貼りついたり、"b" と貼りついたりして、
期待した動作 "ab" になりません。

おそらく貼り付け処理が完了する前に Clipboard.SetText が動いてしまっているためだと思います。
そこで Ctrl+V 送信後にクリップボードの貼り付けが完了したのを待ってから
Clipboard.SetText を呼べばいいと思うのですが、
どのようにしたら、貼り付けが完了したのを知ることができるのかわかりません。

Ctrl+V を送信後に WM_APP を SendMessage で投げて、
制御が返った時は、まだ貼り付けが始まってもいませんでした。

GetOpenClipboardWindow 関数でクリップボードが使用されていないか確認しようと思っても、
Ctrl+V を送信後すぐには、クリップボードが使用されていないで、
次の Clipboard.SetText を呼び出したときに例外 (秀丸に対しての時) が発生したりもしました。

Ctrl+V を送信後に Thread.Sleep メソッドで待つと "ab" と期待した動作になります。
が、どれだけ待てばいいのかは状況により変わるため確実な方法ではありません。


他のアプリケーションに対してコピー・貼り付けが完了したのを知るには
どのようにすればいいのでしょうか?

よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -