2012-08-11 10 views
10

Ich habe in meinem Programm dimmen Bildschirm auf einer Windows-Plattform untersucht. Ich weiß, dass es eine SetMonitorBrightness-API gibt, die dies ermöglicht, aber das Problem für mich ist, dass es gut wäre, den Bildschirm auch unter Windows XP zu dimmen (was diese API nicht unterstützt) und auch Bildschirme auf Desktop-Computern zu dimmen.Dim Bildschirm unter Windows mit C++

Also habe ich etwas Forschung und fand this utility, die meinen Bildschirm auf einem Windows XP-Desktop scheint, ohne ein Problem zu dimmen. Ich habe versucht, den Autor zu kontaktieren, um herauszufinden, wie sie den Dimmer implementiert haben, aber ich habe nichts von ihnen gehört.

Also ich war neugierig, von Entwicklern auf dieser Website zu hören, wie denkst du, es gelang ihnen, den Bildschirm zu dimmen, wenn die SetMonitorBrightness API nicht unterstützt wird?

PS. Ich bin ein Neuling, der selbst versucht, ein Energiesparprogramm für unser kleines Unternehmen zu schreiben. Es ist eine gemeinnützige Organisation und wir haben keine Mittel, um einen Windows-Entwickler für uns zu engagieren. Die meisten unserer Computer sind Windows XP-Desktops. Wie Sie sehen können, kann ich die SetMonitorBrightness-API nicht verwenden, da sie im Internet weitgehend dokumentiert ist.

Vielen Dank im Voraus.

Antwort

3

Verzeihen Sie mir, wenn diese Informationen veraltet sind, aber ich habe dies in der Vergangenheit mit SetDeviceGammaRamp getan. Die Get-Version ist auch für das Speichern und Wiederherstellen von Status verfügbar. Ich habe gesehen, dass es in C# -Programmen verwendet wird, also könnte es immer noch relevant sein, wenn auch nicht mehr zu häufig.

+0

Sehr schöne Ergänzung. Vielen Dank! Ich muss es ausprobieren. Meine einzige Sorge ist, dass diese API-Beschreibung sagt: "Nicht alle direkten Farb-Video-Karten unterstützen ladbare Gamma-Rampen." – c00000fd

4

Wenn Sie angeben, schauen Sie sich den Bildschirmschoner mit Dependancy Walker an. Ich vermute, dass sie ein Vollbildfenster erstellen und SetLayeredWindowAttributes() verwenden, um eine halbtransparente Einstellung für das Fenster festzulegen, wodurch der Bildschirm abgeblendet wird. Ich bezweifle, dass es dir viel Geld sparen würde.

Vielleicht möchten Sie in die DDC protocol schauen, mit der Sie Aspekte einiger Monitore steuern können. Die MS API, mit der Sie dies tun können, finden Sie hier im Kreisverkehr: http://msdn.microsoft.com/en-us/library/windows/hardware/ff570290%28v=vs.85%29.aspx und Sie sollten sich auch die I2C-Funktionen ansehen.

Alternativ können Sie nach einer fertigen Bibliothek suchen, um das DDC-Material für Sie zu erstellen, z. B. http://www.nicomsoft.com/products/i2c/. Sie haben auch eine Dimmer-Anwendung, die frei für den persönlichen Gebrauch und nicht frei für die kommerzielle Nutzung ist. Sie können sogar erlauben, dass Sie es kostenlos nutzen, wenn Sie sie kontaktieren und erklären, dass es für eine gemeinnützige Organisation ist.

Wenn Sie dies als ein Energiesparprogramm versuchen, warum nicht eine Bildschirmschoner-Einstellung verwenden, die den Monitor nach einer bestimmten Zeit der Untätigkeit abstellt? Auf jeden Fall

+0

Vielen Dank für Ihre Eingabe. Ich habe nicht über die Verwendung von SetLayeredWindowAttributes() nachgedacht, wie Sie es beschrieben haben. Aber würde die Anzeige von dunkleren (schwärzeren) Pixeln keinen Bildschirm erfordern, um weniger Energie zu verbrauchen? – c00000fd

+0

Um Ihre Frage zu beantworten, warum würde ich nicht einfach den Monitor ausschalten, wir haben eine spezielle Software, die Daten ausgibt, die auf dem Bildschirm sichtbar sein müssen, also wollte ich den Bildschirm nach N Minuten der Inaktivität und dann dimmen Der Operator bewegt die Maus, es würde zu 100% zurückkehren. – c00000fd

+0

@ user843732: Es könnte weniger Energie verbrauchen, aber die einzige Möglichkeit, die Sie sicher kennen würden, wäre es zu versuchen und den Stromverbrauch zu messen. Das Ändern der Opazität eines Pixels ändert nicht notwendigerweise die Helligkeit der Hintergrundbeleuchtung, von der ein Großteil der Leistung stammt. Stellen Sie sich ein Display vor, bei dem die Helligkeit erhöht ist und die schwarzen Bereiche grau erscheinen. Viele LCD-Bildschirme haben nur eine einzige Helligkeitssteuerung für die Hintergrundbeleuchtung, einige sind segmentiert, aber wenige (keine?) Sind pro Pixel. Was Ihre Anwendung betrifft, klingt interessant. Ich hoffe, es funktioniert. – tinman