*!* Cambia la resolución de la pantalla
*!* Sintaxis ChangeRes(tnWidth, tnHeight)
DO CASE
CASE SYSMETRIC(1)=640 AND SYSMETRIC(2)=480
LANCHO=SYSMETRIC(1)
LALTO =SYSMETRIC(2)
CASE SYSMETRIC(1)=800 AND SYSMETRIC(2)=600
LANCHO=SYSMETRIC(1)
LALTO =SYSMETRIC(2)
CASE SYSMETRIC(1)=1024 AND SYSMETRIC(2)=768
LANCHO=SYSMETRIC(1)
LALTO =SYSMETRIC(2)
CASE SYSMETRIC(1)=1280 AND SYSMETRIC(2)=1024
LANCHO=SYSMETRIC(1)
LALTO =SYSMETRIC(2)
OTHERWISE
MESSAGEBOX([LA RESOLUCION DEL MONITOR ES DESCONOCIDA])
ENDCASE
ALTO=768
ANCHO=1024
ChangeRes(ANCHO,ALTO)
wait window NOWAIT 'LA RESOLUCION FUE CAMBIADA A:'+ALLTRIM(STR(ANCHO))+' X '+ALLTRIM(STR(ALTO))+' PIXELES'
FUNCTION ChangeRes
LPARAMETERS tnWidth, tnHeight
LOCAL lnWidth, lnHeight, lnModeNum, lcDevMode
*!* Valores
lnModeNum = 0
lcDevMode = REPLICATE(CHR(0), 156)
lnWidth = IIF(EMPTY(tnWidth), 800, tnWidth)
lnHeight = IIF(EMPTY(tnHeight), 600, tnHeight)
*!* Instrucciones DECLARE DLL para cambiar resolución
DECLARE INTEGER EnumDisplaySettings IN Win32API STRING lpszDeviceName, INTEGER iModeNum, STRING @lpDevMode
DECLARE INTEGER ChangeDisplaySettings IN Win32API STRING @lpDevMode , INTEGER dwFlags
*!* Bucle para obtener todos los modos disponibles
DO WHILE EnumDisplaySettings(NULL, lnModeNum, @lcDevMode) <> 0
lnModeNum = lnModeNum +1
ENDDO
*!* Configurar la structura DevMode
lcDevMode = STUFF(lcDevMode, 41, 4, LongToStr(1572864))
lcDevMode = STUFF(lcDevMode, 109, 4, LongToStr(tnWidth)) && Ancho
lcDevMode = STUFF(lcDevMode, 113, 4, LongToStr(tnHeight)) && Alto
*!* Cambiar resolucion
ChangeDisplaySettings(@lcDevMode, 1)
ENDFUNC
*!* Convierte un long integer a un 4-byte character string
*!* Sintaxis: LongToStr(lnLongVal)
*!* Valor devuelto: lcRetStr
*!* Argumentos: lnLongVal
*!* lnLongVal especifica el long integer a convertir
FUNCTION LongToStr
LPARAMETERS lnLongVal
LOCAL lnCnt, lcRetStr
lcRetStr = ''
FOR lnCnt = 24 TO 0 STEP -8
lcRetStr = CHR(INT(lnLongVal/(2^lnCnt))) + lcRetStr
lnLongVal = MOD(lnLongVal, (2^lnCnt))
NEXT
RETURN lcRetStr
ENDFUNC