Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

Windows-Bildschirmaufl├Âsung auslesen ?

Allgemeines zum Thema EventGhost
Post Reply
Sackzehe
Posts: 5
Joined: Sun May 21, 2006 5:15 pm

Windows-Bildschirmaufl├Âsung auslesen ?

Post by Sackzehe »

Hallo,

Wiedermal eine kurze Frage: Kann man in Python die aktuell eingestellte Windows-Bildschirmaufl├Âsung auslesen, um sie in eg.globals-Variablen zu speichern ?

Danke,
Dieter
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Code: Select all

from eg.WinAPI.Display import GetDisplays




display = GetDisplays()[0]






mode = display.GetCurrentMode() 
width, height = mode[0]

print width, height
Sackzehe
Posts: 5
Joined: Sun May 21, 2006 5:15 pm

Post by Sackzehe »

Vielen Dank, funktioniert wunderbar !
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Wie kommt man denn da an die Position der Bildschirme?
Es w├ñre auch ganz nett, wenn man die Position gleich beim Aufl├Âsung wechseln mit angeben kann
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Wenn "i" die Nummer des Bildschirms (ausgehend von 0) ist, dann kannst du sowas machen:

Code: Select all

import wx
print wx.Display(i).GetGeometry()
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

mir ist grade aufgefallen, dass die Aufl├Âsungen und Position gar nicht ge├ñndert werden, solange man EG nich neustartet

Folgendes gibt bei mir immer das gleich aus, auch wenn ich die Aufl├Âsung ├ñndere.

Code: Select all

import wx
import eg
from win32ui import CreateWindowFromHandle
from eg.WinAPI.Utils import GetTopLevelWindowOf 
from win32gui import IsWindow
import win32gui
import win32con

        #get dimensions of target Monitor
screen = 0        
display = wx.Display(screen)
print "moving window to screen", screen
display.GetCurrentMode()
screenTop = display.GetGeometry().GetY()
screenLeft = display.GetGeometry().GetX()
screenWidth = display.GetGeometry().GetWidth()
screenHeight = display.GetGeometry().GetHeight()
screenBottom = display.GetGeometry().GetBottomRight().y
screenRight = display.GetGeometry().GetBottomRight().x
print "Screen", screenTop, screenLeft, screenBottom, screenRight, screenWidth, screenHeight
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Ist ja lustig.

Na dann muss ich wohl mal eine eigene Funktion daf├╝r schreiben.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Code: Select all

from eg.WinAPI.Display import GetDisplays




display = GetDisplays()[0]

print display.GetRectangle()

Code: Select all

    def GetRectangle(self):
        """
        Returns the displays position and size as a tuple.
        
        The fields are: (left, top, width, height)
        """
Ist in 707 drin.
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

funktioniert bei mir immer noch nicht zuverlässig, aber anscheinend liegt das Problem wo anders.
Wenn ich mit EG die Aufl├Âsung ├ñndere und die ├änderungen nicht in die Registry geschrieben werden, dann wird die alte Aufl├Âsung ausgelesen. Das geht dann aber sogar so weit, dass in den Anzeigeeigenschaften noch die alte Aufl├Âsung drin steht. Aber auch irgendwie nicht immer-
*gr├╝bel*

Also:
EG neustarten
Aufl├Âsung auslesen geht
Mit Eventghost Aufl├Âsung ├ñndern ohne in die Registry zu schreiben
Aufl├Âsung auslesen gibt alte Werte aus
Mit Eventghost Aufl├Âsung ├ñndern mit in Registry schreiben
Aufl├Âsung auslesen geht
Mit Eventghost Aufl├Âsung ├ñndern ohne in die Registry zu schreiben
Aufl├Âsung auslesen gibt alte Werte aus
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Hmm, versuch noch mal die 708. Die Doku zu EnumDisplaySettingsEx sagt:
When you call EnumDisplaySettingsEx with iModeNum set to zero, the operating system initializes and caches information about the display device. When you call EnumDisplaySettingsEx with iModeNum set to a nonzero value, the function returns the information that was cached the last time the function was called with iModeNum set to zero.
Das ist nat├╝rlich besonders sinnig, wenn man f├╝r iModeNum auch noch die Konstante ENUM_CURRENT_SETTINGS (Retrieve the current settings for the display device) definiert.

Ich hab jetzt mal einen Aufruf von EnumDisplaySettingsEx mit iModeNum = 0 vorgesetzt.
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Ändert nicht wirklich etwas
So krieg ich unter Umständen auch solche Ausgaben, wonach der zweite Monitor zur Hälfte im ersten liegen würde.
(0, 0, 1920L, 1200L)
(1280, 176, 1280L, 1024L)
Wenn die Werte in die Registry geschrieben werden sollen, dann stimmt zwar die Aufl├Âsung, aber die Position ist falsch. Ohne Schreiben in die Registry ├ñndert sich gar nichts an der Ausgabe.
Der "Change Display Settings" Dialog w├ñhlt ├╝brigens auch die falsche Aufl├Âsung. Die Position kann man da ja leider nicht angeben oder einsehen.

Wenn ich die Einstellungen per Anzeigeeigenschafte ändere, dann passt es bei beiden Monitoren
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Nach Infos aus dem Netz, geht das Setzen der Position auch nur wenn man in die Registry schreibt. Wahrscheinlich kann man deshalb auch nicht die aktuellen Werte lesen, sondern nur die Registry-Werte- Aber trotzdem alles komisch.

Na ja, ich werde mir das irgendwann mal genauer ansehen.
Post Reply