Empfohlende Auflösung automatisch einstellen
Hallo,
wir haben an unserem Standort ca. 1000 Rechner mit den unterschiedlichsten Monitoren. In unserem standardisierten Image, ist eine sehr geringe Auflösung eingestellt, damit sie auch überall dargestellt werden kann.
Ich suche nach einer Möglichkeit, die Auflösung (per batch, wmi, powershell etc.) auf den von Windows empfohlenen Wert zu setzen.
Im Internet konnte ich leider keine Lösungen finden. Ich habe ja die Möglichkeit, die Auflösung über die Registry zu editieren, aber da die Hardware an den Abreitsplätzen variiert, kann ich da leider keinen festen Wert festlegen. Optimal wäre eben, wenn der empfohlene Wert genommen werden würde.
Hat jemand soetwas schonmal gemacht? Oder hat jemand einen Tipp?
Gruß
Tim
wir haben an unserem Standort ca. 1000 Rechner mit den unterschiedlichsten Monitoren. In unserem standardisierten Image, ist eine sehr geringe Auflösung eingestellt, damit sie auch überall dargestellt werden kann.
Ich suche nach einer Möglichkeit, die Auflösung (per batch, wmi, powershell etc.) auf den von Windows empfohlenen Wert zu setzen.
Im Internet konnte ich leider keine Lösungen finden. Ich habe ja die Möglichkeit, die Auflösung über die Registry zu editieren, aber da die Hardware an den Abreitsplätzen variiert, kann ich da leider keinen festen Wert festlegen. Optimal wäre eben, wenn der empfohlene Wert genommen werden würde.
Hat jemand soetwas schonmal gemacht? Oder hat jemand einen Tipp?
Gruß
Tim
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 278536
Url: https://administrator.de/forum/empfohlende-aufloesung-automatisch-einstellen-278536.html
Ausgedruckt am: 22.04.2025 um 08:04 Uhr
7 Kommentare
Neuester Kommentar

Moin,
kein Problem, zwei Möglichkeiten findest du hier: http://www.serveradventures.com/the-adventures/set-native-resolution-in ...
Gruß grexit
kein Problem, zwei Möglichkeiten findest du hier: http://www.serveradventures.com/the-adventures/set-native-resolution-in ...
Gruß grexit
Hallo,
tauch mal mit wbemtest.exe nach cim_VideoController oder cim_VideoControllerResolution
Ich weiß nicht, ob du so nur abfragen oder auch einstellen kannst. Und zum nachschauen fehlt jetzt die Zeit.
In diesem Zusammenhang mal nach den Stichworten "Powershell" und "get-wmiObject" suchen. Vielleicht bringt es was ...
Viel Erfolg
Ankh
tauch mal mit wbemtest.exe nach cim_VideoController oder cim_VideoControllerResolution
Ich weiß nicht, ob du so nur abfragen oder auch einstellen kannst. Und zum nachschauen fehlt jetzt die Zeit.
In diesem Zusammenhang mal nach den Stichworten "Powershell" und "get-wmiObject" suchen. Vielleicht bringt es was ...
Viel Erfolg
Ankh
Hallo fd13hsk,
bist du mit dem von grexit verlinkten Script weitergekommen?
Bei mir will das nicht.
Ich hole mir die höchste verfügbare Auflösung:
Mit diesen Werten (sind korrect!) rufe ich die verlinkte Funktion auf:
Und was wird eingestellt? --> Die geringste vorhandene Auflösung (hier 800 x 600).
Egal welche Werte ich der Funktion mitgebe, es wird in jedem Fall 800 x 600 eingestellt ...
Hast du das am Klappen gekriegt?
Gruß
Ankh
<Edit> Ab Win8.1 ist es ganz easy: Get-DisplayResolution bzw. Set-DisplayResolution </Edit>
bist du mit dem von grexit verlinkten Script weitergekommen?
Bei mir will das nicht.
Ich hole mir die höchste verfügbare Auflösung:
$colItems = Get-WmiObject -query "Select * from cim_VideoControllerResolution"
$HorRes = $colItems[$colItems.count-1].HorizontalResolution
$VerRes = $colItems[$colItems.count-1].VerticalResolution
Mit diesen Werten (sind korrect!) rufe ich die verlinkte Funktion auf:
Set-ScreenResolution $horRes $verRes
Und was wird eingestellt? --> Die geringste vorhandene Auflösung (hier 800 x 600).
Egal welche Werte ich der Funktion mitgebe, es wird in jedem Fall 800 x 600 eingestellt ...
Hast du das am Klappen gekriegt?
Gruß
Ankh
<Edit> Ab Win8.1 ist es ganz easy: Get-DisplayResolution bzw. Set-DisplayResolution </Edit>
Auch Moin,
es läuft also wieder einmal auf 3rd Party hinaus - schade.
Ich werde es mal mit FreePascal probieren ...
Gruß und good luck
Ankh
P.S. Danke für die Info.
<Edit>
Nur, um es mal zu zeigen - mit FreePascal ist es etwas "kompakter":
Dazu kommen natürlich noch einige Zeilen für die Fensterdarstellung und Einbindung notwendiger Units.
Aber der Kern der Sache ist hiermit abgeknallt.
</Edit>
es läuft also wieder einmal auf 3rd Party hinaus - schade.
Ich werde es mal mit FreePascal probieren ...
Gruß und good luck
Ankh
P.S. Danke für die Info.
<Edit>
Nur, um es mal zu zeigen - mit FreePascal ist es etwas "kompakter":
function TForm1.Changeresolution(sizeX,sizeY,BpP:DWORD):Boolean;
var DeviceMode:TDeviceModeA;
i:integer;
begin
i:=0;
Result:=False;
While EnumDisplaySettings(nil,i,DeviceMode) Do
Begin
With DeviceMode Do
if (dmPelsWidth=sizeX) and
(dmPelsHeight=sizeY) and
(dmBitsPerPel=BpP) Then
Begin
Case ChangeDisplaySettings(DeviceMode,CDS_TEST) of
DISP_CHANGE_SUCCESSFUL:Result:=True;
DISP_CHANGE_RESTART:ShowMessage('Neustart erforderlich');
DISP_CHANGE_BADFLAGS:ShowMessage('Ungültige Einstellungen');
DISP_CHANGE_FAILED:ShowMessage('Auflösung konnte nicht geändert werden');
DISP_CHANGE_BADMODE:ShowMessage('Bildschirm unterstützt diese Auflösung nicht');
DISP_CHANGE_NOTUPDATED:ShowMessage('Registry konnte nicht aktualisiert werden')
Else
Result:=True;
End;
If Result Then
ChangeDisplaySettings(DeviceMode,CDS_FULLSCREEN);
End;
Inc(i);
End;
end;
Dazu kommen natürlich noch einige Zeilen für die Fensterdarstellung und Einbindung notwendiger Units.
Aber der Kern der Sache ist hiermit abgeknallt.
</Edit>

Hallo nochmal.
Die haben da im Code auf der Seite etwas durcheinander gebracht...
Das hier macht hier überall das gewünschte und ist auch zuverlässiger bei der Auswahl der Auflösung, die haben dort die Modi nämlich gar nicht nach Größe sortiert und sind nur davon ausgegangen das die Liste schon sortiert ist !
Die haben da im Code auf der Seite etwas durcheinander gebracht...
Das hier macht hier überall das gewünschte und ist auch zuverlässiger bei der Auswahl der Auflösung, die haben dort die Modi nämlich gar nicht nach Größe sortiert und sind nur davon ausgegangen das die Liste schon sortiert ist !
Function Set-ScreenResolution {
param (
[Parameter(Mandatory=$true,
Position = 0)]
[int]
$Width,
[Parameter(Mandatory=$true,
Position = 1)]
[int]
$Height
)
$pinvokeCode = @"
using System;
using System.Runtime.InteropServices;
namespace Resolution
{
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE1
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
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 = 32)]
public string dmFormName;
public short dmLogPixels;
public short 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;
};
class User_32
{
[DllImport("user32.dll")]
public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);
[DllImport("user32.dll")]
public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);
public const int ENUM_CURRENT_SETTINGS = -1;
public const int CDS_UPDATEREGISTRY = 0x01;
public const int CDS_TEST = 0x02;
public const int DISP_CHANGE_SUCCESSFUL = 0;
public const int DISP_CHANGE_RESTART = 1;
public const int DISP_CHANGE_FAILED = -1;
}
public class PrmaryScreenResolution
{
static public string ChangeResolution(int width, int height)
{
DEVMODE1 dm = GetDevMode1();
if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmPelsWidth = width;
dm.dmPelsHeight = height;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);
if (iRet == User_32.DISP_CHANGE_FAILED)
{
return "Unable To Process Your Request. Sorry For This Inconvenience.";
}
else
{
iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);
switch (iRet)
{
case User_32.DISP_CHANGE_SUCCESSFUL:
{
return "Success";
}
case User_32.DISP_CHANGE_RESTART:
{
return "You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.";
}
default:
{
return "Failed To Change The Resolution";
}
}
}
}
else
{
return "Failed To Change The Resolution.";
}
}
private static DEVMODE1 GetDevMode1()
{
DEVMODE1 dm = new DEVMODE1();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
return dm;
}
}
}
"@
Add-Type $pinvokeCode -ErrorAction SilentlyContinue
[Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height)
}
$mode = gwmi -query "select * from CIM_VideoControllerResolution" | sort HorizontalResolution -Descending | select -First 1
Set-ScreenResolution $mode.HorizontalResolution $mode.VerticalResolution