Seite 1 von 1

Veränderung im Clipboard überprüfen

Verfasst: 05.12.2011 15:10
von Milten
Hallo,
ich suche nach einer (möglichst verständlichen und leistungsparenden) Methode, zu überprüfen, ob sich der Inhalt der Zwischenablage geändert hat. Im Moment benutze ich eine Schleife die alle paar Sekunden überprüft, ob der text im clipboard dem vorher festgestellten noch entspricht, aber das klappt nicht besonders gut (Es dauert eben immer etwas bis die Änderung erkannt wird) und der PC läuft auch manchmal recht langsam dabei. Kennt jemand was besseres?

Danke
Milten

Re: Veränderung im Clipboard überprüfen

Verfasst: 05.12.2011 15:23
von gnasen
Hmm ich habe es selber noch nicht ausprobiert, aber hier ist zumindest bzgl Windows (ab vista) die vorgesehene Lösung:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
für ältere Windows versionen:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Es gibt hier aber ein paar sehr WinAPI erfahrene Leute im Forum, die das sicher schnell zusammenschustern könnten, wenn man sie mal lieb drum bittet ;)

Re: Veränderung im Clipboard überprüfen

Verfasst: 05.12.2011 15:26
von Kiffi

Re: Veränderung im Clipboard überprüfen

Verfasst: 06.12.2011 15:02
von Milten
Hallo Kiffi,
die Links aus dem anderen Faden habe ich gestern vor dem erstellen dieses Fadens schon gesehen, aber das ist ziemlich kompliziert und ich verstehe es auch nicht. Zumal es, wenn ich die Infos von der Microsoft-HP richtig verstehe, dann nur auf Windows Vista und aufwärts funktionieren wird? Gibt es nicht noch einen anderen Weg?

Gruß & Danke für eure Links
Milten

Re: Veränderung im Clipboard überprüfen

Verfasst: 06.12.2011 15:46
von gnasen

Code: Alles auswählen

EnableExplicit

Define clipState.i = GetClipboardSequenceNumber_()

Repeat
  If clipState <> GetClipboardSequenceNumber_()
    clipState = GetClipboardSequenceNumber_()
    Debug "changed"
  EndIf
  Delay(1)
ForEver
MSDN hat geschrieben:Minimum supported client = Windows 2000 Professional

Re: Veränderung im Clipboard überprüfen

Verfasst: 06.12.2011 16:00
von ts-soft
@gnasen
:allright: Der ist wirklich simpel

@Milten
Die Überprüfung solltest Du dann aber einem TimerEvent zuordnen, wenn Du eine GUI hast.

Re: Veränderung im Clipboard überprüfen

Verfasst: 06.12.2011 16:39
von Kiffi
gnasen hat geschrieben:

Code: Alles auswählen

Debug "changed"
nicht ganz. ;-) Wenn sich die GetClipboardSequenceNumber
verändert, ist 'lediglich' was in's Clipboard kopiert worden.
Der Inhalt muss sich dadurch nicht zwingend ändern. Wenn
ich drölf Mal den selben Text kopiere, ändert sich die
GetClipboardSequenceNumber, aber nicht der Content.
Destawegen müsste dann noch der Inhalt verglichen werden.

Trotzdem: Danke für den Tipp! :allright:

Grüße ... Kiffi

// Edit:

Code: Alles auswählen

EnableExplicit

#Window = 0
#ClipboardContentList = 0
#ClipboardTimer = 0

Procedure CheckClipboard()
  
  Static ClipboardSequenceNumber = -1
  Static ClipboardContent.s
  
  If ClipboardSequenceNumber = -1
    
    ClipboardSequenceNumber = GetClipboardSequenceNumber_()
    
  Else
    
    If ClipboardSequenceNumber <> GetClipboardSequenceNumber_()
      
      ClipboardSequenceNumber = GetClipboardSequenceNumber_()
      
      If IsClipboardFormatAvailable_(#CF_TEXT) <> 0
        
        If ClipboardContent <> GetClipboardText()
          ClipboardContent = GetClipboardText()
          AddGadgetItem(#ClipboardContentList, -1, "Changed: " + ClipboardContent)
        EndIf
        
      Else

        AddGadgetItem(#ClipboardContentList, -1, "Irgendwas anderes wurde ins Clipboard kopiert")
        
      EndIf 
        
    EndIf
    
  EndIf
  
EndProcedure

Define WWE

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 600, 400, "ClipBoard-Watcher")

ListViewGadget(#ClipboardContentList, 0, 0, WindowWidth(#Window), WindowHeight(#Window))

AddWindowTimer(#Window, #ClipboardTimer, 500)

Repeat
  
  WWE = WaitWindowEvent()
  
  Select WWE
      
    Case #PB_Event_Timer
      
      If EventTimer()=#ClipboardTimer
        
        CheckClipboard()
        
      EndIf
      
  EndSelect
  
Until WWE = #PB_Event_CloseWindow

Re: Veränderung im Clipboard überprüfen

Verfasst: 07.12.2011 18:36
von Milten
Wow, danke Kiffi und gnasen, das ist ziemlich gut & simpel. :allright: