2008-12-17 8 views
9

Tengo Windows Server 2008 instalado en una computadora portátil Sony y el control de brillo no funciona. Me gustaría escribir un programa para permitirme cambiarlo.¿Qué API usaría para cambiar el brillo de la computadora portátil (.NET)?

Actualmente, lo que tengo que hacer es abrir el panel de control de Energía, hacer clic en configuración avanzada y luchar en tantas cajas de UAC que cualquiera que me mire debe pensar que estoy completamente loco.

Sólo quiero un pequeño y sencillo programa para hacerlo, pero no sé qué API para llamar a

Respuesta

9

Miré hacia arriba enlace John Rudy 's a WmiSetBrightness en MSDN y se le ocurrió esto:

ManagementClass mclass = new ManagementClass("WmiMonitorBrightnessMethods"); 
mclass.Scope = new ManagementScope(@"\\.\root\wmi"); 
ManagementObjectCollection instances = mclass.GetInstances(); 

// I assume you get one instance per monitor 
foreach(ManagementObject instance in instances) 
{ 
    ulong timeout = 1; // in seconds 
    ushort brightness = 50; // in percent 
    object[] args = new object[] { timeout, brightness }; 
    instance.InvokeMethod("WmiSetBrightness", args); 
} 

Nota: ManagementClass, ManagementObjectCollection y ManagementObject todo implemento IDisposable. Debe llamar al Dispose() o usar "using" para evitar la fuga de recursos.

2

Esto es sólo Vista:

http://msdn.microsoft.com/en-us/library/ms775232.aspx

Es necesario identificar el monitor con GetPhysicalMonitorsFromHMONITOR antes de su brillo con SetMonitorBrightness. Sospecho que nadie lo ha hecho antes en .net, así que probablemente necesites escribir tu propia interoperabilidad. La API no parece ser particularmente difícil, por lo que debería poder hacerlo con bastante facilidad.

+0

Vista y Server 2008 – Lucas

1

Que yo sepa, no hay API administradas (.NET) para esto. Sin embargo, para Vista, hay API no administradas disponibles a través de interoperabilidad. Vea MSDN: Monitor Configuration APIs y WmiSetBrightness.

Puede haber maneras manejadas de golpear el método WmiSetBrightness, pero no las conozco.

Si no está en Vista o Server 2008, se encontrará con un mundo de desagrado: la configuración del software tendría que hacerse directamente a través del controlador del monitor. De acuerdo con su mención de UAC anterior, sospecho que este no es el caso para usted, pero el próximo tipo podría querer saber. :)

+0

+1, he basado mi respuesta en la suya;) – Lucas

0

Para agregar a la respuesta DaEagles, el sitio http://www.pinvoke.net/ puede ser un salvavidas cuando se trabaja con win32-apis en .Net. Si la información no existe allí, agréguela cuando haya realizado una interoperación exitosa para .Net.

1

Sólo una lluvia de ideas aquí ... En la computadora portátil puede cambiar el brillo utilizando algunas combinaciones de teclas en el teclado. Debería ser posible enviar esas teclas si solo desea oscurecer/aclarar y no tener que establecerlo en un valor específico.

+1

el problema es que la sony estúpida tiene un controlador para el brillo (no está basado en hardware). Simplemente no pude hacerlo funcionar con el servidor 2008 con UAC. nunca lo intenté sin –

+0

porque sabes que REALMENTE necesita una indicación en pantalla de que el brillo ha cambiado. y un pitido. Tengo el control de volumen funcionando, pero el brillo no funciona –

Cuestiones relacionadas