如何使用Windows API控制螢幕的相關設定
来源:互联网 发布:js二维数组转json对象 编辑:程序博客网 时间:2024/05/21 17:38
1、當顯示卡支援雙螢幕則如何延伸桌面視窗至第二個螢幕和旋轉螢幕的顯示角度:
1-1: 主要使用下列三個Windows API:
一、 EnumDisplayDevices :取得目前顯示設備基本資訊
二、EnumDisplaySettings:取得特定顯示設備的參數值
三、ChangeDisplaySettingsEx :設定特定顯示設備的參數值
1-2: 在C#中必須透過DllImport才能使用Widnows API的相關函數:
Ex: using System.Runtime.InteropServer;
[DllImport("user32.dll",SetLastError = true)]
static extern int ChangeDisplaySettingsEx(
string lpszDeviceName,
ref DEVMODE lpDevMode,
IntPtr hwnd,
uint dwflags,
IntPtr lParam
);
1-3、設定延伸桌面至第二個螢幕主要將DEVMODE中的dmPosition參數,設定的方法如下:
1-3-1、水平延伸:將dmPosition.x設定為第一個螢幕的寬度加一 ,和dmPosition.y設為0
1-3-2、垂直延伸:將dmPosition.y設定為第一個螢幕的高度加一,和dmPosition.x設為0
1-4、執行ChangeDisplaySettingsEx函式之前必須先設定dmFields |= DM_POSITION。
1-5、旋轉螢幕畫面主要是設定dmDisplayOrientation 和重新設定dmPelsWidth和dmpelsHeight
1-5-1: dmDisplayOrientation 用來設定螢幕顯示的角度:
(1) 0 (0 degrees) (2) 1 (90 degrees) (3) 2 (180 degrees) (4) 3 (270 degrees)
1-5-2:當進行90 dregrees 和270 dregrees的旋轉時必須將dmPelsWidth和dmpelsHeight
的數值交換,避免發生解析度不支援的問題。
(PS:在一般的筆電LCD Port上的螢幕,無法成功的旋轉螢幕的角度)
1-6、最後執行ChangeDisplaySettingsEx函式,此外如果要進行儲存和立即更新則必須設定
下列兩個參數:
1、CDS_UPDATEREGISTRY : 更新登錄檔的資料
2、CDS_RESET:立即更新顯示設定
2、如何使用Windows API讓螢幕進入省電模式:
2-1、主要使用SendMessage函式來設定螢幕的狀態。
2-2、在C#中必須透過DllImport才能使用Widnows API的相關函數:
using System.Runtime.InteropServer;
[DllImport("user32.dll",SetLastError = true)]
static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
2-3、螢幕可以設定下列三種狀態:
2-3-1 Monitor On (-1): 設定螢幕為正常模式
2-3-2 Monitor Stanby (1):設定螢幕為省電模式 (只有使用LCD Port的螢幕才有效)
2-3-3 Monitor Off(2):設定螢幕為關閉模式
3、如何使用Windows API控制螢幕的亮度變化:
3-1、只有LCD port的螢幕可以進行亮度的控制,目前只有在Vista以上才可以進行設定。
3-2、主要使用下列二個Windows API:
一、CreateFile函式:建立或開啟File和I/O設備。
二、DeviceIoControl函式:傳送相關的指令給驅動程式。
3-3、 在C#中必須透過DllImport才能使用Widnows API的相關函數:
using System.Runtime.InteropServer;
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(
[MarshalAs(UnmanagedType.LPStr)]
string strName,
uint nAccess,
uint nShareMode,
IntPtr lpSecurity,
uint nCreationFlags,
uint nAttributes,
IntPtr lpTemplate
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(
IntPtr hDevice,
uint dwIoControlCode,
byte[] lpInBuffer,
uint nInBufferSize,
[Out] byte[] lpOutBuffer,
uint nOutBufferSize,
out uint lpBytesReturned,
IntPtr lpOverlapped
);
3-4、控制螢幕亮度的相關的I/O Command有下列四個:
3-4-1、IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS:查詢螢幕支援的亮度設定
3-4-2、IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS:設定螢幕的亮度
3-4-3、IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS:
查詢目前螢幕的亮度設定 (只支援XP)
3-4-4、WmiMonitorBrightness Class:
查詢目前螢幕的亮度設定和支援的螢幕亮度(只支援Vista以上)
Download : Control Monitorl (Source Code) Control Monitor(EXE)
Result :
- 如何使用Windows API控制螢幕的相關設定
- 如何使用波形音频音量控制 API
- C#中使用Windows API控制阿里旺旺自动登录 的程序源代码
- 使用Windows混音器MIXER的API开发音频控制面板【参考文章】
- C#中使用Windows API控制阿里旺旺自动登录 的程序源代码
- Qt 使用Windows API 函数精确控制循环执行的周期时间
- windows service宿主web api使用"依赖注入"和“控制反转”的技术实践
- windows service宿主web api使用"依赖注入"和“控制反转”的技术实践
- windows service宿主web api使用"依赖注入"和“控制反转”的技术实践
- windows service宿主web api使用"依赖注入"和“控制反转”的技术实践
- windows service宿主web api使用"依赖注入"和“控制反转”的技术实践
- 如何使用windows远程控制centOS桌面
- 如何使用windows远程控制centOS桌面
- 如何使用Windows API获取IP、MAC
- 如何控制Windows的关机或重新启动
- WIndows Api和.Net库实现控制鼠标的坐标
- (转)如何在Windows下使用OpenGL 2.0的API(包括GLSL)
- 如何Hook Windows API
- 终端下定位到drupal根目录的命令
- 项目管理小故事之三只老鼠的“偷油”项目为什么失败
- DrupalChina.org打不开了,我们到哪里去交流?
- C和C++函数的相互引用 extern "c"深入理解
- 使用Intel编译器(2)向量化(1)自动向量化基础
- 如何使用Windows API控制螢幕的相關設定
- JavaScript常用技巧
- OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住
- 类厂
- 到底学Linux好吗???
- tcpcopy---从IP层来截取请求,转发给目标测试服务器,达到在线压力甚至极限压力测试的目的
- Drupal6 如何调整文章下方的“添加评论”等链接(node.tpl.php 中 的 $links 变量)
- 如何复制百度文库中的文章。。。这个必须留一份。。。
- msp430单片机 程序升级实例