Die Bildschirmauflösung ohne Windows Forms Referenz zu bekommen?

stimmen
1

Ich brauche die Auflösung des Desktop meines Test läuft auf bekommen. Zuvor war packte ich die Auflösung wie folgt aus:

Screen screen = Screen.PrimaryScreen;
int screenWidth = screen.Bounds.Width;
int screenHeight = screen.Bounds.Height;

Leider verwenden System.Windows.Formsist nicht mehr möglich. Mein Projekt ist .NET Kern, so vorzugsweise Ich brauche ein NuGet Paket für diesen.

Wenn jemand irgendwelche Vorschläge bekommt ist würde ich es zu schätzen wissen.

Veröffentlicht am 18/12/2018 um 11:05
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Wenn Sie verwenden möchten , nicht System.Windows.Forms(oder nicht kann), können Sie die Bildschirmauflösung erhalten , indem eine Windows - API - Funktion EnumDisplaySettings.

Um die WinAPI-Funktion aufrufen, können Sie die P verwenden / Invoke-Funktion, die auf .NET-Core auch zur Verfügung steht. Bitte beachten Sie, dass dies nur auf einem Windows-System einwandfrei funktioniert, weil es kein WinAPI auf Nicht-Windows-Zielen ist.

Die Funktionsdeklaration sieht folgendermaßen aus:

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

Sie müssen auch die WinAPI DEVMODEstruct Definition:

[StructLayout(LayoutKind.Sequential)]
struct DEVMODE
{
  [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 int 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;
}

Eigentlich brauchen Sie nicht die meisten dieser Felder der Struktur. Die interessantesten sind dmPelsWidthund dmPelsHeight.

Rufen Sie die Funktion wie folgt aus:

const int ENUM_CURRENT_SETTINGS = -1;

DEVMODE devMode = default;
devMode.dmSize = (short)Marshal.SizeOf(devMode);
EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref devMode);

Jetzt können Sie die Bildschirmauflösung überprüfen in den dmPelsWidthund dmPelsHeightFelder der devModeStruktur.

Da wir angeben , nullals erstes Argument, beschreibt die Funktion die aktuelle Anzeigevorrichtung auf dem Computer , auf das der anrufende Faden läuft.

Beantwortet am 18/12/2018 um 16:06
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more