![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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