admin 管理员组文章数量: 893893
win10屏幕旋转
官方
环境:.Net framework4.7.2,控制台应用,理论上.NetCore、.Net5、.Net6都行,创建相应程序即可
using System.Runtime.InteropServices;namespace SwitchScreen
{[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]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 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;};public class NativeMethods{// PInvoke declaration for EnumDisplaySettings Win32 API[DllImport("user32.dll", CharSet = CharSet.Ansi)]public static extern int EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);// PInvoke declaration for ChangeDisplaySettings Win32 API//官方这里写错了,字符串只需包括user32.dll即可,CharSet去掉也可以//方法名:ChangeDisplaySettings = ChangeDisplaySettingsA[DllImport("user32.dll", CharSet = CharSet.Ansi)]public static extern int ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);// add more functions as needed ??// constantspublic const int ENUM_CURRENT_SETTINGS = -1;public const int DMDO_DEFAULT = 0;public const int DMDO_90 = 1;public const int DMDO_180 = 2;public const int DMDO_270 = 3;// add more constants as needed ??}class Program{static void Main(string[] args){// initialize the DEVMODE structureDEVMODE dm = new DEVMODE();dm.dmDeviceName = new string(new char[32]);dm.dmFormName = new string(new char[32]);dm.dmSize = (short)Marshal.SizeOf(dm);if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)){// swap width and height//切换宽高影响切换顺序,只能顺时针旋转:先传1,再传2,3,4,//1和4能切换,可以把宽高切换注释了,这样就可以颠倒切换了int temp = dm.dmPelsHeight;dm.dmPelsHeight = dm.dmPelsWidth;dm.dmPelsWidth = temp;if (args.Length > 0){switch (args[0]){case "1":dm.dmDisplayOrientation = NativeMethods.DMDO_270;break;case "2":dm.dmDisplayOrientation = NativeMethods.DMDO_180;break;case "3":dm.dmDisplayOrientation = NativeMethods.DMDO_90;break;case "4":dm.dmDisplayOrientation = NativeMethods.DMDO_DEFAULT;break;default:// unknown orientation value// add exception handling herebreak;}}int iRet = NativeMethods.ChangeDisplaySettings(ref dm, 0);//if (NativeMethods.DISP_CHANGE_SUCCESSFUL != iRet)//{// // add exception handling here//}}}}
}
本文标签: win10屏幕旋转
版权声明:本文标题:win10屏幕旋转 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687604512h120172.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论