2012-08-11 15 views
10

Tôi đã xem xét làm mờ màn hình trên nền tảng Windows từ chương trình của mình. Tôi biết rằng có một API SetMonitorBrightness cho phép điều này, nhưng vấn đề đối với tôi là nó có thể làm mờ màn hình trên Windows XP (mà API không hỗ trợ) và cũng làm mờ màn hình trên máy tính để bàn.Màn hình mờ trên Windows với C++

Vì vậy, tôi đã thực hiện một số nghiên cứu và tìm thấy this utility dường như làm mờ màn hình của tôi trên máy tính để bàn Windows XP mà không gặp sự cố. Tôi đã cố gắng liên lạc với tác giả để tìm hiểu xem họ đã thực hiện dimmer như thế nào nhưng tôi không nhận được phản hồi từ họ.

Vì vậy, tôi rất tò mò muốn nghe ý kiến ​​của các nhà phát triển trên trang web này, bạn nghĩ họ đã làm mờ màn hình như thế nào khi API SetMonitorBrightness không được hỗ trợ?

PS. Tôi là một nhà phát triển newbie bản thân mình đang cố gắng viết một chương trình tiết kiệm năng lượng cho doanh nghiệp nhỏ của chúng tôi. Đây là một tổ chức phi lợi nhuận và chúng tôi không có tiền để thuê một nhà phát triển Windows để làm điều này cho chúng tôi. Hầu hết các máy tính của chúng tôi là máy tính để bàn Windows XP, vì vậy bạn có thể thấy tôi không thể sử dụng API SetMonitorBrightness vì nó được ghi lại rộng rãi trên web.

Xin cảm ơn trước.

Trả lời

3

Hãy tha thứ cho tôi nếu thông tin này đã lỗi thời, nhưng tôi đã làm điều này trong quá khứ bằng cách sử dụng SetDeviceGammaRamp. Phiên bản 'Get' cũng có sẵn để lưu và khôi phục trạng thái. Tôi đã thấy nó được sử dụng trong các chương trình C# thông qua, do đó, nó vẫn có thể có liên quan mặc dù không quá phổ biến nữa.

+0

Ngoài ra rất hay. Cảm ơn bạn! Tôi cần phải thử nó. Mối quan tâm duy nhất của tôi là mô tả của API cho biết, "Không phải tất cả các bảng video màu trực tiếp đều hỗ trợ các đường dốc có thể tải được." – c00000fd

4

Trong trường hợp bạn trích dẫn, hãy xem trình bảo vệ màn hình bằng Dependancy Walker. Tôi đoán là họ tạo ra một cửa sổ toàn màn hình và sử dụng SetLayeredWindowAttributes() để thiết lập một thiết lập bán mờ cho cửa sổ, do đó làm cho màn hình xuất hiện mờ đi. Tôi nghi ngờ nó sẽ giúp bạn tiết kiệm được nhiều tiền.

Bạn có thể muốn xem xét DDC protocol cho phép bạn kiểm soát các khía cạnh của một số màn hình. API MS cho phép bạn thực hiện việc này có thể được tìm thấy ở đây: http://msdn.microsoft.com/en-us/library/windows/hardware/ff570290%28v=vs.85%29.aspx và bạn cũng nên xem xét các hàm I2C.

Hoặc bạn có thể tìm thư viện sẵn sàng để thực hiện các công cụ DDC cho bạn, chẳng hạn như http://www.nicomsoft.com/products/i2c/. Họ cũng có một ứng dụng mờ hơn là miễn phí cho sử dụng cá nhân và không miễn phí cho mục đích thương mại. Họ thậm chí có thể cho phép bạn sử dụng nó miễn phí nếu bạn liên hệ với họ và giải thích nó cho một tổ chức phi lợi nhuận.

Nếu bạn đang cố gắng thực hiện điều này như là một chương trình tiết kiệm năng lượng, tại sao không sử dụng cài đặt bảo vệ màn hình để tắt màn hình sau một khoảng thời gian không chắc chắn? Trong mọi trường hợp

+0

Cảm ơn bạn đã nhập. Tôi không nghĩ đến việc sử dụng SetLayeredWindowAttributes() như bạn đã mô tả. Nhưng sẽ không hiển thị các pixel tối hơn (tối hơn) yêu cầu màn hình sử dụng ít năng lượng hơn? – c00000fd

+0

Để trả lời câu hỏi của bạn, tại sao tôi không tắt màn hình, chúng tôi có một phần mềm chuyên biệt xuất dữ liệu cần hiển thị trên màn hình, vì vậy tôi muốn làm mờ màn hình sau N phút không hoạt động và sau đó nếu nhà điều hành di chuyển chuột nó sẽ trở về 100%. – c00000fd

+0

@ user843732: Nó có thể sử dụng ít năng lượng hơn, nhưng cách duy nhất bạn biết chắc chắn sẽ là thử và đo mức tiêu thụ điện năng. Thay đổi độ mờ của một pixel không nhất thiết phải thay đổi độ sáng của đèn nền, đó là nơi có rất nhiều nguồn. Hãy suy nghĩ về một màn hình với độ sáng bật lên và những người da đen xuất hiện màu xám. Rất nhiều màn hình LCD chỉ có một điều khiển độ sáng đèn nền duy nhất, một số được phân đoạn nhưng ít (không có?) Là trên cơ sở mỗi pixel. Đối với ứng dụng của bạn, âm thanh thú vị. Hy vọng bạn làm cho nó hoạt động. – tinman