2008-12-17 4 views
9

Ich habe Windows Server 2008 auf einem Sony-Laptop installiert und die Helligkeitssteuerung funktioniert nicht. Ich möchte ein Programm schreiben, das mir erlaubt, es zu ändern.Welchen API-Aufruf würde ich verwenden, um die Helligkeit von Laptop (.NET) zu ändern?

Momentan muss ich das Power-Kontrollfeld öffnen, auf erweiterte Einstellungen klicken und mich durch so viele UAC-Boxen kämpfen, dass jeder, der mich beobachtet, denken muss, dass ich komplett verrückt bin.

Ich möchte nur ein einfaches kleines Programm, es zu tun, aber ich weiß nicht, was API

Antwort

9

sah ich John Rudy ‚s Link zu WmiSetBrightness in MSDN und kam mit dieser:

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

Hinweis: ManagementClass, ManagementObjectCollection und ManagementObject alle IDisposable implementieren. Sie sollten Dispose() anrufen oder "using" verwenden, um Ressourcenverluste zu vermeiden.

2

Dies ist vista nur zu nennen:

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

Sie müssen den Monitor mit GetPhysicalMonitorsFromHMONITOR identifizieren, bevor Sie seine Helligkeit mit SetMonitorBrightness. Ich vermute, niemand hat es vorher in .net getan, also wirst du wahrscheinlich deine eigene Interop schreiben müssen. Die api scheint nicht besonders schwierig zu sein, also sollten Sie es ziemlich leicht machen können.

+0

Vista und Server 2008 – Lucas

1

Soweit mir bekannt ist, gibt es dafür keine verwalteten (.NET) APIs. Für Vista stehen jedoch nicht verwaltete APIs über Interop zur Verfügung. Siehe MSDN: Monitor Configuration APIs und WmiSetBrightness.

Es kann Möglichkeiten geben, die WmiSetBrightness Methode zu treffen, aber ich bin mir dessen nicht bewusst.

Wenn Sie nicht auf Vista oder Server 2008 sind, sind Sie in einer Welt der Unannehmlichkeiten: Die Software-Konfiguration müsste direkt über den Monitor-Treiber erfolgen. Basierend auf Ihrer oben erwähnten UAC, vermute ich, dass dies nicht der Fall für Sie ist, aber der nächste Typ möchte es vielleicht wissen. :)

+0

+1, basierte ich meine Antwort auf Ihre;) – Lucas

0

Um zu DaEagles Antwort hinzuzufügen, kann die http://www.pinvoke.net/ Website ein Lebensretter sein, wenn Sie mit win32-apis in .Net arbeiten. Wenn die Information dort nicht existiert, fügen Sie sie bitte hinzu, wenn Sie eine erfolgreiche Interop für .Net gemacht haben.

1

Nur ein Brainstormer hier ... Auf dem Laptop können Sie die Helligkeit mit einigen Tastenkombinationen auf der Tastatur ändern. Es sollte möglich sein, diese Tastendrücke zu senden, wenn Sie es nur dunkler/heller machen möchten und es nicht auf einen bestimmten Wert einstellen müssen.

+1

das Problem ist, dass dumme Sony hat einen Treiber für die Helligkeit (es ist nicht hardwarebasiert). Ich konnte es nur nicht mit 2008 Server mit UAC arbeiten. nie probiert, ohne –

+0

cos Sie wissen, dass Sie wirklich eine Bildschirmanzeige benötigen, dass Helligkeit sich geändert hat. und ein Piepton. Ich habe die Lautstärkeregelung funktioniert, aber die Helligkeit nicht –

Verwandte Themen