Veränderung im Clipboard überprüfen

Anfängerfragen zum Programmieren mit PureBasic.
Milten
Beiträge: 10
Registriert: 27.07.2006 18:01

Veränderung im Clipboard überprüfen

Beitrag 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
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: Veränderung im Clipboard überprüfen

Beitrag 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 ;)
pb 4.51
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Veränderung im Clipboard überprüfen

Beitrag von Kiffi »

a²+b²=mc²
Milten
Beiträge: 10
Registriert: 27.07.2006 18:01

Re: Veränderung im Clipboard überprüfen

Beitrag 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
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: Veränderung im Clipboard überprüfen

Beitrag 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
pb 4.51
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Veränderung im Clipboard überprüfen

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Veränderung im Clipboard überprüfen

Beitrag 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
a²+b²=mc²
Milten
Beiträge: 10
Registriert: 27.07.2006 18:01

Re: Veränderung im Clipboard überprüfen

Beitrag von Milten »

Wow, danke Kiffi und gnasen, das ist ziemlich gut & simpel. :allright:
Antworten