Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONTRÔLE DE LA LUMINOSITÉ DE L'ÉCRAN


Information sur la source

Catégorie :API Source .NET ( DotNet ) Classé sous : luminosité, écran, brightness, api, win32 Niveau : Initié Date de création : 04/09/2005 Date de mise à jour : 30/11/2005 02:19:27 Vu / téléchargé: 13 980 / 824

Note :
6,33 / 10 - par 6 personnes
6,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • 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);
  • }
  • }
  • }
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
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

30 novembre 2005 02:19:27 :
ajout de mots-clés

Commentaires et avis

signaler à un administrateur
Commentaire de TheSaib le 05/09/2005 12:14:33 administrateur CS

Nickel:)

signaler à un administrateur
Commentaire de ultima_93 le 05/09/2005 14:48:00

Franchement bien trouvé

signaler à un administrateur
Commentaire de Le_proprio_de_mykeyes le 11/03/2006 20:08:09

Bonne note pour toi aussi! Et ceux qui ont besoin d'une autre façon de voir les choses, mon code complémentaire (et commenté) avec ma belle icône: http://www.csharpfr.com/codes/CONTROLER-LUMINOSITE-ECRAN_36416.aspx

Ces deux codes donnent deux points de vue qui se ressemble mais sous une approche différente.

signaler à un administrateur
Commentaire de AnMullerDeKush le 12/12/2007 06:26:57

Franchement , je vois pas l'interet de faire du C# si c'est pour importer des DLL su système.
Encore du faux .NET . un bon vieux code non-managé , bla bla bla

Je vais pas critiquer sans vous donner de vrai solution C# et Framework 1.1 ou 2.0 ou 3.0 :

Bon il existe une bibliotheque pur .NET  :System.Management....en cherchant un peu (il y a une doc). pouir info cette bibliotheque utilise le WMI de Windows (bibliotheque natif du systeme des composants  Hardware (voir sowtware pour des progiciel Windows)

Là c'est du vrai .NET , lors de mise à jour du framework il y aurat tout de prévu pour que le code
ne fasse pas des siennes .... mise à niveau de la bi blio , Warning si la bibli devient obsolète....etc

Allez bien tenté le monde ne serat jamais parfait , bon courage pour la suite , avec un smile :)

signaler à un administrateur
Commentaire de TheSaib le 12/12/2007 10:59:10 administrateur CS

Si tu fais du .NET tu n'as pas le droit de faire d'interop ?

C'est completement con comme remarque, tu crois que l'assembly System.Management, elle marche comment ?

Le framework n'encapsule pas tout les routines Win32, il faut parfois les gérer par nous même.

signaler à un administrateur
Commentaire de BruNews le 12/12/2007 11:44:29 administrateur CS

Complément:
A du natif, on n'accède jamais depuis de l'interprété autrement que par interfaces COM et sera le cas avec WMI, alors pour ce qui est de Sytem.Management, vaste plaisanterie.
Par contre Gdi32 mappe direct vers le kernel, sera autrement plus rapide que des interfaces COM.

signaler à un administrateur
Commentaire de badrbadr le 12/12/2007 11:51:25

Je pense que la DllImport n'utilise pas de COM, mais simplement l'appel à des fonctions de l'API Win32 pour charger la DLL et exécuter la fonction spécifiée. Un tas de manoeuvres surviennent avant pour s'assurer de la compatiblité des types entre .net et le runtime C.
Mais là encore, je n'ai pas de certitudes.
Pour AnMullerDeKush, j'avais interprété son commentaire de la manière suivante : "Vaut mieux utiliser les outils de .net quand ceux-ci sont diponbiles plutôt que d'utilier directement les interops"
C'est vrai mais je ne connais pas un moyen de contrôler la luminosité avec System.Management :D

signaler à un administrateur
Commentaire de BruNews le 12/12/2007 12:00:36 administrateur CS

DllImport, c'est LoadLibrary et GetProcAddress.
Y a pas photo avec des interfaces COM, c'est Ferrari contre la 2cv.

signaler à un administrateur
Commentaire de AnMullerDeKush le 13/12/2007 02:25:13

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


signaler à un administrateur
Commentaire de BruNews le 13/12/2007 11:07:41 administrateur CS

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

un bon livre sur l'API win32 [ par nicolaslepot ] Salut,Je suis à la recherche d'un cours qui explique les principales fonctions de l'api win32 pour winXP et win2003. Un bon livre ou un bon pdf. Je ne Modifier la luminosité et le contraste de l'écran [ par Lepripri ] Bonjour,je souhaiterais savoir s'il est possible de modifier le contraste et la luminosité de l'écran sans passer par les touches placées sur l'écran WinFX vs Win32 [ par badrbadr ] Salut chers .Netiens; Apr&#232;s avoir essayer plusieurs langages de programmation et plusieurs API, j&#146;ai fini par trouver ma plateforme de r&#23 comment obtenir la documentation SDK de C#2.0 [ par alecccc ] BonjourEn fait je cherche à avoir la liste de toutes les classes,methodes bref la documentation de l'API C#2.O comme on l'a en java (http://java.sun.c Plein-écran : réaction bizarre ? [ par bubbathemaster ] J'ai une application qui est sensé se mettre en plein écran via ce ptit code :FullScreen est une variable globale de type boolean qui determine si l'a Evénement n'importe ou sur l'écran [ par hibouman ] Je débute en c# et j'aurais aimé quelque chose dans ce genre là: quelque_soit_l'endroit_sur_l'écran.Click += new EventHandler(écran_Click);...sta Capture d'écran et fuite mémoire [ par Nikoui ] J'utilise un morceau de code assez "banal" pour effectuer une capture d'écran. Cependant, dans mon projet, j'effectue de nombreuses captures d'écran.. API Live Messenger [ par Bidou ] Bonjour,Je recherche des APIS pour Windows Live Messenger. Il me semble que j'avais entendu parlé de quelques chose comme ça, mais après quelques rech Equivalent Err.Raise... [ par PeTeRsLaStAr ] Bonjour à toutes et à tous (toutes ???...)Voilà j'ai un problème dans mon code. Je dois utiliser une API fournie par la société par laquelle je travai Recevoir des messages : API MSN [ par iow4 ] Bonjour, j'aimerais developper un bot en C# pour Msn, j'utilise donc l'api messenger messengerAPI.dll Je sais faire pas mal de chose avec notament env


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.