Seite 1 von 2

Eventabfrage: Hintergrundbild geändert?

Verfasst: 09.09.2012 21:28
von Sebastian
Ich habe ein Programm geschrieben, das ein halbtransparentes Fenster simuliert (mit WindowedScreen), indem ein Screenshot vom Desktop eingezeichnet wird. Eine andere Möglichkeit für den WindowedScreen ist mir nicht eingefallen... Das ganze funktioniert, solange der Hintergrund (Desktop) sich nicht verändert. Viele habe bei Windows7 aber aktiviert, dass sich nach einer bestimmten Zeitspanne das Hintergrundbild verändert. Kann ich das Event (Hintergrundbild wurde gewechselt) irgendwie abfangen, damit ich weiß, dass das Fenster neu gezeichnet werden muss?

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 10.09.2012 18:09
von kapege
Hallo Sebastian,

probiers doch mal mit diesem PNG anstatt eines Screenshot:

Bild

dann dürfte dein Prob. doch erl. sein, falls keiner doch noch mit einer Event Lösung kommt.

gerne kann ich dir auch andere Glas-HG in jeder Grösse erstellen, auch farbig.

Gruss Peter

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 10.09.2012 19:54
von NicTheQuick
Das PNG bringt hier nichts, wenn er es in einem WindowedScreen macht.

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 10.09.2012 20:24
von Sebastian
Danke. Ich nutze ein transparentes PNG als Oberlay. Wie Nic sagte, löst dies das Problem nicht. Selbst wenn ich das PNG als ImageGadget verwende, so würde ich nur den Fensterhintergrund sehen, richtig?

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 10.09.2012 20:41
von BSP
Hallo Sebastian.
Ich komme z.Z. leider nicht dazu, Dir ein Beispiel zu schreiben.
Aber schau Dir mal die "Fingerprints" an.
In der PB- Hilfe unter "Cipher" zu finden.

- Bild in Speicher, Fingerprint von machen,
- Kurze Zeit später neues Bild machen, mit vorherigem Fingerprint vergleichen,
(in einer Schleife regelmäsig wiederholen),
Wenn Fingerprint1 <> Fingerprint2: Aktion auslösen.

Gruß: Bernd

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 10.09.2012 22:02
von Bisonte
zwar kein Event aber in der Registry steht z.B. der Pfad des aktuellen Wallpapers bei

HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper

den evt. alle paar min. abfragen...

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 11.09.2012 06:38
von Sebastian
Beides hört sich interessant an. Fingerprint vergleichen ist doch sicher rechenintensiv? Da erscheint es wohl einfacher, die Idee mit dem Auslesen der Registry umzusetzen. Wie kann ich diese Registry-Info auslesen? Ist dieses Verfahren sicher und eindeutig?

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 11.09.2012 07:59
von BSP
Hallo Sebastian.
Also; - ich habe mir ein kleines Prg zum Bilder sortieren geschrieben,
das mit Fingerprints doppelte Bilder findet.
Bei "normal" grossen Bildern ist das kein Problem.
Und Du machst das ja nicht mit jedem Schleifendurchlauf,
sondern Zeitabhängig, z.B. alle 10 Sek.

Code: Alles auswählen

If ElapsedMilliseconds()-zeit>10000
  ; Bild einlesen und Fingerprint2 erstellen
  if Fingerprint2<>fingerprint1
    ; mach was
    fingerprint1 = fingerprint2
  EndIf 
  zeit=ElapsedMilliseconds()
EndIf
Aber die Registry auslesen ist sicher schneller.
Dazu kann Dir Bisonte sicher mehr sagen.

Gruß: Bernd

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 11.09.2012 10:12
von NicTheQuick
Ich hab kein Windows, aber wie wäre es mit dieser Funktion: MSDN - SystemParametersInfo function
Zum Setzen des Hintergrundbildes habe ich folgende Funktion gefunden:

Code: Alles auswählen

private static readonly UInt32 SPI_SETDESKWALLPAPER = 0x14;
private static readonly UInt32 SPIF_UPDATEINIFILE = 0x01;
private static readonly UInt32 SPIF_SENDWININICHANGE = 0x02;

SystemParametersInfo(SPI_SETDESKWALLPAPER, 3, path, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE)

Re: Eventabfrage: Hintergrundbild geändert?

Verfasst: 12.09.2012 20:11
von Sebastian
Oh.. mit MSDN bin ich noch überhaupt nich in Kontakt getreten. Hat jemand vielleicht eine direkte Funktion für mich parat? Das wäre klasse!!