API pour régler la luminosité de l'écran ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

API pour régler la luminosité de l'écran ?

Message par Ar-S »

Hello,

Je suis en galère pour régler la luminosité de mon portable. Oui je peux modifier la luminosité via le menu de windows et la gestion d'alimentation mais comme je suis partisan des solutions efficaces, j'aimerai faire une appli qui permette de baisser ou monter la luminosité à X en passant par les API directement du bureau.

J'ai trouvé (je pense) les bonnes à savoir : GetMonitorBrightness et SetMonitorBrightness
Je me dis que GetMonitorCapabilities ou GetPhysicalMonitorsFromHMONITOR doit être aussi nécessaire mais bon.
Je n'arrive jamais à piger la transcription API / PB.
Si quelqu'un pouvait m'éclairer.
D'avance merci.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par Ollivier »

Bonjour Ar-S,

je pense que MonitorFromWindow fera l'affaire pour trouver la main du moniteur.

Tu vois le HMonitor en préfixe de fonction donc la syntaxe s'écrit certainement:

MoniteurMain = MonitorFromWindow_(

Ensuite, viennent les arguments en paramètres.

Tu ne lui indiques pas de main de fenêtre (0) en 1er param, et la constante MONITOR_
DEFAULTTOPRIMARY en 2nd param.

Avec cette main tu peux exécuter SetMonitorBrightness ou GetMonitorBrightness.

Espérant t'éclairer
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par Ar-S »

Merci Ollivier, j'essaye d'avancer là dessus dès que possible (ce week end c'est rénovation de mon bureau j'ai tout viré).
je posterai ici suite à l'avancement de mon code
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: API pour régler la luminosité de l'écran ?

Message par nico »

J'ai créer le code, malheureusement, il n'est pas toujours possible d'obtenir le handle physique du moniteur (hPhysicalMonitor), j'obtiens bien la description mais le handle vaut 0, après quelques recherches il semble qu'il faille que le moniteur soit compatible DDC/CI.

Pour le savoir, il suffit d'utiliser un soft tel que softMCCS.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par falsam »

Un code de luis pour qui consiste à faire correction gamma. Mais je ne sais pas si ça fonctionne sur toutes les cartes vidéos.

L'occasion pour chacun d'entres nous de nous faire un feedback de ce code en spécifiant la carte vidéo.

Code : Tout sélectionner

;Change Gamma Ramp - By Luis

Declare.s ShowAPIError(CustomError=#False, ErrorCode=0)

;Renseigner la valeur gamma ici en sachant que 128 est la valeur normal 
; En dessous ça devient sombre, et au dessus ça devient plus clair
value = 10

Dim iGammaRamp.w(2,255)

For i = 0 To 255
 iArrayValue = i * (value + 128)

 If iArrayValue > 65535
    iArrayValue  = 65535
 EndIf
  
 iGammaRamp(0,i) = iArrayValue  
 iGammaRamp(1,i) = iArrayValue  
 iGammaRamp(2,i) = iArrayValue   

Next

SetDeviceGammaRamp_(GetDC_(0),@iGammaRamp())

Debug ShowAPIError()

Procedure.s ShowAPIError(CustomError=#False, ErrorCode=0)
  Protected Buffer.s
  Protected NumberOfChars
 
  If Not CustomError
    ErrorCode=GetLastError_()
  EndIf
 
  Buffer.s=Space(4096)
  NumberOfChars=FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0,ErrorCode,0,Buffer.s,Len(Buffer.s),0)
 
  ProcedureReturn Left(Buffer.s,NumberOfChars-2)
EndProcedure
Avec une NVidia GeForce ça fonctionne
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: API pour régler la luminosité de l'écran ?

Message par PAPIPP »

Merci Falsam
J'ai tout déréglé mon écran
mais c'est parfait.
A+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par Ar-S »

@Falsam
Sur mon portable (Asus K70io à base de GT120M en carte graph) j'ai un message d'erreur (paramètre incorrect).

@Ollivier,

Code : Tout sélectionner

MoniteurMain = MonitorFromWindow_(0, #MONITOR_DEFAULTTOPRIMARY)
Debug MoniteurMain
J'ai bien un retour sur MoniteurMain mais PB ne semble pas reconnaitre GetMonitorBrightness_
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par falsam »

PAPIPP a écrit :J'ai tout déréglé mon écran/quote]Oops désolé. Un code avec trackbar pour régler plus facilement peut etre.

Code : Tout sélectionner

Enumeration Window
  #Mainform
EndEnumeration

Enumeration Gadget
  #GamaRamp
EndEnumeration

Global Dim iGammaRamp.w(2,255)


Declare MainForm_Open()
Declare SetGammaRamp()

Procedure MainForm_Open()
  OpenWindow(#Mainform, 0, 0, 300, 50, "Gamma Ramp")
  TrackBarGadget(#GamaRamp, 10, 10, 280, 24, 0, 255)
  SetGadgetState(#GamaRamp, 128)
  
  BindGadgetEvent(#GamaRamp, @SetGammaRamp())
EndProcedure


Procedure SetGammaRamp()
  Protected Value = GetGadgetState(#GamaRamp)
  
  For i = 0 To 255
    iArrayValue = i * (value + 128)

    If iArrayValue > 65535
      iArrayValue  = 65535
    EndIf
  
    iGammaRamp(0,i) = iArrayValue  
    iGammaRamp(1,i) = iArrayValue  
    iGammaRamp(2,i) = iArrayValue   

  Next
  SetDeviceGammaRamp_(GetDC_(0),@iGammaRamp())
EndProcedure

MainForm_Open()

Repeat : Until WaitWindowEvent(100) = #PB_Event_CloseWindow
Dernière modification par falsam le sam. 30/août/2014 17:31, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par falsam »

Ar-S a écrit :Sur mon portable (Asus K70io à base de GT120M en carte graph) j'ai un message d'erreur (paramètre incorrect)
Je sens que ça ne va pas être facile.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par falsam »

un autre code à essayer sur ce lien http://www.purebasic.fr/english/viewtop ... 59#p448859
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par Ollivier »

Ar-S a écrit :J'ai bien un retour sur MoniteurMain mais PB ne semble pas reconnaitre GetMonitorBrightness_
Il a écrit :(ce week end c'est rénovation de mon bureau
j'ai tout viré)
Je pense que tu n'es pas le seul à faire de la rénovation: les deux informations mises en amont, dans la seconde page ciblée par le premier de tes hyperliens (lien + remarque sur l'utilisation de la main nulle) sont occultées désormais.

Si, en aval, il n'y a pas de reconnaissance d'une instruction, et si un logiciel légal est disponible, il doit y avoir de très bonnes raisons, notamment en terme de sécurité.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: API pour régler la luminosité de l'écran ?

Message par nico »

Est ce que ce n'est pas un peu farfelue de modifier la luminosité en changeant le gamma?

Parce que lorsque je change la luminosité par le panneau de configuration, mon gamma lui ne change pas!

Le gamma est là pour appliquer une correction pour la fidélité des couleurs, non?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par falsam »

nico a écrit :Le gamma est là pour appliquer une correction pour la fidélité des couleurs, non?
Oui c est fait pour ça.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: API pour régler la luminosité de l'écran ?

Message par Ar-S »

Bon après plusieurs essais, je vais abandonner l'idée. Le rapport prise de choux/pénibilité est bien trop disproportionné :)
Merci pour vos idées.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre