Announcement

Collapse
No announcement yet.

Wie funktioniert das WM-CLIPBOARD?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie funktioniert das WM-CLIPBOARD?

    Hi!
    Ich hab mal irgendwo was gelesen, das immer wenn sich der Inhalt im Clipboard verändert, ein WM-CLIPBOARD-SIGNAL ausgelöst wird.

    Wie funktioniert das, wie fange ich das Signal ab und hat jemand dazu ein Beispiel?


    Wäre sehr dankbar für Hilfe,
    Gruß Tobi
    Ich programmiere mit Vb 2008!

  • #2
    Für C# gibts es Artikel:
    Somit funktioniert das auch mit VB.net. Der Code kann nötigenfalls mit dem Online Code-Converter übersetzt werden.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Ich entwickle mit VB 2008.
      Ich programmiere mit Vb 2008!

      Comment


      • #4
        Mensch, dass bringt sich irgendwie nichts...
        Ich weiß nicht wie ich dass
        Code:
        Imports System.Windows.Forms
        Public Class ClipBoardMonitor
            Inherits System.Windows.Forms.Form
        
        #Region " Definitions "
            'Constants for API Calls...
            Private Const WM_DRAWCLIPBOARD As Integer = &H308
            Private Const WM_CHANGECBCHAIN As Integer = &H30D
        
            'Handle for next clipboard viewer...
            Private mNextClipBoardViewerHWnd As IntPtr
        
            'API declarations...
            Declare Auto Function SetClipboardViewer Lib "user32" (ByVal HWnd As IntPtr) As IntPtr
            Declare Auto Function ChangeClipboardChain Lib "user32" (ByVal HWnd As IntPtr, ByVal HWndNext As IntPtr) As Boolean
            Declare Auto Function SendMessage Lib "User32" (ByVal HWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Long
        #End Region
        
        #Region " Contructor "
            Public Sub New()
                'To register this form as a clipboard viewer...
                mNextClipBoardViewerHWnd = SetClipboardViewer(Me.Handle)
            End Sub
        #End Region
        
        #Region " Message Process "
            'Override WndProc to get messages...
            Protected Overrides Sub WndProc(ByRef m As Message)
                Select Case m.Msg
                    Case Is = WM_DRAWCLIPBOARD 'The clipboard has changed...
                        '##########################################################################
                        ' Process Clipboard Here :)........................
                        '##########################################################################
                        SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)
        
                    Case Is = WM_CHANGECBCHAIN 'Another clipboard viewer has removed itself...
                        If m.WParam = CType(mNextClipBoardViewerHWnd, IntPtr) Then
                            mNextClipBoardViewerHWnd = m.LParam
                        Else
                            SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)
                        End If
                End Select
        
                MyBase.WndProc(m)
            End Sub
        #End Region
        
        #Region " Dispose "
            'Form overrides dispose to clean up...
            Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
                If disposing Then
                    'Set the next clipboard viewer back to the original... 
                    ChangeClipboardChain(Me.Handle, mNextClipBoardViewerHWnd)
                    MyBase.Dispose(disposing)
                End If
            End Sub
        #End Region
        
        End Class
        in mein Programm einbauen soll.
        Kann mir hier jemand helfen?
        Ich programmiere mit Vb 2008!

        Comment


        • #5
          Ich entwickle mit VB 2008.
          Ich deshalb auch die Anmerkung:
          Somit funktioniert das auch mit VB.net. Der Code kann nötigenfalls mit dem Online Code-Converter übersetzt werden.
          Aber das ist gar nicht nötig denn wenn du die verlinkten Artikel gelesen hättest dann hättest du auch
          VB.NET and C# versions provided
          gesehen (in welchen Link das ist darfst du selber rausfinden: Tipp es ist der 11. Link )

          Wie das im Programm eingebaut wird ist in jedem Artikel beschrieben und außerdem sind das Grundlagen (wie verwende ich eine Klasse?).


          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            ok ,


            außerdem ist das alles komplett auf english
            und ich kann english nur ein bisschen

            Gruß
            Tobi
            Ich programmiere mit Vb 2008!

            Comment


            • #7
              und ich kann english nur ein bisschen
              Das ist beim Programmieren halt so dass Englisch die Hauptsprache ist.

              Soll ich dir die Seiten übersetzen? Oder was willst du
              Du kannst es dir ja mit Google übersetzen lassen.


              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                ich find nur die wörter auf der seite so kompliziert
                Ich programmiere mit Vb 2008!

                Comment


                • #9
                  Jetzt bin ich wieder beim gleichen Problem:
                  Wie baue ich das in meinem Programm ein????????????
                  Code:
                  Imports System.Windows.Forms
                  Public Class ClipBoardMonitor
                      Inherits System.Windows.Forms.Form
                  
                  #Region " Definitions "
                      'Constants for API Calls...
                      Private Const WM_DRAWCLIPBOARD As Integer = &H308
                      Private Const WM_CHANGECBCHAIN As Integer = &H30D
                  
                      'Handle for next clipboard viewer...
                      Private mNextClipBoardViewerHWnd As IntPtr
                  
                      'API declarations...
                      Declare Auto Function SetClipboardViewer Lib "user32" (ByVal HWnd As IntPtr) As IntPtr
                      Declare Auto Function ChangeClipboardChain Lib "user32" (ByVal HWnd As IntPtr, ByVal HWndNext As IntPtr) As Boolean
                      Declare Auto Function SendMessage Lib "User32" (ByVal HWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Long
                  #End Region
                  
                  #Region " Contructor "
                      Public Sub New()
                          'To register this form as a clipboard viewer...
                          mNextClipBoardViewerHWnd = SetClipboardViewer(Me.Handle)
                      End Sub
                  #End Region
                  
                  #Region " Message Process "
                      'Override WndProc to get messages...
                      Protected Overrides Sub WndProc(ByRef m As Message)
                          Select Case m.Msg
                              Case Is = WM_DRAWCLIPBOARD 'The clipboard has changed...
                                  '##########################################################################
                                  ' Process Clipboard Here :)........................
                                  '##########################################################################
                                  SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)
                  
                              Case Is = WM_CHANGECBCHAIN 'Another clipboard viewer has removed itself...
                                  If m.WParam = CType(mNextClipBoardViewerHWnd, IntPtr) Then
                                      mNextClipBoardViewerHWnd = m.LParam
                                  Else
                                      SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)
                                  End If
                          End Select
                  
                          MyBase.WndProc(m)
                      End Sub
                  #End Region
                  
                  #Region " Dispose "
                      'Form overrides dispose to clean up...
                      Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
                          If disposing Then
                              'Set the next clipboard viewer back to the original... 
                              ChangeClipboardChain(Me.Handle, mNextClipBoardViewerHWnd)
                              MyBase.Dispose(disposing)
                          End If
                      End Sub
                  #End Region
                  
                  End Class
                  Ich programmiere mit Vb 2008!

                  Comment

                  Working...
                  X