0
我需要獲取系統上特定顯示的屏幕分辨率。 我發現這裏一個偉大的解決方案,它的偉大工程的是: How to list available video modes using C#?C#中的屏幕分辨率出現問題#
然而,當我在「空」替換顯示名稱爲「主」我得不到任何回報。
[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)
{
DISPLAY_DEVICE device = new DISPLAY_DEVICE();
device.Size = (ushort)Marshal.SizeOf(device);
DEVMODE vDevMode = new DEVMODE();
int i = 0;
while (EnumDisplaySettings(@"\\.\DISPLAY1", i, ref vDevMode))
{
Console.WriteLine("Width:{0} Height:{1} Color:{2} Frequency:{3}",
vDevMode.dmPelsWidth,
vDevMode.dmPelsHeight,
1 << vDevMode.dmBitsPerPel, vDevMode.dmDisplayFrequency
);
i++;
}
}
'當我在「Main」中將顯示名稱替換爲「null」時,我什麼也沒有回來。「我不清楚這句話的含義。什麼是'null'指的是什麼? – mjwills
發佈不起作用的代碼,而不是可用的代碼。另外請注意,除非你真的知道你在做什麼,否則當你處理多顯示系統時,顯示名稱是強制性的。我認爲只有當應用程序是一個GUI應用程序時它纔可以工作,因爲它與顯示當前線程的UI的顯示有關 - 它不適用於控制檯應用程序,擁有自己的GUI。 – Luaan
啊,不,我用'null'試過了,它在控制檯應用程序中也能正常工作,至少在Windows 7上(你使用的是Windows?你正在運行應用程序嗎?)。你*使用'EnumDisplaySettings(null,i,ref vDevMode)'而不是'EnumDisplaySettings(「null」,i,ref vDevMode)',對嗎? – Luaan