74 lines
2.6 KiB
VB.net
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
|