Digital Data - Marlon Schreiber 420d9fedf7 MSNamenÄndern
2017-12-14 13:54:22 +01:00

74 lines
2.6 KiB
VB.net

Imports Microsoft.VisualBasic.ControlChars
Imports System.Runtime.InteropServices
Imports DD_LIB_Standards
Public Class ClipboardWatcher : Inherits NativeWindow : Implements IDisposable
<DllImport("user32", EntryPoint:="SetClipboardViewer")> _
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
If LogErrorsOnly = False Then clsLogger.Add(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