C# 在两个屏幕中切换横向和纵向模式

C# 在两个屏幕中切换横向和纵向模式,c#,windows,C#,Windows,我可以在一个屏幕上切换Landsacpe模式和肖像模式,方法是使用我今天早上完成的以下代码。问题是我的电脑里有两个屏幕。我想屏幕1是横向模式,屏幕2是纵向模式。但我不知道如何修改代码使其工作。对不起,我的英语不好 class ModeSetting { public const int LANDSCAPE = 0; public const int PORTRAIT = 1; public static bool ChangeMode(int screenID, int

我可以在一个屏幕上切换Landsacpe模式和肖像模式,方法是使用我今天早上完成的以下代码。问题是我的电脑里有两个屏幕。我想屏幕1是横向模式,屏幕2是纵向模式。但我不知道如何修改代码使其工作。对不起,我的英语不好

class ModeSetting
{
    public const int LANDSCAPE = 0;
    public const int PORTRAIT = 1;

    public static bool ChangeMode(int screenID, int modeID)
    {
        //I'm not using screenID here. Let me know how to do that. How to get screenID
        //Or anything that help me.
        DEVMODE dm = new DEVMODE();
        dm.dmDeviceName = new string(new char[32]);
        dm.dmFormName = new string(new char[32]);
        //dm.dmSize = Marshal.SizeOf(dm);
        if (modeID != PORTRAIT) modeID = LANDSCAPE;

        if (0 != NativeMethods.EnumDisplaySettings(
        null,
        NativeMethods.ENUM_CURRENT_SETTINGS,
        ref dm))
        {
            int temp = dm.dmPelsHeight;
            dm.dmPelsHeight = dm.dmPelsWidth;
            dm.dmPelsWidth = temp;
            dm.dmDisplayOrientation = modeID;

            int iRet = NativeMethods.ChangeDisplaySettings(ref dm, 0);
            Console.WriteLine(iRet);

            if (NativeMethods.DISP_CHANGE_SUCCESSFUL != iRet)
            {
                return false;
            }
            return true;
        }

        return false;
    }

    [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;
    }

    internal 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
        [DllImport("user32.dll", CharSet = CharSet.Ansi)]
        public static extern int ChangeDisplaySettings(
        ref DEVMODE lpDevMode,
        int dwFlags);

        // constants
        public 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;
        public const int DISP_CHANGE_SUCCESSFUL = 0;
    }
}
我还可以通过以下方式在横向和纵向模式之间切换:

ModeSetting.ChangeMode(0, ModeSetting.LANDSCAPE);//0 here is screen ID that I cannot do when two screens
ModeSetting.ChangeMode(0, ModeSetting.PORTRAIT);

仅供参考,这个词拼写正确landscape@JohnSaunders现在他的两部分代码不匹配了。上面的是风景画,下面的是风景画。看看你做了什么…:/@B.K.对不起,我还以为我把那个卷回去了。@johnsa理解得很好-我只是在取笑你。