クリップボードの繰り返し貼り付けが出来ない への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 NORI  (社会人) 投稿日時 2010/6/3 19:50:09
教えていただいたSendKeys.SendWaitメソッドで解決いたしました。
ありがとうございました。
投稿者 あにす  (社会人) 投稿日時 2010/6/3 04:25:09
SendKeys.SendWaitメソッドを使用して下さい。
SendKeyメソッドはキーを送信したらすぐに次の動作に移ってしまう為、送信先のアプリケーションがキーを処理する前にTextBox2.Textがクリップボードにセットされてしまうようです。
SendWaitメソッドは送信先のアプリケーションを待機するので問題なく動くと思います。
投稿者 NORI  (社会人) 投稿日時 2010/6/3 00:02:28
はじめまして、初心者ですがよろしくお願いします。

テキストボックスの中身をクリップボードにコピーして、
メモ帳などの別ウィンドウに貼り付けようとしています。

以下の内容で実施すると、1回目の貼り付けデータが
2回目のTextBox2の内容になってしまいます。

何が良くないのでしょうか。

Public Class Form1
    Private Const WS_EX_NOACTIVATE As Integer = &H8000000
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim p As CreateParams = MyBase.CreateParams
            If Not MyBase.DesignMode Then
                p.ExStyle = p.ExStyle Or (WS_EX_NOACTIVATE)
            End If
            Return p
        End Get
    End Property

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Clipboard.SetDataObject(TextBox1.Text)
        SendKeys.Send("^v")
        SendKeys.Send("{Enter}") 'ここで、なぜかTextBox2の値が貼り付けられる。
        Clipboard.SetDataObject(TextBox2.Text)
        SendKeys.Send("^v")
        SendKeys.Send("{Enter}")
    End Sub
End Class