永发信息网

如何使用Windows API控制螢幕的相關設定

答案:2  悬赏:40  手机版
解决时间 2021-02-18 06:01
  • 提问者网友:佞臣
  • 2021-02-17 23:56
如何使用Windows API控制螢幕的相關設定
最佳答案
  • 五星知识达人网友:神的生死簿
  • 2021-02-18 00:18
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)
全部回答
  • 1楼网友:从此江山别
  • 2021-02-18 01:12
我。。知。。道 加。。我。。私。。聊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯