Hi Kurjo
As an addition to what Mike already said, when the display setting is change, icon position on the desktop also change. Some users can get mad when an application change the display resolution without his/her permission.
Do it at your own risk!
Here is the code:
--------------
Local lnReturn, lnWidth, lnHeight, lnScrInfo
Local lnhDC, lnBPP, lnPELsWidth, lnPELsHeight
Local lcPELsWidth, lcPELsHeight
Local DeviceMode, OldDeviceMode
Declare Long EnumDisplaySettings in User32 ;
String cDeviceName, Long nGraphicsMode, String @cDevMode
Declare Long ChangeDisplaySettings in User32 ;
String cDevMode, Long nFlags
Declare Integer SendMessage in User32 ;
Long nhWnd, Integer Msg, Integer wParam, Long lParam
*** New Display Settings (800x600)
lnWidth = 800
lnHeight = 600
DeviceMode = replicate(chr(0), 134)
If (EnumDisplaySettings(Null, -1, @DeviceMode) != 0)
OldDeviceMode = DeviceMode
lnBPP = DWord2Num(substr(DeviceMode,105,4))
lnPELsWidth = DWord2Num(substr(DeviceMode,109,4))
lnPELsHeight = DWord2Num(substr(DeviceMode,113,4))
lcPELsWidth = Num2DWord(lnWidth)
lcPELsHeight = Num2DWord(lnHeight)
DeviceMode = left(DeviceMode, 108) + ;
lcPELsWidth + lcPELsHeight + right(DeviceMode, 8)
lnReturn = ChangeDisplaySettings(DeviceMode, 4)
Do case
Case (lnReturn == 0) && success
ChangeDisplaySettings(DeviceMode, 1)
*** Notify all the windows that display settings has changed
lnScrInfo = lnHeight * 2^lnBPP + lnWidth
SendMessage(0xFFFF, 0x7E, lnBPP, lnScrInfo)
MessageBox('Display Settings has been changed' ;
+ chr(13) + 'Press any key to Reset', 64, ;
' Reset Display Settings')
ChangeDisplaySettings(OldDeviceMode, 1)
lnScrInfo = lnPELsHeight * 2^lnBPP + lnPELsWidth
SendMessage(0xFFFF, 0x7E, lnBPP, lnScrInfo)
Case (lnReturn == 1) && need restart
?'Change Display Needs to restart'
Otherwise
MessageBox('Display Settings not supported', ;
16, ' *** ERROR ***')
EndCase
endif
Clear Dlls
Clear all
Function DWord2Num(tcBuffer)
Local lnResult
lnResult = asc(substr(tcBuffer, 1,1)) + ;
asc(substr(tcBuffer, 2,1)) * 256 + ;
asc(substr(tcBuffer, 3,1)) * 65536 + ;
asc(substr(tcBuffer, 4,1)) * 16777216
Return lnResult
EndFunc
Function Num2DWord(tnNum)
Local lc0, lc1, lc2, lc3
lc3 = chr(int(tnNum / 16777216))
tnNum = mod(tnNum, 16777216)
lc2 = chr(int(tnNum / 65536))
tnNum = mod(tnNum, 65536)
lc1 = chr(int(tnNum / 256))
lc0 = chr(mod(tnNum, 256))
Return lc0 + lc1 + lc2 + lc3
EndFunc
---------------
Regards
-- AirCon --