Hallo,
Ich habe folgendes Problem:
Ich möchte eine GUI der größe 800*600 Pixel auf dem ganzen Bildschirm anzeigen (am besten sogar ohne Title und Rahmen, ist aber zweitrangig), ohne dass sich die GUI größe ändert, und ohne die Bildschirmauflösung von Windows zu ändern...
Also im Prinzip so, wie das manche Spiele machen, die Im Vollbildmodus arbeiten, allerdings nicht die Windows Bildschirmauflösung ändern. Wie mache ich das und ist das mit AutoIt überhaupt machbar?
Vollbild GUI mit größe 800x600
-
- [ offen ]
-
Sundown -
2. Juli 2011 um 17:50 -
Geschlossen -
Erledigt
-
-
Zitat
die Im Vollbildmodus arbeiten, allerdings nicht die Windows Bildschirmauflösung ändern
Doch die ändern sehr wohl die Auflösung wenn sie im Spiel anders als auf dem Desktop ist...
Was du hier beschreibst ist nicht möglich... Du kannst allerdings eine geringere Auflösung simulieren indem du die einzelnen Pixel vergrößerst. -
okee, kann man sich die Position der Desktop Elemente merken, sodass man sie nach einem Wechsel der Bildschirmauflösung, und einem späteren wechsel auf den vorherigen "standard" wieder richtig anordnet. Grund dieses gedankens:
Ich habe hier ein Spiel, welches im Vollbild modus Spielt. Wenn ich jetzt allerdings minimiere, hat auch die Taskleiste, bzw das ganze Windows system, eine andere Bildschirm auflösung ( noch nicht in Desktop einstellungen geprüft). Wenn ich jetzt Jedoch das Spiel schließe, sind alle Ordner usw. wie vorher angeordnet, wenn ich selbst die Bildschirmauflösung änder, dann muss ich danach neu sortieren.... -
Dazu Gibts ein gutes Programm: http://www.chip.de/downloads/DeskSave_32044747.html
Man kann mehrere Anordnungen (Von den Icons) speichern und von verschiedenen Auflösungen.
Funktioniert auch auf Windows 7 auch wenns bei Chip nicht steht.
Hab ich noch vor kurzem benutzt als sich mysteriöserweise jedes Icon nach einem Neustart wo anders "versteckt" hat. -
Naja, wäre eher eine Notlösung, da alles andere als benutzerfreundlich^^
Werde wohl einfach auf Vollbild verzichten und es als Fenster machen -
Diese Vollbilddarstellung ist in DirectX/Direct3D bzw. OpenGl (glut) integriert. Daher ist es einfach, mit einer dieser Bibliotheken Vollbildspiele zu erstellen.
GLUT verwendet EnumDisplaySettings / ChangeDisplaySettings. Da der Quellcode erhältlich ist, kannst du das gerne in AutoIt nachbauen. In 90% der Fälle sind die Icons nacher noch am richtigen Platz, es kann in seltenen Fällen jedoch Probleme geben. Das ist mir schon ein paar Mal bei Spielen passiert.
http://www.opengl.org/resources/libraries/glut/ -
Hier mal eine kleine Funktion zum ändern der Bilschirmauflösung:
Spoiler anzeigen
[autoit]Func _CHANGESCREENRES($I_WIDTH = @DesktopWidth, $I_HEIGHT = @DesktopHeight, $I_BITSPP = @DesktopDepth, $I_REFRESHRATE = @DesktopRefresh)
[/autoit]
Local Const $DM_PELSWIDTH = 524288
Local Const $DM_PELSHEIGHT = 1048576
Local Const $DM_BITSPERPEL = 262144
Local Const $DM_DISPLAYFREQUENCY = 4194304
Local Const $CDS_TEST = 2
Local Const $CDS_UPDATEREGISTRY = 1
Local Const $DISP_CHANGE_RESTART = 1
Local Const $DISP_CHANGE_SUCCESSFUL = 0
Local Const $HWND_BROADCAST = 65535
Local Const $WM_DISPLAYCHANGE = 126
If $I_WIDTH = "" Or $I_WIDTH = -1 Then $I_WIDTH = @DesktopWidth
If $I_HEIGHT = "" Or $I_HEIGHT = -1 Then $I_HEIGHT = @DesktopHeight
If $I_BITSPP = "" Or $I_BITSPP = -1 Then $I_BITSPP = @DesktopDepth
If $I_REFRESHRATE = "" Or $I_REFRESHRATE = -1 Then $I_REFRESHRATE = @DesktopRefresh
Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
If @error Then
$B = 0
SetError(1)
Return $B
Else
$B = $B[0]
EndIf
If $B <> 0 Then
DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
DllStructSetData($DEVMODE, 4, $I_WIDTH, 2)
DllStructSetData($DEVMODE, 4, $I_HEIGHT, 3)
DllStructSetData($DEVMODE, 4, $I_BITSPP, 1)
DllStructSetData($DEVMODE, 4, $I_REFRESHRATE, 5)
$B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)
If @error Then
$B = -1
Else
$B = $B[0]
EndIf
Select
Case $B = $DISP_CHANGE_RESTART
$DEVMODE = ""
Return 2
Case $B = $DISP_CHANGE_SUCCESSFUL
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, "int", $I_BITSPP, "int", $I_HEIGHT * 2 ^ 16 + $I_WIDTH)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
SetError(1)
Return $B
EndSelect
EndIf
EndFuncMfG, campweb
-
Ist nicht ganz perket. Für temporäre Änderungen solltest du nicht in die Registry speichern und CDS_FULLSCREEN setzen.
Edit: Durch CDS_FULLSCREEN wird verhindert, dass der Explorer die Icons neu anordnet.