您的位置:首页 > 编程语言 > C#

c#下利用winAPI来实现扩展屏的分辨率设置、方向切换等

2016-01-15 17:32 531 查看
1、背景:头显设备连接电脑作为扩展屏使用,由于显示屏厂家的原因,拿过来初始脸上电脑的话是横向的,需要手动控制去设置成纵向,这样做成产品的话,体验比较差;

在网上找到了一种方法利用 ChangeDisplaySettingsEx配合DEVMODE结构体来实现上述功能;

[DllImport("user32.dll")]

public static extern bool EnumDisplayDevices(string lpDevice, int iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags);//获取屏幕信息

[DllImport("user32.dll")]

public static extern int ChangeDisplaySettingsEx(string lpszDeviceName, [In] ref DEVMODE lpDevMode, IntPtr hwnd, int dwFlags, IntPtr lParam); //设置横竖屏

[DllImport("user32.dll", CharSet = CharSet.Unicode)]

private static extern long SetDisplayConfig(uint numPathArrayElements,IntPtr pathArray, uint numModeArrayElements, IntPtr modeArray, uint flags); //这个函数用于设置屏幕的复制模式、或者扩展模式;

public struct DEVMODE

{

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

public string dmDeviceName;

public short dmSpecVersion;

public short dmDriverVersion;

public short dmSize;

public short dmDriverExtra;

public int dmFields;

public int dmPositionX;

public int dmPositionY;

// public Point dmPosition;

public int dmDisplayOrientation;

public int dmDisplayFixedOutput;

public short dmColor;

public short dmDuplex;

public short dmYResolution;

public short dmTTOption;

public short dmCollate;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]

public string dmFormName;

public short dmLogPixels;

public short dmBitsPerPel;

public int dmPelsWidth;

public int dmPelsHeight;

public int dmDisplayFlags;

public int dmDisplayFrequency;

public int dmICMMethod;

public int dmICMIntent;

public int dmMediaType;

public int dmDitherType;

public int dmReserved1;

public int dmReserved2;

public int dmPanningWidth;

public int dmPanningHeight;

};

DEVMODE结构体,和CSDN上查到的是一样的;

demo:http://download.csdn.net/detail/bossaiaboy/9407945
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: