Seite 1 von 1

bildschirm auf default setzten doch noch ein problem...

Verfasst: 24.11.2006 13:21
von xverbatim
hi nochmal,

ich dachte, ich kriege das problemlos hin, aber wie kann ich denn die alten bildschirmwerte in eine variable schicken, habe es so versucht; muß dazu sagen, daß ich mich mit purebasic und var. nicht gerade gut auskenne und bitte daher nochmal um help ;-)

das programm schaltet auf eine geringe auflösung und soll nach beenden von programm test.exe wieder auf die alten werte zurückschreiben...

Code: Alles auswählen

dmScreenSettingsOLD.DEVMODE
EnumDisplaySettings_(@dmScreenSettingsOLD)

dmScreenSettings.DEVMODE
  dmScreenSettings\dmSize = SizeOf(DEVMODE)
  dmScreenSettings\dmPelsWidth = 800
  dmScreenSettings\dmPelsHeight = 600
  dmScreenSettings\dmBitsPerPel = 32
  dmScreenSettings\dmFields = 262144 | 524288 | 1048576
 dmScreenSettings\dmDisplayFrequency = 60
 
ChangeDisplaySettings_(@dmScreenSettings, 1)



RunProgram("c:\test.exe", "", "", #PB_Program_Wait)



dmScreenSettings.DEVMODE
  dmScreenSettings\dmSize = SizeOf(dmScreenSettingsOLD.DEVMODE)
  dmScreenSettings\dmPelsWidth = dmScreenSettingsOLD\dmPelsWidth
  dmScreenSettings\dmPelsHeight =dmScreenSettingsOLD\dmPelsHeight
  dmScreenSettings\dmBitsPerPel =dmScreenSettingsOLD\dmBitsPerPel 
  dmScreenSettings\dmFields = 262144 | 524288 | 1048576
 dmScreenSettings\dmDisplayFrequency = dmScreenSettingsOLD\dmDisplayFrequency
ChangeDisplaySettings_(@dmScreenSettings, 1)

oben bei enum gibt mir der compiler eine fehlermeldung aus...
was heißt denn eigentlich DEVMODE ?
gruß t.

Verfasst: 24.11.2006 13:37
von Tafkadasom2k5
Was gibt duir der Compiler denn für eine Meldung aus?

DEVMODE ist eine Struktur. Diese Struktur ist irgednwo in der WinAPI hinterlegt. Was Strukturen sind und was sie bewirken kann man gut in der PBHilfe nachlesen unter "structure".

Diese Struktur ist also von MS festgelegt worden, um damit Bildschirminformationen bequem zu übergeben und abzuspeichern.

Eigene Strukturen kann man auch so erstellen, um damit im eigenen Code Übersicht zu halten.

Code: Alles auswählen

structure Mensch
 sName.s
 lAlter.l
 sEigenschaften.s
EndStructure

verbatim.mensch
verbatim/sName = "T."
verbatim/lAlter = 20
verbatim/sEigenschaften = "Programmiert gerne PB"

Tafka.mensch
Tafka/sName = "Marc"
Tafka/lAlter = 17
Tafka/sEigenschaften = "Spielt leideschaftlich gerne E-Gitarre- und allg. Gitarre seit 10 Jahren."

Debug verbatim/sName
Debug marc/sEigenschaften
Ich hoffe, das erscheint logisch...

Gr33tz
Tafkadasom2k5

Verfasst: 24.11.2006 13:37
von Kaeru Gaman
EnumDisplaySettings_ ermittelt nicht die aktuelle auflösung, sondern alle möglichen auflösungen.
dazu muss es mehrfach aufgerufen werden.
The EnumDisplaySettings function obtains information about one of a display device’s graphics modes. You can obtain information for all of a display device’s graphics modes by making a series of calls to this function.

BOOL EnumDisplaySettings(

LPCTSTR lpszDeviceName, // specifies the display device
DWORD iModeNum, // specifies the graphics mode
LPDEVMODE lpDevMode // points to structure to receive settings
);
Parameters

lpszDeviceName

Pointer to a null-terminated string that specifies the display device whose graphics mode the function will obtain information about.
This parameter can be NULL. A NULL value specifies the current display device on the computer that the calling thread is running on.
If lpszDeviceName is not NULL, the string must be of the form \\.\DisplayX, where X can have the values 1, 2, or 3.
Windows 95: lpszDeviceName must be NULL.

iModeNum

Index value that specifies the graphics mode for which information is to be obtained.
Graphics mode indexes start at zero. To obtain information for all of a display device’s graphics modes, make a series of calls to EnumDisplaySettings, as follows: Set iModeNum to zero for the first call, and increment iModeNum by one for each subsequent call. Continue calling the function until the return value is FALSE.
When you call EnumDisplaySettings with iModeNum set to zero, the operating system initializes and caches information about the display device. When you call EnumDisplaySettings with iModeNum set to a non-zero value, the function returns the information that was cached the last time the function was called with iModeNum set to zero.

lpDevMode

Pointer to a DEVMODE structure into which the function stores information about the specified graphics mode.
The EnumDisplaySettings function sets values for the following five DEVMODE members:

dmBitsPerPel
dmPelsWidth
dmPelsHeight
dmDisplayFlags
dmDisplayFrequency

Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
The function fails if iModeNum is greater than the index of the display device’s last graphics mode. As noted in the description of the iModeNum parameter, you can use this behavior to enumerate all of a display device’s graphics modes.
du solltest dir wirklich mal die win32.hlp downloaden...

super danke

Verfasst: 24.11.2006 13:40
von xverbatim
Danke für die Erklärungen ;-)

jetzt bin ich erstmal WUNSCHLOS GLÜCKLICH; jedenfalls in Bezug auf
Programmieren mit Purebasic ;-)


Gruß T.

Verfasst: 24.11.2006 13:42
von ts-soft
PB hat auch selber Funktionen, die man verwenden kann :mrgreen:

Code: Alles auswählen

If ExamineDesktops()
  old_dmPelsWidth = DesktopWidth(0)
  old_dmPelsHeight = DesktopHeight(0)
  old_dmBitsPerPel = DesktopDepth(0)
  old_dmDisplayFrequency = DesktopFrequency(0)
EndIf

dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(DEVMODE)
dmScreenSettings\dmPelsWidth = 800
dmScreenSettings\dmPelsHeight = 600
dmScreenSettings\dmBitsPerPel = 32
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
dmScreenSettings\dmDisplayFrequency = 60

ChangeDisplaySettings_(@dmScreenSettings, 1)



RunProgram("c:\test.exe", "", "", #PB_Program_Wait)

dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(DEVMODE)
dmScreenSettings\dmPelsWidth = old_dmPelsWidth
dmScreenSettings\dmPelsHeight = old_dmPelsHeight
dmScreenSettings\dmBitsPerPel = old_dmBitsPerPel
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
dmScreenSettings\dmDisplayFrequency = old_dmDisplayFrequency

ChangeDisplaySettings_(@dmScreenSettings, 1)