使用IOCTL代码实现LCD背光调节
来源:互联网 发布:传世 登录器 源码 编辑:程序博客网 时间:2024/06/05 17:04
国内这样的代码找不到,于是参考了相关代码后完善如下代码,且实现方式通过IOCTL代码实现LCD背光调节的功能。
适合场合为平板电脑或者笔记本。主要还是要靠BIOS支持与否。
编译环境使用:Dev-cpp工具编写。
#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <ddk/Ntddvdeo.h>typedef struct _DISPLAY_BRIGHTNESS { UCHAR ucDisplayPolicy; UCHAR ucACBrightness; UCHAR ucDCBrightness;} DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;#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)void help(void){fprintf(stderr, "(c) Tody, 2014\n");fprintf(stderr, "Usage: wbl.exe -b <level>\n");fprintf(stderr, " Option:\n");fprintf(stderr, " -b <level>\t brightness level need to be specified\n");fprintf(stderr, "\n Error code:\n");fprintf(stderr, " Pass: 0; Fail: 1\n");exit(1);}int setBrightness(int level){HANDLE h ;DWORD nOutBufferSize = 256;BYTE SupportedBrightness[256];DWORD g_supportedLevelCount; DISPLAY_BRIGHTNESS DisplayBrightness;memset(SupportedBrightness, 0, sizeof(SupportedBrightness));/* use createfile function to open lcd. * url from microsoft about IOCTL code.* http://msdn.microsoft.com/en-us/library/windows/desktop/aa372703%28v=vs.85%29.aspx*/h = CreateFile("\\\\.\\LCD", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);if(h == INVALID_HANDLE_VALUE){printf("Open \\\\.\\LCD error");exit(1);}/* Query for display supported level */if(!DeviceIoControl(h, IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS, NULL, 0, SupportedBrightness, nOutBufferSize, &g_supportedLevelCount, NULL)){printf("IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS error - %d, - buffer: %d ", g_supportedLevelCount, nOutBufferSize);exit(1);}if (g_supportedLevelCount == 0) /* 0 means not supported */{printf("\nLCD not support LEVEL COUNT", g_supportedLevelCount);exit(1);}DisplayBrightness.ucDisplayPolicy = 0;DisplayBrightness.ucACBrightness = level;DisplayBrightness.ucDCBrightness = level;/* Set display backlight level */nOutBufferSize = sizeof(DisplayBrightness);if(!DeviceIoControl(h, IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS, (DISPLAY_BRIGHTNESS *)&DisplayBrightness, nOutBufferSize, NULL, 0, &nOutBufferSize, NULL)){printf("IOCTL_VIDEO_SET_SUPPORTED_BRIGHTNESS error - %d, - buffer: %d ", g_supportedLevelCount, nOutBufferSize);exit(1);}Sleep(500); /* delay for some time while wmi event changed */nOutBufferSize = sizeof(DisplayBrightness);if(!DeviceIoControl(h, IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS, NULL, 0, (DISPLAY_BRIGHTNESS *)&DisplayBrightness, nOutBufferSize, &nOutBufferSize, NULL)){printf("IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS error - %d, - buffer: %d ", g_supportedLevelCount, nOutBufferSize);exit(1);}printf("\nBrightness_AC: %d\nBrightness_DC: %d", DisplayBrightness.ucACBrightness, DisplayBrightness.ucDCBrightness);}int main(int argc, char *argv[]) {/* program with arguments support */if (argc == 3 && strcmp("-b", argv[1])==0){setBrightness(atoi(argv[2]));}else{help();}return 0;}
0 0
- 使用IOCTL代码实现LCD背光调节
- 基于嵌入式Linux的LCD背光调节及驱动的实现
- android 关于LCD背光调节渐变过程引起背光闪烁问题
- android 关于LCD背光调节渐变过程引起背光闪烁问题
- LCD 背光
- 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节
- 嵌入式之Linux的LCD背光调节及驱动的工作原理
- android自动调节背光
- ANDROID 背光调节
- 自动背光调节
- android 背光调节
- WinCE 背光调节
- 背光亮度调节流程
- Android背光亮度调节
- 背光亮度调节
- android的背光调节
- 自动背光调节
- Android7.0背光调节
- 为何谷歌下大力气研发量子计算机
- 升级xcode时更换appid账户
- 单向链表
- C语言数组参数与指针参数
- SQL Injection --low
- 使用IOCTL代码实现LCD背光调节
- JavaScript 学习笔记
- 关于mysql存储过程的definer的问题
- java基础学习 -- 面向对象
- 理解HTTP幂等性
- 黑马程序员——String StringBuffer StringBuilder的区别
- Android MediaProvider数据库模式
- groovy : poi ExcelExtractor
- wxPython关于对话框