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. >
