C# - rozdzielczość ekranu

0

Witam.

Niedawno zacząłem zabawę z C# i dręczy mnie pewna kwestia. Potrzebuję sprawdzić czy dana rozdzielczość ekranu jest obsługiwana przez monitor. No właśnie, ale nawet nie bardzo mam pomysł jak. Byłbym wdzięczny za nakierowanie/wskazanie za czym mam googlować.

Pozdro.

0

Użyj javascript i skorzystaj z screen.width, screen.height, screen.colorDepth

Nie wiem dlaczego pomyślałem ze chodzi Ci sprawdzanie przes strone internetowa a nie przez aplikacje windowsowa, odpowiedź oczywiście tyczy sie tego pierwszego:)

0

Koledzy powyżej myślą o jakiś dziwnych metodach. Napisałem przy pomocy p/invoke wiki i codeproject taką klasę (korzysta z WinApi, więc tylko dla Windows):

public static class DisplayModes
{
    public static List<DisplayMode> GetDisplayModes()
    {
        List<DisplayMode> displayModes = new List<DisplayMode>();
        DEVMODE devMode = new DEVMODE();
        for (int i = 0; EnumDisplaySettings(null, i, ref devMode) != 0; i++)
        {
            displayModes.Add(new DisplayMode { Width = devMode.dmPelsWidth, Height = devMode.dmPelsHeight, Frequency = devMode.dmDisplayFrequency, Bits = devMode.dmBitsPerPel });
        }
        return displayModes;
    }

    public struct DisplayMode
    {
        public int Width;
        public int Height;
        public int Frequency;
        public int Bits;

        public override string ToString()
        {
            return Width.ToString() + "x" + Height.ToString() + "@" + Frequency.ToString() + " (" + Bits.ToString() + ")";
        }
    }

    [DllImport("user32.dll")]
    private static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);

    [StructLayout(LayoutKind.Sequential)]
    private struct DEVMODE
    {
        public const int CCHDEVICENAME = 32;
        public const int CCHFORMNAME = 32;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
        public string dmDeviceName;
        public short dmSpecVersion;
        public short dmDriverVersion;
        public short dmSize;
        public short dmDriverExtra;
        public int dmFields;

        public short dmOrientation;
        public short dmPaperSize;
        public short dmPaperLength;
        public short dmPaperWidth;

        public short dmScale;
        public short dmCopies;
        public short dmDefaultSource;
        public short dmPrintQuality;
        public short dmColor;
        public short dmDuplex;
        public short dmYResolution;
        public short dmTTOption;
        public short dmCollate;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
        public string dmFormName;
        public short dmLogPixels;
        public int dmBitsPerPel;    // Declared wrong in the full framework
        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;

        public int dmPositionX; // Using a PointL Struct does not work
        public int dmPositionY;

    }
}

Używasz jej tak:

List<DisplayModes.DisplayMode> dm = DisplayModes.GetDisplayModes();

// szukane
int width = 1280;
int height = 800;

bool supported = dm.Exists((displayMode) => (displayMode.Width == width && displayMode.Height == height));
0

Dziękuję bardzo wszystkim za pomoc, przejrzę linki i sprawdzę się metodę Rev.pl.

Dzięki jeszcze raz.

Pozdro.

0

Failed To Change The Resolution. podczas dzialania programu.

Kod:
public Form1()
{
InitializeComponent();
Screen Srn = Screen.PrimaryScreen;
int tempHeight = Srn.Bounds.Width;
int tempWidth = Srn.Bounds.Height;

            int FixHeight = 600;
            int FixWidth = 800;
            Resolution.CResolution ChangeRes = new Resolution.CResolution(FixHeight, FixWidth);
        } 
        this.FormBorderStyle = FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1