Vollbild GUI mit größe 800x600

  • 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?

  • 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....

  • 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/

    Einmal editiert, zuletzt von progandy (3. Juli 2011 um 12:22)

  • 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)
    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
    EndFunc

    [/autoit]

    MfG, 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.

    Einmal editiert, zuletzt von progandy (3. Juli 2011 um 12:29)