【发布时间】:2015-01-27 23:29:08
【问题描述】:
有没有办法获得给定屏幕的所有有效分辨率?
我目前有一个包含所有有效屏幕的下拉菜单(使用 Screen.AllScreens)。当用户选择一个屏幕时,我想向他们展示第二个下拉列表,列出该显示器的所有有效分辨率(不只是当前分辨率)。
【问题讨论】:
标签: c# resolution
有没有办法获得给定屏幕的所有有效分辨率?
我目前有一个包含所有有效屏幕的下拉菜单(使用 Screen.AllScreens)。当用户选择一个屏幕时,我想向他们展示第二个下拉列表,列出该显示器的所有有效分辨率(不只是当前分辨率)。
【问题讨论】:
标签: c# resolution
我认为应该可以使用Windows Management Instrumentation (WMI) 获取信息。 WMI 可以从 .NET 中使用 System.Management 命名空间中的类进行访问。
解决方案类似于以下内容。我不太了解 WMI,无法立即找到您要查找的信息,但我找到了适用于显卡支持的分辨率的 WMI 类。该代码需要引用 System.Management.dll 并导入 System.Management 命名空间。
var scope = new ManagementScope();
var query = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution");
using (var searcher = new ManagementObjectSearcher(scope, query))
{
var results = searcher.Get();
foreach (var result in results)
{
Console.WriteLine(
"caption={0}, description={1} resolution={2}x{3} " +
"colors={4} refresh rate={5}|{6}|{7} scan mode={8}",
result["Caption"], result["Description"],
result["HorizontalResolution"],
result["VerticalResolution"],
result["NumberOfColors"],
result["MinRefreshRate"],
result["RefreshRate"],
result["MaxRefreshRate"],
result["ScanMode"]);
}
}
【讨论】:
以下链接包含详细的代码示例:
任务 2:更改显示分辨率
http://msdn.microsoft.com/en-us/library/aa719104(VS.71).aspx#docum_topic2
【讨论】:
接受的答案似乎不适用于 Windows 8.1,至少在我的机器上是这样。查询运行良好,但结果中有 0 个条目。考虑到 Bijoy K Jose 的评论,我想我不是唯一一个。
但是,以下问题的经过验证的答案效果很好: How to list available video modes using C#?
感谢 Vimvq1987
【讨论】: