0

Windows API を使用して同じことを行うのが好きです。

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TextBox1.Text = System.Windows.Forms.Clipboard.GetText
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        System.Windows.Forms.Clipboard.SetText(TextBox1.Text)
    End Sub

私はここを見ました:http://www.pinvoke.net/default.aspx/user32/GetClipboardData.html しかし、それを使用する方法とテキストをクリップボードに設定する方法がよくわかりません。私を助けてくれる人はいますか?

4

2 に答える 2

2

これとかなり似ています:

結果をクリップボードにコピー

そして、質問にタグが付けられているため、VB.netバージョンに変換しました:

Public Class Form1
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    Public Shared Function OpenClipboard(ByVal hWndNewOwner As IntPtr) As Boolean
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    Public Shared Function CloseClipboard() As Boolean
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    Public Shared Function SetClipboardData(ByVal uFormat As UIntPtr, ByVal data As IntPtr) As Boolean
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        OpenClipboard(IntPtr.Zero)
        Dim yourString = "Hello World!"
        Dim ptr As String = Marshal.StringToHGlobalUni(yourString)
        SetClipboardData(13, ptr)
        CloseClipboard()

        Marshal.FreeHGlobal(ptr)
    End Sub
End Class
于 2014-04-07T20:00:29.427 に答える
1

問題のソース C# バージョンには、クラッシュを引き起こす可能性があるあいまいな方法でバグがありました。

問題が発生した場合は、元のトピックに関する私の回答へのリンクを、より堅牢な代替手段への参照とともに示します: SetClipboardData + StringToHGlobalUni は悪い組み合わせです。

于 2014-07-11T14:04:25.407 に答える