1.SetClipboardViewer
Imports System.Runtime.InteropServices
Public Class Form1
    Private hwndNextChain As IntPtr
    Public Sub New()
        InitializeComponent()
    End Sub
    Protected Overrides Sub OnHandleCreated(e As EventArgs)
        MyBase.OnHandleCreated(e)
        hwndNextChain = SetClipboardViewer(Me.Handle)
    End Sub
    Protected Overrides Sub OnHandleDestroyed(e As EventArgs)
        MyBase.OnHandleDestroyed(e)
        ChangeClipboardChain(Me.Handle, hwndNextChain)
    End Sub
    Protected Overrides Sub WndProc(ByRef m As Message)
        Select Case m.Msg
            Case WM_DRAWCLIPBOARD
                If hwndNextChain <> IntPtr.Zero Then
                    SendMessage(hwndNextChain, m.Msg, m.WParam, m.LParam)
                End If
                If Clipboard.ContainsText() Then
                    Dim clipboardText As String = Clipboard.GetText()
                    TextBox1.AppendText(clipboardText & vbNewLine & vbNewLine)
                    Debug.WriteLine($"{Now} Change Clipboard")
                End If
            Case WM_CHANGECBCHAIN
                If m.WParam = hwndNextChain Then
                    hwndNextChain = m.LParam
                ElseIf hwndNextChain <> IntPtr.Zero Then
                    SendMessage(hwndNextChain, m.Msg, m.WParam, m.LParam)
                End If
        End Select
        MyBase.WndProc(m)
    End Sub
    <DllImport("User32.Dll")>
    Private Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As IntPtr, lParam As IntPtr) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True)>
    Private Shared Function SetClipboardViewer(hWndNewViewer As IntPtr) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True)>
    Private Shared Function ChangeClipboardChain(hWndRemove As IntPtr, hWndNewNext As IntPtr) As Boolean
    End Function
    Private Const WM_DRAWCLIPBOARD As Integer = &H308
    Private Const WM_CHANGECBCHAIN As Integer = &HD
End Class
2.AddClipboardFormatListener
Imports System.Runtime.InteropServices
Public Class Form2
    Protected Overrides Sub OnHandleCreated(e As EventArgs)
        MyBase.OnHandleCreated(e)
        AddClipboardFormatListener(Me.Handle)
    End Sub
    Protected Overrides Sub OnHandleDestroyed(e As EventArgs)
        MyBase.OnHandleDestroyed(e)
        RemoveClipboardFormatListener(Me.Handle)
    End Sub
    Protected Overrides Sub WndProc(ByRef m As Message)
        Select Case m.Msg
            Case WM_CLIPBOARDUPDATE
                If Clipboard.ContainsText() Then
                    Dim clipboardText As String = Clipboard.GetText()
                    TextBox1.AppendText(clipboardText & vbNewLine & vbNewLine)
                    Debug.WriteLine($"{Now} Change Clipboard")
                End If
        End Select
        MyBase.WndProc(m)
    End Sub
    <DllImport("user32.dll", SetLastError:=True)>
    Private Shared Function AddClipboardFormatListener(hWndNewViewer As IntPtr) As Boolean
    End Function
    <DllImport("user32.dll", SetLastError:=True)>
    Private Shared Function RemoveClipboardFormatListener(hWndNewViewer As IntPtr) As Boolean
    End Function
    Private WM_CLIPBOARDUPDATE As Integer = &H31D
End Class