Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Monitore einzeln auslesen (https://www.delphipraxis.net/134880-monitore-einzeln-auslesen.html)

Anonymos 31. Mai 2009 13:45


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:
DC := GetDC(screen.Monitors[i].Handle);
hSize := GetDeviceCaps(DC, HORZSIZE);
Blöderweise funzt das bei mir so überhauptnicht.
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

omata 31. Mai 2009 15:31

Re: Monitore einzeln auslesen
 
Was spricht gegen...
Delphi-Quellcode:
hSize:=Screen.Monitors[i].Height;

Anonymos 31. Mai 2009 15:49

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)

omata 31. Mai 2009 16:12

Re: Monitore einzeln auslesen
 
Hab hier leider nur einen Monitor. Aber versuch doch mal folgendes...
Delphi-Quellcode:
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;
Der Desktop ist ein großes Bitmap und der Zugriff erfolgt mit GetDC(0).

Ist nur so eine Idee...

Anonymos 31. Mai 2009 16:26

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

hathor 31. Mai 2009 17:11

Re: Monitore einzeln auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
WMI hilft:

CIMV2
Win32_DesktopMonitor
PixelsPerXLogicalInch
PixelsPerYLogicalInch

Anonymos 31. Mai 2009 17:17

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?

mjustin 31. Mai 2009 19:51

Re: Monitore einzeln auslesen
 
Zitat:

Zitat von Anonymos
könntest du dich etwas preziser ausdrücken?
Ich kann jetz ausgenommen WMI mit garnix dieser Wörter anfangen
vllt en Codebeispiel?

WMI kann aus Delphi über eine importierte Typbibliothek angesteuert werden. Bei Zugriff auf den lokalen Rechner ist das relativ einfach. Ich weiss nicht ob dieser Artikel noch auf dem aktuellen Stand ist, aber er zeigt in etwa worum es dabei geht:

http://entwickler-forum.de/showthread.php?t=22427

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:

http://msdn.microsoft.com/en-us/library/ms929230.aspx

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

Anonymos 1. Jun 2009 09:27

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)

mjustin 1. Jun 2009 09:45

Re: Monitore einzeln auslesen
 
Zitat:

Zitat von Anonymos
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)

EnumDisplayDevices käme noch in Frage:

http://msdn.microsoft.com/en-us/libr...09(VS.85).aspx

Zitat:

The EnumDisplayDevices function lets you obtain information about the display devices in the current session.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz