Bildschirmgröße des benutzers anpassen?

04/26/2010 22:20 WiiZocker#1
Hallo, ich suche eine möglichkeit die Bildschirmgröße mit AutoIt zu ändern.
Das passiert ja auch bei spielen^^

Also ich meine wenn ich das Programm starte, dass der Bildschirm sich einer bestimmten größe anpasst, die ICH^^ im programm eingegeben habe.

Bitte helft mir:handsdown:

MfG WiiZocker
04/26/2010 22:33 Shadow992#2
Quote:
Originally Posted by WiiZocker View Post
Hallo, ich suche eine möglichkeit die Bildschirmgröße mit AutoIt zu ändern.
Das passiert ja auch bei spielen^^

Also ich meine wenn ich das Programm starte, dass der Bildschirm sich einer bestimmten größe anpasst, die ICH^^ im programm eingegeben habe.

Bitte helft mir:handsdown:

MfG WiiZocker
PHP Code:
#include-once
;===============================================================================
;
; Function 
Name:    _ChangeScreenRes()
Description:      Changes the current screen geometrycolour and refresh rate.
Version:          1.0.0.1
Parameter(s):     $i_Width Width of the desktop screen in pixels. (horizontal resolution)
;                   
$i_Height Height of the desktop screen in pixels. (vertical resolution)
;                    
$i_BitsPP Depth of the desktop screen in bits per pixel.
;                    
$i_RefreshRate Refresh rate of the desktop screen in hertz.
Requirement(s):   AutoIt Beta 3.1
; Return Value(s):  On Success Screen is adjusted, @ERROR 0
;                   On Failure sets @ERROR 1
Forum(s):         http://www.autoitscript.com/forum/index.php?showtopic=20121
Author(s):        Original code psandu.ro
;                   Modifications PartyPooper
;
;===============================================================================
Func _ChangeScreenRes($i_Width = @DesktopWidth$i_Height = @DesktopHeight$i_BitsPP = @DesktopDepth$i_RefreshRate = @DesktopRefresh)
    
Local Const $DM_PELSWIDTH 0x00080000
    Local 
Const $DM_PELSHEIGHT 0x00100000
    Local 
Const $DM_BITSPERPEL 0x00040000
    Local 
Const $DM_DISPLAYFREQUENCY 0x00400000
    Local 
Const $CDS_TEST 0x00000002
    Local 
Const $CDS_UPDATEREGISTRY 0x00000001
    Local 
Const $DISP_CHANGE_RESTART 1
    Local 
Const $DISP_CHANGE_SUCCESSFUL 0
    Local 
Const $HWND_BROADCAST 0xffff
    Local 
Const $WM_DISPLAYCHANGE 0x007E
    
If $i_Width "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
    
If $i_Height "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
    
If $i_BitsPP "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
    
If $i_RefreshRate "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
    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
($DEVMODE2BitOR($DM_PELSWIDTH$DM_PELSHEIGHT$DM_BITSPERPEL$DM_DISPLAYFREQUENCY), 5)
        
DllStructSetData($DEVMODE4$i_Width2)
        
DllStructSetData($DEVMODE4$i_Height3)
        
DllStructSetData($DEVMODE4$i_BitsPP1)
        
DllStructSetData($DEVMODE4$i_RefreshRate5)
        
$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 16 $i_Width)
                
$DEVMODE ""
                
Return 1
            
Case Else
                
$DEVMODE ""
                
SetError(1)
                Return 
$B
        EndSelect
    
EndIf
EndFunc ;==>_ChangeScreenRes 
Sollte damit gehen ...
04/26/2010 23:03 Proffni#3
Shadow ich mag dich nich >.< xD
ich hab jetz 1 1/2 stunden gesucht ob ich eine lösung für das problem finde >.< jetzt nach geschätzt 1 stunde allein googeln bin ich auf das ergebnis gestoßen.. freu mich schon, dass ich jmd helfen kann aktuallisier den thread hier und was ist? >.< du bist mir zuvor gekommen... nicht das erste mal :(



bei deinem script fehlt halt noch die letzte (n zwei) Zeile(n)

PHP Code:
;_ChangeScreenRes( [Width [, Height [, BitsPerPixel [, RefreshRate]]]] )
_ChangeScreenRes(800600
in der 1. Zeile wird nur beschrieben welche werte du einsetzen musst :D

du kannst es natürlich auch so machen:
PHP Code:
global $width=inputbox("breite""Bitte gib die gewünschte Breite ein")
global 
$height=inputbox("Höhe","Bitte gib die gewünschte höhe ein")
_ChangeScreenRes($width$height
oder das ganze in eine Inputbox einpacken. Was das angeht kann man dann aber unendlich viel wieder rumbasteln, oder einfach statt 800 und 600 im oberen beispiel deine breite und höhe einsetzen, wenn eine im vornherein festgelegte Auflösung verwendet werden soll.

Vg, Proff
04/27/2010 14:56 WiiZocker#4
Bin etwas iritiert welche lösung soll ich nehmen ist ja beides das gleiche o.O

Am besten ich probiere beide aus.Ihr bekommt ein THX vorallem Shadow992 weil er sooo viel schreibt nur um zu antworten xD

Edit: gehen beide nicht )= *traurig*

Muss ich ein include machen oder so?
04/27/2010 14:58 HardCore.1337#5
Er hat den Code nicht selber geschrieben :D
Trotzdem thx auch von mir, weil es echt nützlich ist.
04/27/2010 15:27 Shadow992#6
Quote:
Originally Posted by WiiZocker View Post
Bin etwas iritiert welche lösung soll ich nehmen ist ja beides das gleiche o.O

Am besten ich probiere beide aus.Ihr bekommt ein THX vorallem Shadow992 weil er sooo viel schreibt nur um zu antworten xD

Edit: gehen beide nicht )= *traurig*

Muss ich ein include machen oder so?
Ich habe es nicht probiert , komisch dass es nicht geht ...

Btw. wie kommst du darauf , dass der Code von mir ist ?
Code:
;===============================================================================
;
; Function Name:    _ChangeScreenRes()
; Description:      Changes the current screen geometry, colour and refresh rate.
; Version:          1.0.0.1
; Parameter(s):     $i_Width - Width of the desktop screen in pixels. (horizontal resolution)
;                   $i_Height - Height of the desktop screen in pixels. (vertical resolution)
;                    $i_BitsPP - Depth of the desktop screen in bits per pixel.
;                    $i_RefreshRate - Refresh rate of the desktop screen in hertz.
; Requirement(s):   AutoIt Beta > 3.1
; Return Value(s):  On Success - Screen is adjusted, @ERROR = 0
;                   On Failure - sets @ERROR = 1
; [COLOR="Red"]Forum(s):         http://www.autoitscript.com/forum/index.php?showtopic=20121
; Author(s):        Original code - psandu.ro
;                   Modifications - PartyPooper[/COLOR]
;
;===============================================================================
04/27/2010 15:33 WiiZocker#7
Quote:
Btw. wie kommst du darauf , dass der Code von mir ist ?
^^war mal so ne SCHRECK~REAKTION xD

Also mit der auflösung die im skript angegeben ist klappt's aber wenn ich das ändere so wie ich es möchte sagt der immer:

Unable to change screen - check parameters


So ich glaue ich weiß wie ich das problem löse nur was ist

Code:
$iRefreshRate
Das es eine Variable ist weiß ich ist ja klar xD
Aber was ist RefreshRate?
04/27/2010 15:57 Shadow992#8
Quote:
Originally Posted by WiiZocker View Post
^^war mal so ne SCHRECK~REAKTION xD

Also mit der auflösung die im skript angegeben ist klappt's aber wenn ich das ändere so wie ich es möchte sagt der immer:

Unable to change screen - check parameters


So ich glaue ich weiß wie ich das problem löse nur was ist

Code:
$iRefreshRate
Das es eine Variable ist weiß ich ist ja klar xD
Aber was ist RefreshRate?
Naja ist eben die Refresh Rate ...
von 40-60 Hz glaub ich ..
04/27/2010 16:06 WiiZocker#9
mal gucken, ich habe ja 60 Hz^^

Code:
$iWidth = 1400
$iHeight = 900
$iBitsPP = 32
$iRefreshRate = 60
Ist da was falsch?

Oder könntest du mal testen ob dein bild sich verändert???

Code:
;===============================================================================
;
; Function Name:    _ChangeScreenRes()
; Description:      Changes the current screen geometry, colour and refresh rate.
; Version:          1.0.0.1
; Parameter(s):     $i_Width - Width of the desktop screen in pixels. (horizontal resolution)
;                   $i_Height - Height of the desktop screen in pixels. (vertical resolution)
;                    $i_BitsPP - Depth of the desktop screen in bits per pixel.
;                    $i_RefreshRate - Refresh rate of the desktop screen in hertz.
; Requirement(s):   AutoIt Beta > 3.1
; Return Value(s):  On Success - Screen is adjusted, @ERROR = 0
;                   On Failure - sets @ERROR = 1
; Forum(s):         http://www.autoitscript.com/forum/index.php?showtopic=20121
; Author(s):        Original code - psandu.ro
;                   Modifications - PartyPooper
;
;===============================================================================

$iWidth = 1400
$iHeight = 900
$iBitsPP = 32
$iRefreshRate = 60

$vRes = _ChangeScreenRes($iWidth, $iHeight, $iBitsPP, $iRefreshRate)
If @error Then
    MsgBox(262160, "ERROR", "Unable to change screen - check parameters")
EndIf

Func _ChangeScreenRes($i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_BitsPP = @DesktopDepth, $i_RefreshRate = @DesktopRefresh)
    Local Const $DM_PELSWIDTH = 0x00080000
    Local Const $DM_PELSHEIGHT = 0x00100000
    Local Const $DM_BITSPERPEL = 0x00040000
    Local Const $DM_DISPLAYFREQUENCY = 0x00400000
    Local Const $CDS_TEST = 0x00000002
    Local Const $CDS_UPDATEREGISTRY = 0x00000001
    Local Const $DISP_CHANGE_RESTART = 1
    Local Const $DISP_CHANGE_SUCCESSFUL = 0
    Local Const $HWND_BROADCAST = 0xffff
    Local Const $WM_DISPLAYCHANGE = 0x007E
    If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
    If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
    If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
    If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
    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 ;==>_ChangeScreenRes
04/27/2010 17:15 Proffni#10
so hab mir das script nochmal angeschaut.

schreibt folgende zeile nicht einfach einen wert in $vRes? (was weiß ich welchen :D)
Ersetze die folgende Zeile:
PHP Code:
$vRes _ChangeScreenRes($iWidth$iHeight$iBitsPP$iRefreshRate
mal durch ein schlichtes

PHP Code:
_ChangeScreenRes($newwidth,$newheight
$newwidth und $newheight deklarierst du entweder drüber einfach oder du setzt dafür einfach einen wert ein.
mögliche Auflösungen stellt er dann ein, bei nicht möglichen gibt er dann den fehler wieder aus.

ich hoffe dann funktionierts :D

Vg, Proff
04/27/2010 17:50 WiiZocker#11
thx teste es gleich^^
04/27/2010 19:22 Shadow992#12
Quote:
Originally Posted by Proffni View Post
so hab mir das script nochmal angeschaut.

schreibt folgende zeile nicht einfach einen wert in $vRes? (was weiß ich welchen :D)
Ersetze die folgende Zeile:
PHP Code:
$vRes _ChangeScreenRes($iWidth$iHeight$iBitsPP$iRefreshRate
mal durch ein schlichtes

PHP Code:
_ChangeScreenRes($newwidth,$newheight
$newwidth und $newheight deklarierst du entweder drüber einfach oder du setzt dafür einfach einen wert ein.
mögliche Auflösungen stellt er dann ein, bei nicht möglichen gibt er dann den fehler wieder aus.

ich hoffe dann funktionierts :D

Vg, Proff
Das wird so sicher nicht funktionieren , da die Funktion 4 Parameter erwartet und nicht 2 --> Error
04/27/2010 20:08 Proffni#13
Quote:
Originally Posted by Shadow992 View Post
Das wird so sicher nicht funktionieren , da die Funktion 4 Parameter erwartet und nicht 2 --> Error
also bei mir gibts da keinen error und es funktioniert alles...
aber im zweifelsfall kann man das doch dann auch so machen:

PHP Code:
$newwidth=1280
$newheight
=1024
$BitsPP
=@DesktopDepth
$Refreshrate
=@DesktopRefresh
_ChangeScreenRes
($newwidth,$newheight,$BitsPP,$Refreshrate
die newwidth und newheight dann halt entsprechend anpassen

Vg, Proff
04/27/2010 20:43 Shadow992#14
Quote:
Originally Posted by Proffni View Post
also bei mir gibts da keinen error und es funktioniert alles...
aber im zweifelsfall kann man das doch dann auch so machen:

PHP Code:
$newwidth=1280
$newheight
=1024
$BitsPP
=@DesktopDepth
$Refreshrate
=@DesktopRefresh
_ChangeScreenRes
($newwidth,$newheight,$BitsPP,$Refreshrate
die newwidth und newheight dann halt entsprechend anpassen

Vg, Proff
Oh stimmt sorry , hab nicht richtig hingeschaut ;)
Du hattest Recht ...
04/27/2010 20:52 Proffni#15
yoa in der funktion hat der ja quasi schon default werte definiert, in diesem fall halt die alten werte.

Vg, proff