Eventabfrage: Hintergrundbild geändert?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Eventabfrage: Hintergrundbild geändert?

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
kapege
Beiträge: 39
Registriert: 28.12.2004 17:35
Computerausstattung: AMD Ryzen 7 3700X 8-Core Processor 3.60 GHz
Windows 10 Pro 64bit
14 GB Ram

PureBasic 6.00 LTS (Windows - x64)
Wohnort: Trostberg

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag von NicTheQuick »

Das PNG bringt hier nichts, wenn er es in einem WindowedScreen macht.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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
PB 5.31 (x86) & (x64) Win10
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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
PB 5.31 (x86) & (x64) Win10
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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)
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Eventabfrage: Hintergrundbild geändert?

Beitrag 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!!
(Win 11 64-bit, PB 6.04 und 6.10)
Antworten