Un problema que me ha pasado de manera recurrente (relacionado con los drivers) es que en mi portátil se puede dar el caso de volver de suspensión o encenderlo, y que la pantalla no se encienda, con el brillo al mínimo.
Tras probar varias alternartivas, encontré una gracias a la ayuda del siempre amable @cmilanf. Consistía en un ejecutable que accediera al control de brillo de Windows y lo estableciera al 100%. Este ejecutable debería cargar en el arranque de la sesión, o del sistema.
El ejecutable
Puestos a hacer las cosas, y aprovechando que teníamos un Visual Studio a mano, nos dio por crear esta pequeña utilidad en C#, y tras recorrer varios sitios especializados encontramos un código que acertaba de lleno con lo que andabamos buscando:
static void Main(string[] args1) { ManagementClass mclass = new ManagementClass("WmiMonitorBrightnessMethods"); mclass.Scope = new ManagementScope(@"\\.\root\wmi"); ManagementObjectCollection instances = mclass.GetInstances(); foreach (ManagementObject instance in instances) { ulong timeout = 1; // en segundos ushort brightness = 100; // en porcentaje object[] args = new object[] { timeout, brightness }; instance.InvokeMethod("WmiSetBrightness", args); } }
Tan sencillo como hacer un par de pruebas, compilarlo en modo release, y guardarnos el ejecutable en un lugar seguro para la segunda parte, la carga al inicio.
La carga
Una vez hecho el programa e implementado, quedaba la otra opción, cargarlo al inicio.Como el ordenador en cuestión era un Windows 8 (instalado en el MacBook de artículos anteriores), no teníamos menú inicio, como tampoco teníamos carpeta de inicio, así que nos tocó implementarlo de manera «artesanal», es decir, como lo implementan los virus, spyware, troyanos, etc… tocando el registro.
El registro de windows es ese monstruo al que todo el mundo tiene miedo hasta que te acostumbras, como diría el tío Ben, un gran poder conlleva una gran responsabilidad, así que si vamos con cuidado no habrá problemas.
Para agregar nuestro programa fuimos a la siguiente ruta
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Y ahí agregamos una clave de este estilo:
Nombre de clave: Nombre de nuestro ejecutable
Tipo de clave: REG_SZ (Alfanumérico)
Valor: Ruta de nuestro ejecutable
Si todo ha ido bien, si reiniciamos el ordenador veremos que tras iniciar sesión el control de la pantalla se pondrá al máximo.
Conclusiones y Posibles mejoras
Esta solución no es perfecta, pero al menos, en mi caso me salvó de un aprieto considerable. Como posibles mejoras podrían estar implementarlo como servicio, ya que por ahora carga solamente cuando la sesión del usuario (y todo lo que ello conlleva) se ha cargado, así que me toca introducir la contraseña a ciegas.
La opción de implementarlo como servicio me permitiría que cargara antes de iniciar sesión, consiguiendo que fuese más efectivo.
Más información
Fuente original del código: Stack Overflow
Y cómo hago para obtener el brillo actual de la pantalla?