Imports System.Runtime.InteropServices Imports DigitalData.Modules.Windows Namespace ClipboardWatcher Public Class Watcher Inherits NativeWindow Implements IDisposable Public Event ClipboardChanged As EventHandler(Of IDataObject) Public Shared Singleton As New Watcher Private _Handle As IntPtr Private Sub New() MyBase.CreateHandle(New CreateParams) _Handle = NativeMethods.SetClipboardViewer(Handle) End Sub Protected Overrides Sub WndProc(ByRef m As Message) Select Case m.Msg Case NativeMethods.WM_DRAWCLIPBOARD Dim oData As IDataObject = Clipboard.GetDataObject RaiseEvent ClipboardChanged(Me, oData) End Select MyBase.WndProc(m) End Sub #Region "IDisposable Support" ' Für diese Klasse ist korrekte Ressourcenbereinigung besonders wichtig, da ' mit systemübergreifenden Ressourcen gearbeitet wird ' So ermitteln Sie überflüssige Aufrufe Private _DisposedValue As Boolean = False Protected Overridable Sub Dispose(ByVal pDisposing As Boolean) If Not _DisposedValue Then If pDisposing Then ' TODO: Verwaltete Ressourcen freigeben, wenn sie explizit ' aufgerufen werden End If MyBase.DestroyHandle() Dim H As IntPtr = NativeMethods.SetClipboardViewer(_Handle) End If _DisposedValue = True End Sub ' Dieser Code wird von Visual Basic hinzugefügt, um das Dispose-Muster ' richtig zu implementieren. Public Sub Dispose() Implements IDisposable.Dispose ' Sie sollten diesen Code nicht ändern, sondern stattdessen ihren ' Bereinigungscode oben in ' Dispose(ByVal disposing As Boolean) einfügen. Dispose(True) System.GC.SuppressFinalize(Me) End Sub Protected Overrides Sub Finalize() MyBase.Finalize() Dispose(False) End Sub #End Region End Class End Namespace