投稿者 wanta  (社会人) 投稿日時 2009/5/22 03:49:01
はじめまして。

2008を使用しています。

フォームにボタンを1つ置いて、クリックすると文字をクリップボード経由で
他のアプリに貼り付けを行っていますが、既にクリップボードにデータが
ある場合は一端変数に保存しておき、貼り付け後にまた戻しておくように
したいのですが、下記コードでテストすると、テキストデータの場合は
保存されるのに、それ以外(ファイル等)のデータの場合は、アプリを終了させると
クリップボードのデータが消えてしまいます。

クリップボードにデータを戻す際に
「My.Computer.Clipboard.SetDataObject(iData, True)」
とすると「引数が多すぎます」と出てしまいます。

なにか解決方法はあるでしょうか?
宜しくお願いします。


    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim AddStr As String = "aaa"

            If My.Computer.Clipboard.ContainsText() = True Then
                Dim tData As String = My.Computer.Clipboard.GetText

                My.Computer.Clipboard.SetText(AddStr)
                SendKeys.Send("%({TAB})")
                Sleep(100)
                SendKeys.Send("^(v)")
                My.Computer.Clipboard.SetText(tData)
            Else
                Dim iData As IDataObject = My.Computer.Clipboard.GetDataObject()

                My.Computer.Clipboard.SetText(AddStr)
                SendKeys.Send("%({TAB})")
                Sleep(100)
                SendKeys.Send("^(v)")
                My.Computer.Clipboard.SetDataObject(iData)
            End If
    End Sub