[Windows] Nicht aktive App soll QClipboard change erhalten

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

Guten Morgen!

Unter Linux habe ich ein Tool geschrieben, das mit einer Instanz von QClipboard die Zwischenablage überwacht und bei jeder Änderung darin ausgeführt wird:

Code: Alles auswählen

self.connect(self.clipboard, Qt.SIGNAL("changed(QClipboard::Mode)"), 
             self.clipboard_changed)
Das funktioniert wunderbar. Egal wo ich unter Linux etwas in die Zwischenablage einfüge, das Programm bekommt das Signal und kann entsprechend reagieren. Auch dann wenn das Programm nicht im Vordergrund läuft.

Unter Windows funktioniert das leider nicht. Hier kann ich so lange etwas in die Zwischenablage einfügen wie ich will, das Programm bekommt das Signal über die Änderung erst, wenn das Fenster wieder aktiv wird.
Wenn ich also im Notepad etwas kopiere, dann bliebt das Programm im Hintergrund ruhig, wenn ich dann aber eines der Fenster der app anklicke wird das Signal entsprechend abgefeuert.

Ich würde aber gerne im Hintergrund die Zwischenablage überwachen und immer über jeden change informiert werden. Auch unter Windows.

Nach der Dokumentation hätte ich ja eigentlich gedacht, dass es umgekehrt ist:
Windows and Mac OS X does not have the concept of ownership; the clipboard is a fully global resource so all applications are notified of changes.
(von hier)

Hat jemand vielleicht einen Tipp für mich, wie ich das unter Windows trotzdem realisieren kann?

Danke!
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

Ich habe das Problem jetzt scheinbar gelöst.
Keine Ahnung woran das liegt, aber es scheint dann zu funktionieren, wenn mein Programm einmalig auf das Clipboard zugegriffen hat.
Direkt nach dem anlegen des Objektes gibt es daher jetzt ein:

Code: Alles auswählen

self.clipboard.clear(mode=self.clipboard.Clipboard )
Danach lösen auch Veränderungen außerhalb des Programms das Signal aus.
Antworten