|
偶然看到一个C++控制windows电脑背光亮度的代码,试了一下还挺好用,联想Y480,Win7下测试通过。
作者应该是叫Diglo,看语言应该是个意大利人。
作者发布该代码的网址:http://diglo.altervista.org/blog/?p=70
C++ laptop backlight control
代码不长挺简单的,还真没想过可以自己写代码控制背光,我还以为只能靠厂家的软件呢,Y480的背光可调级数很少,这个软件的效果比Y480驱动带的背光控制效果好不少。
只有2个文件,直接把代码贴出来吧:
powermain.cpp
- #include <windows.h>
- #include <stdio.h>
- #include <iostream>
- #include"backlit_lib.h"
- using namespace std;
- void bar(int val, int max)
- {
- }
- int main()
- {
- int i=0;
- int inc=2;
- while(1)
- {
- setbr(i);
- cerr<<"Lum="<<i<<" \r";
- Sleep(10);
- i+=inc;
- if(i>100 || i==0) inc=-inc;
- }
- cerr<<"ok";
- }
复制代码
backlit_lib.h
- typedef struct _DISPLAY_BRIGHTNESS {
- UCHAR ucDisplayPolicy;
- UCHAR ucACBrightness;
- UCHAR ucDCBrightness;
- } DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;
- #define DISPLAYPOLICY_AC 0x00000001
- #define DISPLAYPOLICY_BOTH 0x00000002
- #define DISPLAYPOLICY_DC 0x00000003
- #define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS CTL_CODE(FILE_DEVICE_VIDEO, 0x125, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS CTL_CODE(FILE_DEVICE_VIDEO, 0x126, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS CTL_CODE(FILE_DEVICE_VIDEO, 0x127, METHOD_BUFFERED, FILE_ANY_ACCESS)
- int setbr(int iBright)
- {
- DWORD dwError;
- HANDLE hDevice;
- hDevice = CreateFile(L"\\\\.\\LCD", // accedi al LCD
- GENERIC_READ | GENERIC_WRITE, // modalità di accesso
- FILE_SHARE_READ | FILE_SHARE_WRITE, // modalità di condivisione
- NULL, // attributi di sicurezza di default
- OPEN_EXISTING, // disposizione
- 0, // attributi
- NULL);
- if (hDevice == INVALID_HANDLE_VALUE)
- {
- dwError = GetLastError();
- printf("error(%d): CreateFile\n", dwError);
- exit(-1);
- }
- DISPLAY_BRIGHTNESS displayBrightness;
- DWORD nOutBufferSize=sizeof(displayBrightness);
- DWORD nBytesReturned;
- int nRes = DeviceIoControl(
- (HANDLE) hDevice, // handle del dispositivo
- IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS, // dwIoControlCode
- NULL, // lpInBuffer
- 0, // nInBufferSize
- &displayBrightness, // output buffer
- sizeof(displayBrightness), // dim out buffer
- (LPDWORD) &nBytesReturned, // #bytes generati
- NULL // OVERLAPPED
- );
- DISPLAY_BRIGHTNESS *br = new DISPLAY_BRIGHTNESS;
- br->ucACBrightness=iBright;
- br->ucDCBrightness=iBright;
- br->ucDisplayPolicy=0x00000002;
- DeviceIoControl(
- (HANDLE) hDevice,
- IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,
- (LPVOID) br,
- (DWORD) sizeof(LPVOID),
- NULL,
- 0,
- (LPDWORD) &nBytesReturned,
- NULL
- );
- dwError = GetLastError();
- CloseHandle(hDevice);
- return 0;
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|