Zwischenablage überwachen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Omikron.

    Zwischenablage überwachen

    moin, ich wollt ein Programm schreiben, das die Zwischenablage überwacht und immer die letzen 10 Ablagen speichert und ausgeben lässt.
    Ich weiß nur nicht wie ich die za überwachen kann. Kann man sich da irgendwie ein Delegator oder etwas ähnliches machen in dem sinn davon, dass die Prozedur gestartet wird, sobald etwas in anderes in der za ist?
    sowas hab ich mir auch schon überlegt, aber mit timer fänd ich das n bischen zu speicherintensiv für son kleines programm. Musst ja denken: das muss dann ständig überprüfen ob da was neues drin is und wenn das ein bild is, dann is das nich so gut...
    deswegen wollt ich irgenwie n ereignis von der za, aber ich glaub ja dass das nich geht...
    hallo omnikron,

    warum speicherintensiv ?
    ein event willst du ? hier bitte
    die klasse

    VB.NET-Quellcode

    1. Public Class Class1
    2. Private WithEvents t As New Timer
    3. Public Event ClipBoardText(ByVal msg As String)
    4. Public Sub New()
    5. t.Interval = 1000
    6. t.Start()
    7. End Sub
    8. Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick
    9. If My.Computer.Clipboard.ContainsText = True Then
    10. RaiseEvent ClipBoardText(My.Computer.Clipboard.GetText)
    11. End If
    12. End Sub
    13. End Class

    die form zum testen der klasse

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents c1 As New Class1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. My.Computer.Clipboard.Clear()
    5. End Sub
    6. Private Sub c1_ClipBoardFull(ByVal msg As String) Handles c1.ClipBoardText
    7. MessageBox.Show(msg)
    8. End Sub
    9. End Class

    EDIT: kleine codeänderung

    gruss

    mikeb69
    ne is nich ganz wie ich mir das vorstelle, zumindestens soweit ichs kapier^^
    der code würde mir ja eig immer nur mitteilen bzw gleich kopieren wenn in der za ein text drin is. Das is mir aber relativ egal, weil ich ein event bräuchte, das aktiviert wird, sobald sich der Inhalt der Zwischenablage ändert... (ich will ja nich nur text speichern...)
    aber trotzdem danke für die bemühungen ;D
    Dann legst du dir halt eine Variable an wo der letzte Inhalt gespeichert wird und das Event wird nur ausgelöst wenn der Inhalt sich geändert hat.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Machs doch etwas einfacher.

    Erstell nen Timer im Designer (reimt sich :P) das Intervall auf 1000 (jede Sekunde)
    Ich würde es mit einer ArrayList machen.

    VB.NET-Quellcode

    1. Dim x as New ArrayList
    2. Dim alt as String = ""
    3. Public Sub Timer1_Tick() handles Timer1.tick
    4. If Alt = My.Computer.ClipBoard.GetText = false then
    5. x.add(My.Computer.Clipboard.Gettext
    6. alt = My.Computer.ClipBoard.Gettext
    7. End If
    8. End Sub


    Ach ja, den Timer vorher starten bzw. enabled = True setzen ;D

    Das ganze kannst du dann ja ausgeben via ForEach schleife.
    hallo,

    @omnikron
    der code würde mir ja eig immer nur mitteilen bzw gleich kopieren wenn in der za ein text drin is. Das is mir aber relativ egal, weil ich ein event bräuchte, das aktiviert wird, sobald sich der Inhalt der Zwischenablage ändert...

    soll ich dir das schreiben oder schaffst du es selbst - die vorlage dazu hast du ja

    @raumschiffbetr.
    und was ist daran einfacher ?
    und wo hast du das in deinem code ?

    omnikron schrieb:

    weil ich ein event bräuchte


    gruss

    mikeb69
    ok bin zufrieden, wollt ja eig nur wiss (hät ich vielleicht besser schreiben sollen), obs geht dass die za mir n signal schickt, das mein event auslöst, weil das einfach viel besser is. Mit Timer häts ichs dann auch noch irgendwie geschafft, aber jetz hab ich ja den code... na dann, dankö
    (stimmt, is nich wirklich einfach, nur das der eine code halt in ner klasse steht....)

    /edit: rechtschreibfehler, der zu Irritationen geführt hätte ausgebessert ;P