如何使用C#列出可用的视频模式? 我已经找到了使用C++()的好例子,但在C<< /P>中没有找到。

如何使用C#列出可用的视频模式? 我已经找到了使用C++()的好例子,但在C<< /P>中没有找到。,c#,winapi,interop,screen-resolution,C#,Winapi,Interop,Screen Resolution,有人能帮忙吗 编辑: 列出视频模式的确切功能是: BOOL CVideoModes::GetAvailableVideoModes(CAvailableVideoModes& modes) { modes.SetSize(0, 5); int i=0; DEVMODE dm; while (EnumDisplaySettings(NULL, i, &dm)) { CVideoMode thismode(dm.dmBitsPerPel, dm.dmPe

有人能帮忙吗

编辑: 列出视频模式的确切功能是:

BOOL CVideoModes::GetAvailableVideoModes(CAvailableVideoModes& modes)
{
  modes.SetSize(0, 5);
  int i=0;
  DEVMODE dm;

  while (EnumDisplaySettings(NULL, i, &dm))
  {
    CVideoMode thismode(dm.dmBitsPerPel, dm.dmPelsWidth, 
                        dm.dmPelsHeight, dm.dmDisplayFrequency);
    modes.SetAtGrow(i, thismode);
    ++i;
  }

  modes.FreeExtra();

  return (i>0);
}

但是我不能理解C++代码。在哪里可以找到“thismode”功能?

如果您的意思是视频模式是可用分辨率,请尝试调用
EnumDisplaySettingsEx

详情可在此找到:

列出可用分辨率的小程序:

using System;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ListResolutions
{

    class Program
    {
        [DllImport("user32.dll")]
        public static extern bool EnumDisplaySettings(
              string deviceName, int modeNum, ref DEVMODE devMode);
        const int ENUM_CURRENT_SETTINGS = -1;

        const int ENUM_REGISTRY_SETTINGS = -2;

        [StructLayout(LayoutKind.Sequential)]
        public struct DEVMODE
        {

            private const int CCHDEVICENAME = 0x20;
            private const int CCHFORMNAME = 0x20;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
            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 ScreenOrientation dmDisplayOrientation;
            public int dmDisplayFixedOutput;
            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
            public string dmFormName;
            public short dmLogPixels;
            public int 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;

        }

        static void Main(string[] args)
        {            
                DEVMODE vDevMode = new DEVMODE();
                int i = 0;
                while (EnumDisplaySettings(null, i, ref vDevMode))
                {
                    Console.WriteLine("Width:{0} Height:{1} Color:{2} Frequency:{3}",
                                            vDevMode.dmPelsWidth,
                                            vDevMode.dmPelsHeight,
                                            1 << vDevMode.dmBitsPerPel,         vDevMode.dmDisplayFrequency
                                        );
                i++;
                }
        }

    }

}
使用系统;
使用System.Linq;
使用System.Runtime.InteropServices;
使用System.Windows.Forms;
名称空间列表解析
{
班级计划
{
[DllImport(“user32.dll”)]
公共静态外部布尔枚举显示设置(
字符串deviceName、int modeNum、ref DEVMODE DEVMODE);
常量int枚举当前设置=-1;
const int ENUM_REGISTRY_SETTINGS=-2;
[StructLayout(LayoutKind.Sequential)]
公共结构DEVMODE
{
私有常量int CCHDEVICENAME=0x20;
私有常量int CCHFORMNAME=0x20;
[Marshallas(UnmanagedType.ByValTStr,SizeConst=0x20)]
公共字符串dmDeviceName;
公开短版本;
公开短讯;
公开短消息;
公共短dmDriverExtra;
公共域;
公共int DMX;
公共关系;
公共屏幕导向和显示导向;
公共int dmDisplayFixedOutput;
公共短彩色;
公共短双工;
公共短期债务解决方案;
公共短期期权;
公开发行短期票据;
[Marshallas(UnmanagedType.ByValTStr,SizeConst=0x20)]
公共字符串dmFormName;
公共短像素;
公共int dmBitsPerPel;
公共int dmPelsWidth;
公共内特公寓;
公共int dmDisplayFlags;
公共整数显示频率;
公共管理方法;
公众意向;
公共媒体类型;
公共int-dmDitherType;
公共int dmReserved1;
公共int dmReserved2;
公共整数dmPanningWidth;
公共交通高度;
}
静态void Main(字符串[]参数)
{            
DEVMODE vDevMode=新的DEVMODE();
int i=0;
while(EnumDisplaySettings(null、i、ref vDevMode))
{
WriteLine(“宽度:{0}高度:{1}颜色:{2}频率:{3}”,
vDevMode.dmPelsWidth,
vDevMode.dmPelsHeight,

1我知道您对VC++没有太多经验?此模式是CVideoMode的一个实例。要解决您的问题,您可以尝试EnumDisplaySettings/EnumDisplaySettingsEx。它们是Win32 API,因此您不能直接调用。有关详细信息,请参阅我的答案:)我知道枚举播放设置/枚举播放性别,但我不知道如何实现……我发现的唯一代码是C++,但我不能解密……我刚在C语言写了一个小程序。希望这有帮助!