Contrôle de la luminosité de l'écran

Soyez le premier à donner votre avis sur cette source.

Vue 34 459 fois - Téléchargée 1 536 fois

Description

Suite au message posté au http://www.csharpfr.com/forum.v2.aspx?ID=552660
J'ai décidé de faire une enquête afin de trouver le moyen de contrôler la luminosité de l'écran.
Après documentation, j'ai fini par réaliser ce petit programme.

Source / Exemple :


using System;
using System.Runtime.InteropServices;

namespace ScreenBrightness
{

	public class screenBrightness
	{
		//on importe les fonctions necessaires
		[DllImport("gdi32.dll",CharSet = CharSet.Auto)]
			public static extern bool SetDeviceGammaRamp(IntPtr hDc,
			[MarshalAs(UnmanagedType.LPArray)] ushort[,] lpRamp);
		[DllImport("user32.dll",CharSet = CharSet.Auto)]
			public static extern IntPtr GetDC(IntPtr hWnd);
		
		IntPtr screenDC;

		public screenBrightness(IntPtr hDC)
		{
			screenDC = hDC;
		}

		public bool setBrightness(int b)
		{
			IntPtr gammaDC;
			if(screenDC==IntPtr.Zero)
			{
				gammaDC = GetDC(IntPtr.Zero);
			} else gammaDC = screenDC;

			if(gammaDC == IntPtr.Zero) return false;

			ushort[,] gammaArray = new ushort[3,256];

			for (int i = 0; i < 256; i++)
			{
				int arrayValue = i * (b + 128);

				if (arrayValue > 65535)
					arrayValue = 65535;

				gammaArray[0, i] = 
					gammaArray[1, i] = 
					gammaArray[2, i] = (ushort)arrayValue;
			
			}

			return SetDeviceGammaRamp(gammaDC, gammaArray);
		}
	}
}

Conclusion :


Je tiens a dire merci aux auteurs de cet page dont je me suis beaucoup inspiré:
http://www.nirsoft.net/vc/change_screen_brightness.html

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
dimanche 30 août 2009
Statut
Membre
Dernière intervention
31 août 2009

Merci beaucoup, ça marche =)
par contre, ça ne modifie pas la luminosité sur les videos (VLC) c'est normal ?
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

Télécharge Visual Studio C# Express Edition, et compile le projet.
Ensuite execute-le.
Messages postés
2
Date d'inscription
dimanche 30 août 2009
Statut
Membre
Dernière intervention
31 août 2009

bonjour,
j'aimerai utilisé le programme que tu a créé, donc j'ai telechargé le fichier zip, sauf que je ne trouve pas le fichier .exe
que dois-je faire ?
et merci beaucoup
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Mais c'est quoi tout ce verbiage ?
Un prog user mode (interprété tel que C# ou du natif) n'accèdera à WMI que par COM, inutile de disserter là dessus, c'est by design WMI.

Les capacités de COM et WMI:
COM est le chargeur, il ne contient aucun code de méthode ou propriété donc rien à comparer. Savoir donc si WMI fait plus ou moins que COM, là oui que c'est con comme idée.
Une couche basse en pur objet, là c'est un non sens absolu. WMI est kernel mode, la POO n'a pas sa place à ce niveau, aucune couche d'abstraction possible, c'est du code driver pur et dur. Il se trouve que j'en écris, je dois donc un peu savoir de quoi je parle. Je te précise pour clore ce débat que je faisais l'exposition des sources Windows (TOUS) sur le stand MS au salon Linux 2005 sur MON portable, c'est donc que je les ai.

Specication ultra formaté: ni plus ni moins que toutes les fonctions API sinon aucun prog ne tournerait. Appeler directement une API est le contraire d'une encapsulation, c'est la ligne droite menant au but.
Messages postés
13
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
14 décembre 2007

re,

La question n'est pas d'interdire l'utilisation de l'interop , comme son l'indique interoperabilité , c'est fait pour pouvoir faire evoluer du code déjà existant avec .NET . en d'autre terme elle existe pour d'ancienne application qui on besoin d'etre mis à jour avec les derniere technologies . par exemple pour une premiere evolution d'une appli avant de migrer totalemnent en .NET C# .....

quand à bibliothèque .NET elle fait au moins ce que COM fait et bien sûr beaucoup plus !

Par contre THESAIB , avant de dire que c'est completemet con , regarde ce qu'est WMI. COM c'est l'implementation des bibliotheques dans l'environnement windows (via le registre). rien à voir !!

De même BRUNEWS regarde les capacité de WMI et on reparle de COM. C'est la couche basse de windows , pure objet , avec des specication ultra formaté : http://www.microsoft.com/whdc/system/pnppwr/wmi/default.mspx
("ferrari contre 2cv" , c'est le genre de remarque "karate contre knug-fu". Argumente coco , tu verras sur le terrain, tu va prendre des balles....lol

Quand tu passe par un import de Dll , bien sur que tu attaque directement la DLL , mais tu perds tout le travail Microsoft effectué en amont , batterie de test , gestion des exceptions , optimisation , evolution continue du framework (comme on l'a (enfin) aujourd'hui entre le 2.0 et le 3.O et les suivante.....) et du code pourri moche à souhait, figé, non évolutif, avec de pointeurs (et non des deleguatye qui sont géré par la CLI/CLR eux !!!)

t'as juste fais une encapsulation bidon, on appelle cela un bouchon.

moi j'appele cela de la bidouille .... quelque chose à ajouter ?

A mon sens c'est une critique qui est constructive , j'aurais aimé avoir un code C# Framework 2.0 bien propre pour l'integrer dans mes snippets , mais la je fait même pas un copier/coller.

Pour finir la derniere couche : regarder a cette adresse : http://www.ks-soft.net/hostmon.eng/wmi/index.htm
Super soft pour avoir le detail des classe WMI installé sur votre machine avec détail.(cela vous donne les Method et propertie pour System.Management)

je vous posterai un petit utilitaire qui genère du code C# à partir de WMI (avec la classe system.management ) , et la ça mettera tout le monde d'accord : badrbadr t'auras plus qu'à chercher la propriété qui controle l'écran .

Après ce que j'en dit , continuez à faire de l'interopérabilté moi je me concentre sur C# (uniquement) ça me permet de participer à des projet vraiment super .....

Alllez jeunesse .... bonne nuit
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.