AW: Kleine Testanwendung für Multi-Monitor-Systeme
Zitat:
Zitat:
Die Grafikkarte bzw. der Schnittstellentreiber Device name: \\.\DISPLAY1 --> Windows-interner Treibername Device string: ATI Radeon HD 5450 --> Gerätename so wie er im Gerätemanager angezeigt wird Active: YES --> Wird im Moment verwendet Primary display: YES --> Primäre Displayschnittstelle Screen is attached to desktop: YES --> Bildschirm ist Teil des Desktops (= "Anzeige auf diesen Bildschirm erweitern" bei Windows) Screen mirrors the desktop: NO --> Bildschirm spiegelt den Desktop (trifft oft auf Beamer zu) Supports more modes than attached monitor: YES --> Grafikkarte kann mehr Auflösungen, Farbtiefen, Refreshraten als der angeschlossene Monitor Removable device: NO --> Weiß ich auch nicht genau, ich vermute das bezieht sich auf USB-Grafikkarten (siehe DISPLAY_DEVICE structure im MSDN) VGA compatible video mode: NO --> Wird wohl nur im abgesicherten Modus als YES angezeigt (^= 640x480-8Bit@60Hz) Der Monitor, Beamer etc. Device name: \\.\DISPLAY1\Monitor0 --> Windows-interner Treibername Device string: PnP-Monitor (Standard) --> Gerätename so wie er im Gerätemanager angezeigt wird Height: 1200 --> Vertikale Auflösung Width: 1600 --> Horizontale Auflösung Desktop anchor coordinates: 0x0 --> Linke obere Ecke relativ zum gesamten Desktop Monitor rect (Left x Top : Right x Bottom): 0x0:1600x1200 --> Kompletter Bereich relativ zum gesamten Desktop, der auf diesem Bildschirm dargestellt wird Work rect without toolbars (Left x Top : Right x Bottom): 118x0:1600x1200 --> Bereich ohne z.B. die Taskleiste relativ zum gesamten Desktop, der auf diesem Bildschirm dargestellt wird Current frequency: 60 Hz --> Refresh-Rate Current color depth: 32 Bit --> Farbtiefe Interessant bei der ganzen Sache: Windows unterscheidet nicht strikt zwischen Videotreiber (im Baum als Karte dargestellt) und Bildschirmen (im Baum als blauer Flatscreen). Vielmehr sieht Windows beides als Einheit an, wobei der Monitor eine Untermenge der Grafikkarte ist. Es gibt auch virtuelle Grafiktreiber die keinen Monitor kennen (z.B. der VNC-Videotreiber). @Bernhard: Genau an dem Problem bastel ich gerade. Ich müsste die Message WM_DISPLAYCHANGE hooken. Allerdings beiß ich da im Moment noch auf Granit:
Delphi-Quellcode:
Ich hab schon die verschiedensten Hook-IDs für SetWindowsHookEx ausprobiert, die Hook-Proc SysMsgHook wird nie aufgerufen wenn sich die Bildschirmeinstellungen ändern. Entweder hab ich den Hook vermurkst (wahrscheinlich) oder Windows sendet einfach kein WM_DISPLAYCHANGE (unwahrscheinlich). Any suggestions?
var
Form1: TForm1; MainHook : HHOOK; function SysMsgHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall; implementation {$R *.dfm} function SysMsgHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall; var Buffer: TEventMsg; begin result:= 0; Buffer:= PEventMsg(lParam)^; if Buffer.Message = WM_DISPLAYCHANGE then begin ShowMessage('OK'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin MainHook:= SetWindowsHookEx(WH_SHELL, SysMsgHook, hInstance, 0); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnhookWindowsHookEx(MainHook); end; |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Nachtrag: Es gab hier zwar schon mal eine Anfrage, aber das geht ja nur über die WndProc bzw. Message-Handler im Hauptfenster. Dann müsste ich das "Refreshen" meiner Komponente aber von außen anstoßen. Das fände ich unschön, darum suche ich nach einer Möglichkeit mit einem Hook zu arbeiten. Dann könnte ich meiner Komponente auch ein Event spendieren, z.B. "OnDisplaySettingsChanged".
|
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe das Testprogramm noch ein bisschen erweitert. Klickt man im Baum auf einen Grafikkarteneintrag, dann enthält die Details-Liste jetzt auch eine komplette Auflistung aller Videomodes, welche die Grafikkarte unterstützt inkl. Vermerk, ob der angeschlossene Monitor die auch mit macht.
Man muss die Details-Liste einfach ein bissi nach unten Scrollen. |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Zitat:
Und wenn Du eh noch erweiterst und Tests haben willst: Die Baumdaten könnten auch mit in die Memobox oder noch besser, warum logst Du nicht gleich ALLES in die Box. (Diesen Modus dann vielleicht abschaltbar machen) Also: - "Moni3 im Baum geclicked" plus Moni Properties - Center Form für Moni2 geclicked - Testform x/y Koordinaten inkl welcher Monito (kontinuierlich) usw. usw. Das dürfte im Problemfall per Copy/ Paste das einfachste Feedback ergeben. |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Bei mir wird ein Monitor doppelt, der andere dreifach angezeigt:
Device name: \\.\DISPLAY1 Device string: Mobile Intel(R) 945 Express Chipset Family Active: YES Primary display: YES Screen is attached to desktop: YES Screen mirrors the desktop: NO Supports more modes than attached monitor: YES Removable device: NO VGA compatible video mode: NO Device name: \\.\DISPLAY1\Monitor0 Device string: Plug and Play Monitor Height: 1200 Width: 1600Desktop anchor coordinates: 0x0 Monitor rect (Left x Top : Right x Bottom): 0x0:1600x1200 Work rect without toolbars (Left x Top : Right x Bottom): 0x0:1600x1170 Current frequency: 60 Hz Current color depth: 32 Bit (und noch zweimal als Monitor1 und Monitor2) und Device name: \\.\DISPLAY2 Device string: Mobile Intel(R) 945 Express Chipset Family Active: YES Primary display: NO Screen is attached to desktop: YES Screen mirrors the desktop: NO Supports more modes than attached monitor: YES Removable device: NO VGA compatible video mode: NO Device name: \\.\DISPLAY2\Monitor0 Device string: Plug and Play Monitor Height: 600 Width: 1024 Desktop anchor coordinates: 1600x0 Monitor rect (Left x Top : Right x Bottom): 1600x0:2624x600 Work rect without toolbars (Left x Top : Right x Bottom): 1600x0:2624x600 Current frequency: 60 Hz Current color depth: 32 Bit (und nochmal als Monitor1) Der erste Monitor ist extern angeschlossen, der zweite ist der vom Notebook selbst. Die Funktionen zum Fenster und Screenshot scheinen sauber zu funktionieren. |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Liste der Anhänge anzeigen (Anzahl: 1)
@Jobo: Das mit dem Baum hat sich von selbst ergeben da meine Komponente intern jede Grafikkarte, jeden Monitor und jeden Videomode als Objekt kapselt. Dann brauchte ich jedem Node im Baum das jeweilige Objekt nur noch als TreeNode.Data zuweisen. Ist aber letztlich Geschmackssache, ich hätte es genausogut auch als flache Liste auswerfen können. Mir gings ja mehr darum zu schauen, ob das bei euch auch rund läuft.
@dummzeuch: Bitte mach mal einen Screenshot von deinem Gerätemanager mit aufgeklappten Grafikkarten- und Monitor-Zweigen wie hier: |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Ob die Infos nun aus dem Baum kommen oder flach, die Hauptidee war, alles in der Memolist zu sammeln.
|
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Liste der Anhänge anzeigen (Anzahl: 1)
So, noch ein kleines Update für heute: Die Test-Anwendung sollte jetzt auf Änderungen der Einstellungen durch die Systemsteuerung reagieren und entsprechend die Daten neu auswerten. Sieht man besonders gut, wenn man die Auflösung des sekundären Monitors ändert, das Testprogramm auf dem primären liegt und Windows nach 15 Sekunden die alten Einstellungen wiederherstellt.
Soweit... Schönen dritten Advent! |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Gibt es dazu auch einen Source ?
Denn manches könnte man ja in eigener Anwendung nutzen .. Ja ist schon klar Beitrag aus 2012 |
AW: Kleine Testanwendung für Multi-Monitor-Systeme
Huh, das war DelphiWorks 1.5 und das Multimonitor-API von Windows 7. Teile davon waren undokumentiert und funktionierten seitens Microsoft eher schlecht als recht. Als dann auch noch die High-DPI-Problematik aufkam habe ich das Thema aufgegeben. Inzwischen hat Delphi vieles davon ja auch ab Werk eingebaut.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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