Question de couleur du fond d'écran du bureau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Question de couleur du fond d'écran du bureau

Message par cage »

Bonsoir a tous,

J'ai une appli qui tourne sur mon PC genre WatchDog (chien de garde) et je voudrais que lorsqu'une alerte important a mes yeux se produit, la couleur de fond de l'écran du bureau change.

Apparemment, PB ne sait pas faire nativement, mais avec l'aide d'une API, peut-être.

Avez vous une idée de comment je pourrais arriver a mes fin.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de couleur du fond d'écran du bureau

Message par cage »

Bonsoir,

Je commence a me répondre:

La procédure GetSysColor_(#COLOR_DESKTOP) fonctionne comme attendue et retourne bien la couleur de fond du bureau.
Cette valeur est a conserver pour pouvoir remettre la couleur de fond du bureau a sa valeur initiale.

La moitié du chemin est parcourue, reste a changer la couleur de fond du bureau.

C'est là que ça coince, la procédure SetSysColors_(#window,#COLOR_BACKGROUND,RGB(0,0,0)) ne semble pas fonctionner comme je le pensais.

Il me manque peut-être une commande pour rafraichir (actualiser) l'écran.

Quelqu'un aurait-il une idée ?

Voici un exemple de mes recherches:

Code : Tout sélectionner

EnableExplicit
EnableDebugger

#window =20 ; il faut bien choisir une valeur, alors 20, c'est parfait
#screen1=0  ; valeur supposée
#screen2=1  ; valeur supposée

Define desktop,couleur,Event

desktop=GetDesktopWindow_()          : Debug "desktop="+desktop+" / $"+Hex(desktop)

couleur=GetSysColor_(#COLOR_DESKTOP) : Debug "couleur="+couleur+" / $"+Hex(couleur)

Debug "couleur=RGB ("+Red(couleur)+","+Green(couleur)+","+Blue(couleur)+")"
Debug "couleur=RGBA("+Red(couleur)+","+Green(couleur)+","+Blue(couleur)+","+Alpha(couleur)+")"

If OpenWindow(#window,100,100,600,400,"Window")
  ; on vérifie que la couleur de la fenêtre est identique a la couleur de fond du bureau
  ; la vérification est visuelle
  SetWindowColor(#window,couleur)
  
  ; les 2 commandes suivantes retournent 0, soit une erreur est survenu.
  ; donc la commande ne s'applique pas a la fénêtre en cours
  Debug "test avec #window ="+#window
  Debug SetSysColors_(#window,#COLOR_BACKGROUND,RGB(0,0,0))
  Debug SetSysColors_(#window,#COLOR_BACKGROUND,RGBA(0,0,0,0))
  
  ; les 2 commandes suivantes retournent 1, soit la commande c'est bien dérolée.
  ; on peut penser que la valeur 0 représente le premier bureau, la valeur 1 le second burea,...
  ; je n'ai qu'un écran disponible
  Debug "test avec #screen1 = "+#screen1
  Debug SetSysColors_(#screen1,#COLOR_BACKGROUND,RGB(0,0,0))
  Debug SetSysColors_(#screen1,#COLOR_BACKGROUND,RGBA(0,0,0,0))
  
  ; les 2 commandes suivantes retournent 0, soit une erreur est survenu.
  Debug "test avec #screen2 = "+#screen2
  Debug SetSysColors_(#screen2,#COLOR_BACKGROUND,RGB(0,0,0))
  Debug SetSysColors_(#screen2,#COLOR_BACKGROUND,RGBA(0,0,0,0))
  
  Repeat
    Event=WaitWindowEvent(50)
  Until Event=#PB_Event_CloseWindow
EndIf
End
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

Re: Question de couleur du fond d'écran du bureau

Message par Mindphazer »

Une petite recherche sur le forum anglais :
https://www.purebasic.fr/english/viewto ... fb#p507546
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de couleur du fond d'écran du bureau

Message par cage »

Bonjour,

Je n'avais pas prêté attention a l'histoire des pointers. Méa culpa.

Pourtant, la définition est claire.
BOOL WINAPI SetSysColors(

int cElements, // number of elements to change
CONST INT *lpaElements, // address of array of elements
CONST COLORREF *lpaRgbValues // address of array of RGB values
);
Merci Mindphazer, ça fonctionne avec les commandes suivantes:

Code : Tout sélectionner

EnableExplicit
EnableDebugger

Define desktop_old_color,desktop_new_color

; on récupére la couleur actuelle de fond du bureau
desktop_old_color=GetSysColor_(#COLOR_DESKTOP)

Dim lpaElements(0)
Dim lpaRgbValues(0)

lpaElements(0)  = #COLOR_BACKGROUND
lpaRgbValues(0) = RGB(255,0,0)

; on change la couleur de fond du bureau
SetSysColors_(1,@lpaElements(),@lpaRgbValues(0))

; on récupére la nouvelle couleur de fond du bureau
desktop_new_color=GetSysColor_(#COLOR_DESKTOP)

Debug "desktop_old_color="+desktop_old_color
Debug "desktop_new_color="+desktop_new_color
J'avais complétement loupé ce post, pourtant j'ai vraiment cherché.
Merci a toi de me l'avoir indiqué.

Par contre, je ne sais pas exactement quelle valeur (cElements)indiquer pour SetSysColors_(cElements,...
Si je met 0, ça ne fonctionne pas.
Mais si je met une valeur entre 1 et 4 ça fonctionne. La couleur de fond de bureau est changée.
Je ne sais donc pas a quoi exactement cette valeur correspond.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre