如何使用 C# 列出可用的视频模式? [英] How to list available video modes using C#?

查看:14
本文介绍了如何使用 C# 列出可用的视频模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找到了使用 C++ 的好例子(http://www.codeproject.com/KB/tips/resswitch.aspx),但不在 C# 中.

I've found nice examples using C++ (http://www.codeproject.com/KB/tips/resswitch.aspx), but not in C#.

有人可以帮忙吗?

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

The exact function that list the video modes is:

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"功能?

But sincerelly I cannot understand that C++ code. Where I can find that "thismode" function?

推荐答案

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

If you mean video modes are available resolutions, try to invoke EnumDisplaySettingsEx

可在此处找到详细信息:

details can be found here:

http://msdn.microsoft.com/en-us/library/dd162612(VS.85).aspx

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

small program that lists available resolutions:

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

    }

}

这篇关于如何使用 C# 列出可用的视频模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆