Imports Microsoft.VisualBasic.ControlChars Imports System.Runtime.InteropServices Imports DD_LIB_Standards Public Class ClipboardWatcher : Inherits NativeWindow : Implements IDisposable _ Private Shared Function SetClipboardViewer(ByVal hWnd As IntPtr) As IntPtr End Function Public Event Changed As EventHandler Private _hview As IntPtr 'nur eine globale Instanz zulassen Public Shared Singleton As New ClipboardWatcher Private Sub New() MyBase.CreateHandle(New CreateParams) _hview = SetClipboardViewer(MyBase.Handle) End Sub Protected Overrides Sub WndProc(ByRef m As Message) Const WM_DRAWCLIPBOARD As Integer = &H308 Select Case m.Msg Case WM_DRAWCLIPBOARD clsWINDOWSApi.Get_ForegroundWindow_Info() 'Dim CapTxt As String = clsWINDOWSApi.GetCaption() If IsNothing(PROC_Name) Then Exit Sub If PROC_Name.StartsWith("DD_Clipboard_Watcher") Then Exit Sub 'Logger.Debug(String.Format(" >>{0} - Clipboard ChangedEvent for process '{1}' fired!", Now.ToString, PROC_Name), False) ' If CapTxt.ToUpper.StartsWith("DD") Then Exit Sub RaiseEvent Changed(Me, EventArgs.Empty) 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 disposing As Boolean) If Not Me.disposedValue Then If disposing Then ' TODO: Verwaltete Ressourcen freigeben, wenn sie explizit ' aufgerufen werden End If MyBase.DestroyHandle() Dim H As IntPtr = SetClipboardViewer(_hview) End If Me.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) GC.SuppressFinalize(Me) End Sub Protected Overrides Sub Finalize() MyBase.Finalize() Dispose(False) End Sub #End Region End Class