Page 1 sur 1

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

Publié : ven. 29/août/2014 20:08
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.

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

Publié : sam. 30/août/2014 6:00
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

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

Publié : sam. 30/août/2014 13:16
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

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

Publié : sam. 30/août/2014 15:20
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.

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

Publié : sam. 30/août/2014 16:40
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

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

Publié : sam. 30/août/2014 17:16
par PAPIPP
Merci Falsam
J'ai tout déréglé mon écran
mais c'est parfait.
A+

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

Publié : sam. 30/août/2014 17:17
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_

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

Publié : sam. 30/août/2014 17:30
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

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

Publié : sam. 30/août/2014 17:31
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.

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

Publié : sam. 30/août/2014 17:36
par falsam
un autre code à essayer sur ce lien http://www.purebasic.fr/english/viewtop ... 59#p448859

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

Publié : sam. 30/août/2014 22:36
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é.

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

Publié : mar. 02/sept./2014 19:50
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?

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

Publié : mar. 02/sept./2014 19:54
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.

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

Publié : mar. 02/sept./2014 20:44
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.