![]() |
Monitore einzeln auslesen
gut'n Mittag
Ich würde gerne die Bildschirminformationen meiner Bildschirme einzeln / getrennt abfragen. Dazu habe ich hier im Forum schon volgenden Code gefunden:
Delphi-Quellcode:
Blöderweise funzt das bei mir so überhauptnicht.
DC := GetDC(screen.Monitors[i].Handle);
hSize := GetDeviceCaps(DC, HORZSIZE); Ich bekomme da als hSize immer 0 (Was warscheinlich heißt, dass das DC nicht stimmt) Wenn ich statt "screen.Monitors[i].Handle" Das Handle meines Forms verwende: "Form1.Handle" dann bekomm ich die richtige Größe (Nachgemessen, stimmt) Warum ist nun das Handle des Monitors über Screen falsch? Danke für jede Hilfe |
Re: Monitore einzeln auslesen
Was spricht gegen...
Delphi-Quellcode:
hSize:=Screen.Monitors[i].Height;
|
Re: Monitore einzeln auslesen
Weil das nur die Höhe in Pixeln ausgibt.
HORZSIZE Gibt aber die Reale Höhe des Bildschirms in Millimetern aus Wenn ich die irgendwie anders berechnen könnte wäre mir des auch recht, es muss nur Monitorspezifisch sein (ich hab 2 verschiedengroße Bildschirme mit unterschiedlichen Auflösungen) |
Re: Monitore einzeln auslesen
Hab hier leider nur einen Monitor. Aber versuch doch mal folgendes...
Delphi-Quellcode:
Der Desktop ist ein großes Bitmap und der Zugriff erfolgt mit GetDC(0).
var DC:hwnd;
hSize, Width:cardinal; i:integer; begin DC := GetDC(0); hSize := GetDeviceCaps(DC, HORZSIZE); Width:=0; for i:=1 to Screen.MonitorCount do Width:=Width + Screen.Monitors[i-1].Width; for i:=1 to Screen.MonitorCount do ShowMessage(inttostr(i) + '. Monitor: ' + inttostr(round((hSize / Width) * Screen.Monitors[i-1].Width))); ReleaseDC(DC, 0); end; Ist nur so eine Idee... |
Re: Monitore einzeln auslesen
Das Problem an der Sache ist ja, dass 1 Pixel des DesktopBitmap auf dem einen Monitor weniger "breit" (groß) sind wie auf dem anderen.
Ich kann also von dem einen nicht auf den anderen schließen, leider |
Re: Monitore einzeln auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
WMI hilft:
CIMV2 Win32_DesktopMonitor PixelsPerXLogicalInch PixelsPerYLogicalInch |
Re: Monitore einzeln auslesen
könntest du dich etwas preziser ausdrücken?
Ich kann jetz ausgenommen WMI mit garnix dieser Wörter anfangen vllt en Codebeispiel? |
Re: Monitore einzeln auslesen
Zitat:
![]() MSDN dokumentiert alle möglichen WMI Klassen unter http://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx Die Win32_DesktopMonitor Klasse enthält dann z.B. die Properties PixelsPerXLogicalInch und PixelsPerYLogicalInch - eventuell ist das schon die gesuchte Information. Es müßte aber eigentlich auch über eine Win32 Standard API möglich sein auf diese Informationen zuzugreifen... zum Beispiel mit GetDeviceCaps: ![]() LOGPIXELSX, LOGPIXELSY Edit: Link zu WMI Klassenübersicht auf MSDN korrigiert Und diese WMI Funktionen habe ich noch gefunden: CIM_VideoHead http://msdn.microsoft.com/en-us/library/cc136948(VS.85).aspx CIM_MonitorResolution http://msdn.microsoft.com/en-us/library/aa387921(VS.85).aspx |
Re: Monitore einzeln auslesen
Mit diesen Funktionen kann ich leider nur die Daten des Primärmonitors abfragen.
Vllt gibt es ja eine Möglichkeit, diesen zu wechseln? (aus Delphi heraus) |
Re: Monitore einzeln auslesen
Zitat:
![]() Zitat:
|
Re: Monitore einzeln auslesen
EnumDisplayDevices liefert mir Name und Grafikkarte für jeden Monitor, aber immernoch nicht die Größe
Mit GetDeviceCaps bekomm ich alle informationen, aber eben nur zum Primärmonitor Und ich will doch nur die Realgröße jedes eizelnen Bildschirm. Und den Primärmonitor zu wechseln geht nicht? |
Re: Monitore einzeln auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Versuch doch mal folgendes...
|
Re: Monitore einzeln auslesen
Zitat:
|
Re: Monitore einzeln auslesen
@Omata Super, funktioniert einwandfrei
Also ich weiß ja nicht woran des gelegen hat, wenn ich normal mit GETDC(screen.Monitors[x].Handle) versucht habe das DC des Monitors zu bekommen hat des überhaupt nicht geklappt, wenn ich ein x-beliebiges anderes Handle übergeben hab hab ich immer die Daten des Primärmonitors erhalten. Aber die Windows-CallBack-API EnumDisplayMonitors scheint da ja das richtige DC zu liefern. Klasse, damit wär das ganze dann hiermit beantwortet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz