Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
DisplaySettings ?
#1
HI Gintaras !

I use this to change my Screen solution..


Macro Macro2
Code:
Copy      Help
DisplaySettings(32 1024 768)

but how can i receive the current setting? I need the x y coordinates and the color depth in a string.
i made some experiments lol

Macro Macro3
Code:
Copy      Help
int Desktop = win("Program Manager" "Progman")
int x y cx cy
str CurrentSolution

GetWinXY Desktop x y cx cy
CurrentSolution.format("%i %i" cx cy)
out CurrentSolution

but i cant figure out how to get the col depth. maybe u know a shorter way that includes it.

Thank you very much
#2
Macro Macro848
Code:
Copy      Help
int wid hei col
wid=ScreenWidth
hei=ScreenHeight
_i=GetDC(0); col=GetDeviceCaps(_i BITSPIXEL); ReleaseDC(0 _i)
#3
thank you very much its exaxt what i was loking for !

DisplaySettings(32 1024 768)

should it return 1 if succesful ?
the example says yes but doesnt matter if it fails or not it re´turns 0 ??
#4
out DisplaySettings(32 1024 768)

On my computer returns 1 when successful.

If you want to help to debug this:
Create this function and call it instead of DisplaySettings. What it shows in QM output when successfully changes display settings?
Function DisplaySettings2
Code:
Copy      Help
function! [colorbits] [xpixels] [ypixels]

def CCHDEVICENAME 32
def CCHFORMNAME 32
def CDS_UPDATEREGISTRY  0x00000001
def DM_BITSPERPEL       0x00040000
def DM_PELSWIDTH        0x00080000
def DM_PELSHEIGHT       0x00100000
def DISP_CHANGE_SUCCESSFUL       0
def DISP_CHANGE_RESTART          1
type DEVMODE !dmDeviceName[CCHDEVICENAME] @dmSpecVersion @dmDriverVersion @dmSize @dmDriverExtra dmFields @dmOrientation @dmPaperSize @dmPaperLength @dmPaperWidth @dmScale @dmCopies @dmDefaultSource @dmPrintQuality @dmColor @dmDuplex @dmYResolution @dmTTOption @dmCollate !dmFormName[CCHFORMNAME] @dmUnusedPadding @dmBitsPerPel dmPelsWidth dmPelsHeight dmDisplayFlags dmDisplayFrequency
dll user32
,#EnumDisplaySettings $lpszDeviceName iModeNum DEVMODE*lpDevMode
,#ChangeDisplaySettings DEVMODE*lpDevMode dwflags

DEVMODE d
int i
for i 0 1000
,if(EnumDisplaySettings(0 i &d)=0) break
,if(colorbits=0 and xpixels=0 and ypixels=0)
,,out "colorbits=%i  xpixels=%i  ypixels=%i" d.dmBitsPerPel d.dmPelsWidth d.dmPelsHeight
,,continue
,if((colorbits=0 or colorbits=d.dmBitsPerPel) and (xpixels=0 or xpixels=d.dmPelsWidth) and (ypixels=0 or ypixels=d.dmPelsHeight))
,,d.dmFields=0
,,if(colorbits) d.dmFields|DM_BITSPERPEL
,,if(xpixels) d.dmFields|DM_PELSWIDTH
,,if(ypixels) d.dmFields|DM_PELSHEIGHT
,,i=ChangeDisplaySettings(&d CDS_UPDATEREGISTRY)
,,out "ChangeDisplaySettings returned %i" i
,,if(i=DISP_CHANGE_SUCCESSFUL) ret 1
,,if(i=DISP_CHANGE_RESTART) mes "Display settings will be changed after you restart computer." "Display Settings" "i"
,,ret
#5
i ran it 3 times

1st was succesful , 2nd and 3rd not

always the same result ;


ChangeDisplaySettings returned 0
#6
Then DisplaySettings and DisplaySettings2 return 1. You said it returns 0.
#7
sorry for not beeing clear..

I tried it 3 times and only 1 of the trys was succesful but on all tries it returned 0
#8
Please post your macro that calls the function and displays its return value.
#9
Ok im sorry just tried it on my other Pc and it works... im realy sorry for taking ur time for nothing.

Thanks you Gintaras

Regards
#10
This function can be used with multiple monitors.
Function DisplaySettingsMultiMonitor
Code:
Copy      Help
function! monitor [colorbits] [xpixels] [ypixels] [xmonitor] [ymonitor]

;Changes display resolution and/or other settings of specified monitor.
;You can set only required arguments, others set to 0.
;If all arguments except monitor are 0, then only shows available display settings.
;Returns 1 if successful, 0 if fails.
;If needs to restart computer, shows message box and returns 0.

;monitor - 1-based monitor index. 0 and 1 is primary monitor.
;colorbits - color resolution (4, 8, 16, 24 or 32 bits).
;xpixels, ypixels - width and height.
;xmonitor, ymonitor - monitor position. For primary monitor must be 0.

;EXAMPLES
;DisplaySettingsMultiMonitor(2) ;;show available settings of monitor 2

;DisplaySettingsMultiMonitor(2 0 1024 768) ;;change display resolution of monitor 2

;DisplaySettingsMultiMonitor(2 8) ;;change color depth of monitor 2

;DisplaySettingsMultiMonitor(2 0 0 0 1024 200) ;;change position of monitor 2


def CDS_UPDATEREGISTRY  0x00000001
def DM_BITSPERPEL       0x00040000
def DM_PELSWIDTH        0x00080000
def DM_PELSHEIGHT       0x00100000
def DISP_CHANGE_SUCCESSFUL       0
def DISP_CHANGE_RESTART          1
type DEVMODE !dmDeviceName[32] @dmSpecVersion @dmDriverVersion @dmSize @dmDriverExtra dmFields {{@dmOrientation @dmPaperSize @dmPaperLength @dmPaperWidth @dmScale @dmCopies @dmDefaultSource @dmPrintQuality} []{POINTL'dmPosition dmDisplayOrientation dmDisplayFixedOutput}} @dmColor @dmDuplex @dmYResolution @dmTTOption @dmCollate !dmFormName[32] @dmLogPixels dmBitsPerPel dmPelsWidth dmPelsHeight {dmDisplayFlags []dmNup} dmDisplayFrequency dmICMMethod dmICMIntent dmMediaType dmDitherType dmReserved1 dmReserved2 dmPanningWidth dmPanningHeight
type MONITORINFO cbSize RECT'rcMonitor RECT'rcWork dwFlags
type MONITORINFOEX :MONITORINFO'_base !szDevice[32]
dll user32
,#EnumDisplaySettings $lpszDeviceName iModeNum DEVMODE*lpDevMode
,#ChangeDisplaySettingsEx $lpszDeviceName DEVMODE*lpDevMode hwnd dwflags !*lParam
,#GetMonitorInfo hMonitor MONITORINFO*lpmi

;monitor index -> device name
str devname
if(monitor and monitor!=1)
,int hm=MonitorFromIndex(monitor)
,if(monitor>0 and hm=MonitorFromIndex(1)) ret
,MONITORINFOEX mi.cbSize=sizeof(mi)
,if(!GetMonitorInfo(hm +&mi)) ret
,lpstr t=&mi.szDevice; devname=t

DEVMODE d.dmSize=sizeof(d)
int i
for i 0 1000
,if(EnumDisplaySettings(devname i &d)=0) break
,if(colorbits=0 and xpixels=0 and ypixels=0 and xmonitor=0 and ymonitor=0)
,,out "colorbits=%i  xpixels=%i  ypixels=%i  frequency=%i" d.dmBitsPerPel d.dmPelsWidth d.dmPelsHeight d.dmDisplayFrequency
,,continue
,if((colorbits=0 or colorbits=d.dmBitsPerPel) and (xpixels=0 or xpixels=d.dmPelsWidth) and (ypixels=0 or ypixels=d.dmPelsHeight))
,,d.dmFields=0
,,if(colorbits) d.dmFields|DM_BITSPERPEL
,,if(xpixels) d.dmFields|DM_PELSWIDTH
,,if(ypixels) d.dmFields|DM_PELSHEIGHT
,,if(xmonitor or ymonitor) d.dmFields|DM_POSITION; d.dmPosition.x=xmonitor; d.dmPosition.y=ymonitor
,,i=ChangeDisplaySettingsEx(devname &d 0 CDS_UPDATEREGISTRY 0)
,,if(i=DISP_CHANGE_SUCCESSFUL) ret 1
,,if(i=DISP_CHANGE_RESTART) mes "Display settings will be changed after you restart computer." "Display Settings" "i"
,,ret
#11
nice !! Thanks


Forum Jump:


Users browsing this thread: 1 Guest(s)