如何使用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语言写了一个小程序。希望这有帮助!