Este pedacito de código lo basé en este link
http://www.news2news.com/vfp/index.php?example=542 y lo usé para hacer el
manejo de resoluciones, tamaño de ventanas y ubicación de las preferencias
del usuario donde poner las cosas. Espero te sirva.


DO declare

LOCAL lcBuffer, lcBuffer2, lnIndex, lnFlags, lcDeviceName

STORE "" TO lcBuffer, lcBuffer2, lcDeviceName

STORE 0 TO lnIndex, lnFlags

CREATE CURSOR screens (DeviceIndex I, DeviceName C(32), PrimaryDevice L,
ScreenWidth I, ScreenHeight I)

lcBuffer = spNum2DWord(424) + REPLICATE(CHR(0), 420)

DO WHILE .T.

IF EnumDisplayDevices(NULL, m.lnIndex, @m.lcBuffer, 0)=0

EXIT

ENDIF

lcDeviceName = SUBSTR(m.lcBuffer, 5, 32)

lcDeviceName = SUBSTR(m.lcDeviceName, 1, AT(CHR(0), m.lcDeviceName)-1)

lnFlags = spBuf2Word(SUBSTR(m.lcBuffer, 165, 2))

*-- If the device is active

IF BITTEST(m.lnFlags,0)

INSERT INTO screens (deviceindex, devicename, primarydevice);

VALUES (m.lnIndex, m.lcDeviceName, BITTEST(m.lnFlags,2))

lcBuffer2 = REPLICATE(CHR(0), 1024)

IF EnumDisplaySettings(m.lcDeviceName, -1, @m.lcBuffer2) <> 0

REPLACE;

screenwidth WITH spBuf2DWord(SUBSTR(m.lcBuffer2, 109,4)),;

screenheight WITH spBuf2DWord(SUBSTR(m.lcBuffer2, 113,4)) IN screens

ENDIF

ENDIF

lnIndex = m.lnIndex + 1

ENDDO

GO TOP

BROWSE NORMAL NOWAIT

* end of main

*-------------------------------------------

PROCEDURE declare

DECLARE INTEGER EnumDisplaySettings IN user32;

STRING lpszDeviceName, INTEGER iModeNum, STRING @lpDevMode

DECLARE INTEGER EnumDisplayDevices IN user32;

STRING lpDevice, INTEGER iDevNum,;

STRING @lpDisplayDevice, INTEGER dwFlags

ENDPROC

FUNCTION spNum2DWord(lnValue)

#DEFINE m0 0x0000100

#DEFINE m1 0x0010000

#DEFINE m2 0x1000000

IF lnValue < 0

lnValue = 0x100000000 + lnValue

ENDIF

LOCAL b0, b1, b2, b3

b3 = Int(lnValue/m2)

b2 = Int((lnValue - b3*m2)/m1)

b1 = Int((lnValue - b3*m2 - b2*m1)/m0)

b0 = Mod(lnValue, m0)

RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)

ENDFUNC

FUNCTION spBuf2DWord(lcBuffer)

RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;

BitLShift(Asc(SUBSTR(lcBuffer, 2,1)), 8) +;

BitLShift(Asc(SUBSTR(lcBuffer, 3,1)), 16) +;

BitLShift(Asc(SUBSTR(lcBuffer, 4,1)), 24)

ENDFUNC

FUNCTION spBuf2Word(lcBuffer)

RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;

Asc(SUBSTR(lcBuffer, 2,1)) * 256

ENDFUNC

2009/11/17 Massetti Sebastian <[email protected]>

>  Hola lista, alguien sabe con que función puedo consultar la resolución de
> pantalla actual desde VFP ?
>
> Gracias.
>
> sEBASTIAn.
>

Responder a