Sign in to follow this  
Followers 0
Dirk98

Desktop resolution

8 posts in this topic

Guys, I have a script in the autostart that launches everything I need, but it works only at 1024x768 resolution of the desktop. Do you know a code that can check and change resolution of the desktop if it is different from 1024x768?

Thanks.

Share this post


Link to post
Share on other sites



Look at the Macros @DesktopWidth, @DesktopHeight, and @DesktopDepth. As for the changing of resolution I will let you ponder a tad bit more. Check the help file for further definitions of these macros.

Or run this script.

MsgBox(0, "@Desktop Info", "@DesktopWidth = " & @DesktopWidth & @CRLF & "@DesktopHeight = " & @DesktopHeight & @CRLF & "@DesktopDepth = " & @DesktopDepth)

Use them like a variable - except instead of using $ use @ as the prefix.

~Smith

Share this post


Link to post
Share on other sites

Cool, thanks, guys. Wouldn't think it was so big.

Dirk.

Share this post


Link to post
Share on other sites

I found this function a long time ago on the forum. I use it to change resolutions when they are not what is required or needed. A crude implementation of it is below. This should take care of your issue.

If @DesktopHeight <> 1024 And @DesktopWidth <> 768 Then
    Local $w = 1024
    Local $h = 768
    Local $c = 32
    Local $r = 60

    _ChangeScreenRes($w, $h, $c, $r)
EndIf

;===============================================================================
;
; 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
;
;===============================================================================
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

Share this post


Link to post
Share on other sites

I found this function a long time ago on the forum. I use it to change resolutions when they are not what is required or needed. A crude implementation of it is below. This should take care of your issue.

You should have should clicked the link I posted.

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

Wow, guys, thank you very much. Nahuel, I'm using Volley's code from that thread because he gave it with a concrete example. It is similar to what ktuimala posted, but I guess was still based on your code you posted in that thread. :)

Thanks again, can be very useful.

Edited by Dirk98

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0