Je veux une luminosité de l'écran Ajust par moi-même. Parce que Windows ne me permet que de régler dans une plage limitée. Je veux atténuer l'affichage de 0 à 100% et l'éteindre. Il devrait être possible si Windows peut-il faire automatiquement (Dim Affichage après: x minutes / éteindre l'affichage après: x minutes). J'ai essayé certaines sources et classes ce que j'ai trouvé par Google. Mais non d'entre eux ne fonctionne. P>
Avez-vous déjà essayé ceci ou pouvez-vous me recommander tout code de travail? p>
Merci pour vos réponses. P>
3 Réponses :
Essayez-le comme ceci:
using System; using System.ComponentModel; using System.Runtime.InteropServices; namespace MediaManagerSql.DataAccess.Sql.EntityFramework { public class ScreenBrightness : Component { private int _gammaValue; private RAMP _ramp; public ScreenBrightness() { InitializeComponent(); } public ScreenBrightness(IContainer container) { container.Add(this); InitializeComponent(); } [Description("Brightness Gamma Value")] [Category("Brightness")] public int SetGammaValue { get { return _gammaValue; } set { _gammaValue = value; } } [DllImport("gdi32.dll")] public static extern bool SetDeviceGammaRamp(IntPtr hDC, ref RAMP lpRamp); [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hWnd); /// <summary> /// Apply the selected gamma value to screen /// </summary> public void ApplyGamma() { // since gamma value is max 44 ,, we need to take the percentage from this because // it needed from 0 - 100% double gValue = _gammaValue; gValue = Math.Floor(Convert.ToDouble((gValue/2.27))); _gammaValue = Convert.ToInt16(gValue); if (_gammaValue != 0) { _ramp.Red = new ushort[256]; _ramp.Green = new ushort[256]; _ramp.Blue = new ushort[256]; for (int i = 1; i < 256; i++) { // gamma is a value between 3 and 44 _ramp.Red[i] = _ramp.Green[i] = _ramp.Blue[i] = (ushort) (Math.Min(65535, Math.Max(0, Math.Pow((i + 1)/256.0, (_gammaValue + 5)*0.1)*65535 + 0.5))); } SetDeviceGammaRamp(GetDC(IntPtr.Zero), ref _ramp); } } #region Nested type: RAMP [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct RAMP { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public UInt16[] Red; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public UInt16[] Green; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public UInt16[] Blue; } #endregion } }
Cela ne fonctionne que sur certains PC. Et cela change de valeur de la gama, mais je veux une valeur de luminosité de changement. Comme dans Windows -> Ajustez la luminosité de l'écran (rétro-éclairage du moniteur).
Comment utiliser cette méthode dans l'application Win Service?
Vous pouvez utiliser Méthode WMisetBrightness :
using System.Management; //... static void SetBrightness(byte targetBrightness) { ManagementScope scope = new ManagementScope("root\\WMI"); SelectQuery query = new SelectQuery("WmiMonitorBrightnessMethods"); using(ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) { using(ManagementObjectCollection objectCollection = searcher.Get()) { foreach(ManagementObject mObj in objectCollection) { mObj.InvokeMethod("WmiSetBrightness", new Object[] { UInt32.MaxValue, targetBrightness }); break; } } } }
Utilisez Microsoft API pour régler la luminosité de l'écran. Appelez la fonction Essayez ce code. P> setDevicegammaramp code>.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace brightnesscontrol
{
public partial class Form1 : Form
{
[DllImport("gdi32.dll")]
private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp);
private static bool initialized = false;
private static Int32 hdc;
private static int a;
public Form1()
{
InitializeComponent();
}
private static void InitializeClass()
{
if (initialized)
return;
hdc = Graphics.FromHwnd(IntPtr.Zero).GetHdc().ToInt32();
initialized = true;
}
public static unsafe bool SetBrightness(int brightness)
{
InitializeClass();
if (brightness > 255)
brightness = 255;
if (brightness < 0)
brightness = 0;
short* gArray = stackalloc short[3 * 256];
short* idx = gArray;
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 256; i++)
{
int arrayVal = i * (brightness + 128);
if (arrayVal > 65535)
arrayVal = 65535;
*idx = (short)arrayVal;
idx++;
}
}
bool retVal = SetDeviceGammaRamp(hdc, gArray);
return retVal;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
a = trackBar1.Value;
SetBrightness(a);
}
}
}