AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Monitore einzeln auslesen

Ein Thema von Anonymos · begonnen am 31. Mai 2009 · letzter Beitrag vom 3. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Anonymos
(Gast)

n/a Beiträge
 
#1

Monitore einzeln auslesen

  Alt 31. Mai 2009, 14:45
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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 16:31
Was spricht gegen...
hSize:=Screen.Monitors[i].Height;
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#3

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 16:49
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)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 17:12
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...
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#5

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 17:26
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
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 18:11
WMI hilft:

CIMV2
Win32_DesktopMonitor
PixelsPerXLogicalInch
PixelsPerYLogicalInch
Miniaturansicht angehängter Grafiken
desktopmonitor_167.jpg  
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#7

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 18:17
könntest du dich etwas preziser ausdrücken?
Ich kann jetz ausgenommen WMI mit garnix dieser Wörter anfangen
vllt en Codebeispiel?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Monitore einzeln auslesen

  Alt 31. Mai 2009, 20:51
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
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#9

Re: Monitore einzeln auslesen

  Alt 1. Jun 2009, 10:27
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)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Monitore einzeln auslesen

  Alt 1. Jun 2009, 10:45
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.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr.
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