Jump to content
Fivewin Brasil

Verificar a Resolução de Tela via comando do FiveWin


kapiaba

Recommended Posts

Tarde galera do mal, Como Verificar a Resolução de Tela do Windows, via comando do FiveWin, eu vi algo no forum inter, más não acho o tópico, na época não me pareceu importante, mas agora eu preciso para informar ou tomar uma decisão qual DIALOG deve "Carregar"? Estou criando vários DIALOGOS para diferentes Resoluções de Tela.

Gracias,

 

Regards, saludos.

Link to comment
Share on other sites

Please, alguém pode testar pra mim em Wndows 10 ou 11 por favor?

 

// C:\FWH..\SAMPLES\RESOLU2.PRG
	#include 'fivewin.ch'
#Include "dll.ch"
#Include "Struct.ch"
	FUNCTION MAIN()
	   LOCAL nResoAncho := GetSysMetrics(0)
	   IF nResoAncho < 1280 .OR. nResoAncho > 1280
	   // CamReso( 800, 600)
	   CamReso( 1280, 768)
	   MSGINFO('HECHO. AQUI PUEDES INICIAR TU PROGRAMA ELABORADO PARA 1280 X 768')
	   ENDIF
	RETU nil
	Function CamReso( nAncho, nAlto )
	   Local DM_PELSWIDTH := nHex("80000")
   Local DM_PELSHEIGHT := nHex("100000")
   Local oDevMode
   Local lPosible
   Local cBuffer
   Local lCamReso := .f.
	   DEFAULT nAncho := GetSysMetrics(0), nAlto := GetSysMetrics(1)
	   STRUCT oDevMode
	      MEMBER cDevName AS STRING LEN 32
      MEMBER nSpecVer AS WORD
      MEMBER nDrvVer AS WORD
      MEMBER nSize AS WORD
      MEMBER nDrvExtra AS WORD
      MEMBER nFields AS DWORD
      MEMBER nOrientat AS WORD
      MEMBER nPaperSiz AS WORD
      MEMBER nPaperLen AS WORD
      MEMBER nPaperWid AS WORD
      MEMBER nScale AS WORD
      MEMBER nCopies AS WORD
      MEMBER nDefSrc AS WORD
      MEMBER nPrnQlty AS WORD
      MEMBER nColor AS WORD
      MEMBER nDuplex AS WORD
      MEMBER nYResolut AS WORD
      MEMBER nTTOpt AS WORD
      MEMBER nCollate AS WORD
      MEMBER cFormName AS STRING LEN 32
      MEMBER nUnusePad AS WORD
      MEMBER nBitsPPel AS DWORD
      MEMBER nPelWidth AS DWORD
      MEMBER nPelHeigh AS DWORD
      MEMBER nDisFlags AS DWORD
      MEMBER nDisFreq AS DWORD
	   ENDSTRUCT
	   cBuffer := oDevMode:cBuffer
   lPosible := EnumDisplaySettings(0, 0, @cBuffer)
	   IF lPosible
	      oDevMode:nFields := nOr(DM_PELSWIDTH, DM_PELSHEIGHT )
      oDevMode:nPelWidth := nAncho
      oDevMode:nPelHeigh := nAlto
      cBuffer:=oDevMode:cBuffer
	      TRY
         ChangeDisplaySettings(@cBuffer, 4)
         lCamReso := .T.
      CATCH
         MsgAlert("Modo no soportado", "Error" )
      END
   else
      MsgAlert("Modo no soportado", "Error" )
   endif
	return lCamReso
	DLL32 FUNCTION EnumDisplaySettings(lpszDeviceName AS DWORD,;
iModeNum AS DWORD, ;
@lpDevMode AS LPSTR) AS BOOL PASCAL;
FROM "EnumDisplaySettingsA" LIB "User32.dll"
	DLL32 STATIC FUNCTION ChangeDisplaySettings(@lpDevMode AS LPSTR,;
dwFlags AS DWORD) AS DWORD PASCAL;
FROM "ChangeDisplaySettingsA" LIB "User32.dll"
	DLL32 FUNCTION ExitWindowsEx(uFlags AS DWORD,;
dwReserved AS DWORD) AS DWORD PASCAL;
LIB "user32.dll"
	// FIN

Regards, saludos.

Link to comment
Share on other sites

Uso uma rotina que o Vagner fez faz um tempão

    TAMANHO_VIDEO:=VRESVIDEO() 
    ? TAMANHO_VIDEO[1],TAMANHO_VIDEO[2]

 

/********************************************************* 
 * Função      : Funcao em C para pegar a Resolução da Tela
 * Data        : 13/03/2013 Ã s 12:05:26 por Vagner
 * Revisado em : 13/03/2013 Ã s 12:05:35 por Vagner
 * Parâmetros :
 * iWidthNew  - Largura Mínima Necessária
 * iHeightNew - Altura Mínima Necessária                                                         
**********************************************************/ 
#Pragma BEGINDUMP
#include <Windows.h>
#include <ShellApi.h>
#include <Wingdi.h>
#include <hbapi.h>

HB_FUNC (VRESVIDEO)
{
 int iWidth,iHeight ;
 //Pega a Configuração Atual
 DEVMODE DeviceMode = { 0 };
 EnumDisplaySettings( NULL,
        ENUM_CURRENT_SETTINGS,
        &DeviceMode );
 iWidth  = DeviceMode.dmPelsWidth;
 iHeight = DeviceMode.dmPelsHeight;
 hb_reta( 2 );                                                    
 hb_storni( iWidth , -1, 1 );
 hb_storni( iHeight, -1, 2 );
}

#pragma ENDDUMP

Link to comment
Share on other sites

20 horas atrás, kapiaba disse:

Please, alguém pode testar pra mim em Wndows 10 ou 11 por favor?

 

 


// C:\FWH..\SAMPLES\RESOLU2.PRG
	#include 'fivewin.ch'
#Include "dll.ch"
#Include "Struct.ch"
	FUNCTION MAIN()
	   LOCAL nResoAncho := GetSysMetrics(0)
	   IF nResoAncho < 1280 .OR. nResoAncho > 1280
	   // CamReso( 800, 600)
	   CamReso( 1280, 768)
	   MSGINFO('HECHO. AQUI PUEDES INICIAR TU PROGRAMA ELABORADO PARA 1280 X 768')
	   ENDIF
	RETU nil
	Function CamReso( nAncho, nAlto )
	   Local DM_PELSWIDTH := nHex("80000")
   Local DM_PELSHEIGHT := nHex("100000")
   Local oDevMode
   Local lPosible
   Local cBuffer
   Local lCamReso := .f.
	   DEFAULT nAncho := GetSysMetrics(0), nAlto := GetSysMetrics(1)
	   STRUCT oDevMode
	      MEMBER cDevName AS STRING LEN 32
      MEMBER nSpecVer AS WORD
      MEMBER nDrvVer AS WORD
      MEMBER nSize AS WORD
      MEMBER nDrvExtra AS WORD
      MEMBER nFields AS DWORD
      MEMBER nOrientat AS WORD
      MEMBER nPaperSiz AS WORD
      MEMBER nPaperLen AS WORD
      MEMBER nPaperWid AS WORD
      MEMBER nScale AS WORD
      MEMBER nCopies AS WORD
      MEMBER nDefSrc AS WORD
      MEMBER nPrnQlty AS WORD
      MEMBER nColor AS WORD
      MEMBER nDuplex AS WORD
      MEMBER nYResolut AS WORD
      MEMBER nTTOpt AS WORD
      MEMBER nCollate AS WORD
      MEMBER cFormName AS STRING LEN 32
      MEMBER nUnusePad AS WORD
      MEMBER nBitsPPel AS DWORD
      MEMBER nPelWidth AS DWORD
      MEMBER nPelHeigh AS DWORD
      MEMBER nDisFlags AS DWORD
      MEMBER nDisFreq AS DWORD
	   ENDSTRUCT
	   cBuffer := oDevMode:cBuffer
   lPosible := EnumDisplaySettings(0, 0, @cBuffer)
	   IF lPosible
	      oDevMode:nFields := nOr(DM_PELSWIDTH, DM_PELSHEIGHT )
      oDevMode:nPelWidth := nAncho
      oDevMode:nPelHeigh := nAlto
      cBuffer:=oDevMode:cBuffer
	      TRY
         ChangeDisplaySettings(@cBuffer, 4)
         lCamReso := .T.
      CATCH
         MsgAlert("Modo no soportado", "Error" )
      END
   else
      MsgAlert("Modo no soportado", "Error" )
   endif
	return lCamReso
	DLL32 FUNCTION EnumDisplaySettings(lpszDeviceName AS DWORD,;
iModeNum AS DWORD, ;
@lpDevMode AS LPSTR) AS BOOL PASCAL;
FROM "EnumDisplaySettingsA" LIB "User32.dll"
	DLL32 STATIC FUNCTION ChangeDisplaySettings(@lpDevMode AS LPSTR,;
dwFlags AS DWORD) AS DWORD PASCAL;
FROM "ChangeDisplaySettingsA" LIB "User32.dll"
	DLL32 FUNCTION ExitWindowsEx(uFlags AS DWORD,;
dwReserved AS DWORD) AS DWORD PASCAL;
LIB "user32.dll"
	// FIN

 

Regards, saludos.

Suspeitei desde o principio que este exemplo iria dar problemas no WINDOWS 10, igual ao programa do Vagner, conforme reportes do forum inter isso gera o perereco da pohha no Windows 10. No windows 7 de 32 bits, funciona de boas. Misterios da pohha. Obg. abs.  Regards, saludos.

Link to comment
Share on other sites

18 horas atrás, emotta disse:

faz tempo que não mexo com isso, mas eu verificava a resolução com base na window principal. Fazia desta forma: (não sei se vai te ajudar)

nHeight:= oObjWnd:nHeight
nWidth := oObjWnd:nWidth

Bom dia Eduardo, isso não vai me retornar a RESOLUÇÃO DE TELA DO MONITOR, e sim, o tamanho da JANELA WINDOW do Programa, não tem como eu saber qual é a RESOLUÇÃO e dizer ao programa para pegar do ARQUIVO.RES, o dialogo para a RESOLUÇÃO DE TELA escolhida pelo usuário em cada máquina da empresa, entende? Obg. abs.

Reagrds, saludos.

Link to comment
Share on other sites

É não vai ter jeito, não queria criar várias telas(diálogos), más como o programa do exemplo acima não funciona em Windows 10, vou ter que checar o Tamanho com o GetSysMetrics e "chamar" a tela correspondente. O ideal seria ter uma tela só, 1280 x 768 e mudar a resolução do cliente em tempo real, enquanto ele estivesse usando o programa, ao sair, voltaria a resolução original dele. Más infelizmente a pohha do Windows 10 dá crash(quebra) total e ficou inviável a idéia. Pohha, vou ter que trabalhar. kkkkkkkkkkkk

 nResHoriz := GetSysMetrics(0)
 nResVert  := GetSysMetrics(1)
Link to comment
Share on other sites

Esta é a solução que eu vejo de momento para não travar o windows 10. Sugestões, são bem vindas, lógico.

#Include "fivewin.ch"
#Include "dbcombo.ch"
	STATIC oDlg, oWnd
	MEMVAR nResHoriz, nResVert, nResolution
	FUNCTION Main()
	   // Janela Invisivel - coordenadas
   DEFINE WINDOW oWnd TITLE "Display" FROM -1, -1 TO -1, -1
	   nResHoriz := oWnd:nHorzRes() // retorna a resolucao horizontal
   nResVert  := oWnd:nVertRes() // retorna a resolucao vertical
	   nResolution := Resolution( oWnd )
	   DEFINE DIALOG oDlg SIZE 600, 450 PIXEL ;
      STYLE nOr( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, 4 )
	   oDlg:lHelpIcon := .F.
	   ACTIVATE DIALOG oDlg CENTERED ON INIT( MakeComboBox( oDlg ) )
	   oWnd:End()
	   ACTIVATE WINDOW oWnd
	RETURN NIL
	FUNCTION MakeComboBox( oDlg )
	   LOCAL oGet, oCbx, oSay
   LOCAL nTotal := 0
   LOCAL cItem := "UNO"
	   @ 10,  10 SAY "IMPORTE" OF oDlg PIXEL COLOR CLR_HBLUE TRANSPARENT UPDATE
	   // *  3 = 1024 X 768 my resolution
   @ 150, 10 SAY oSay PROMPT "Resolution:-> " + STR(nResolution) OF oDlg     ;
      PIXEL COLOR CLR_BLACK TRANSPARENT UPDATE SIZE 100, 12
	   @ 30,  10 GET oGet VAR nTotal OF oDlg SIZE 60, 15 PICTURE "999,999.99"    ;
      PIXEL UPDATE
	   @ 10,  80 SAY "Selecciona un ITEM " OF oDlg PIXEL COLOR CLR_HBLUE UPDATE  ;
      TRANSPARENT
	   @ 30,  80 COMBOBOX oCbx VAR cItem OF oDlg STYLE CBS_DROPDOWNLIST          ;
      PIXEL SIZE 100, 300 UPDATE ON CHANGE MsgBeep()                         ;
      ITEMS {"UNO","DOS","TRES","CUATRO","CINCO"}
 
RETURN NIL
	FUNCTION Resolution( oWnd )
	   IF nResHoriz = 2560 .AND. nResVert = 1600
	      // 12      2560x1600 8:5 WQXGA     0.05%
      nResolution := 13
	   ELSEIF nResHoriz = 2560 .AND. nResVert = 1440
	      // 13      2560 x 1440       0.92%
      nResolution := 12
	   ELSEIF nResHoriz = 1920 .AND. nResVert = 1080
	      //14      1920x1080 16:9 HD 1080  10.97%
      nResolution := 14
	   ELSEIF nResHoriz = 1680 .AND. nResVert = 1050
	      //15   1680x1050 8:5 WSXGA+    3.29%
      nResolution := 15
	   ELSEIF nResHoriz = 1600 .AND. nResVert = 1200
	      *  7 = 1600 X 1200
      nResolution := 7
	   ELSEIF nResHoriz = 1440 .AND. nResVert = 900
	      *  9 = 1440 X 900
      nResolution := 9
	   ELSEIF nResHoriz = 1366 .AND. nResVert = 768
	      // 16      1366x768 HD     22.98%
      nResolution := 16
	   ELSEIF nResHoriz = 1360 .AND. nResVert = 768
	      //17      1360x768        2.33%
      nResolution := 17
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 1080
	      // 18    1280x1080       0.001%
      nResolution := 18
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 1024
	      *  6 = 1280 X 1024
      nResolution := 6
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 960
	      // 19      1280x960        0.46%
      nResolution := 19
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 800
	      *  5 = 1280 X 800
      nResolution := 5
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 768
	      * 10 = 1280 X 768
      nResolution := 10
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 720
	      * 11 = 1280 X 720
      nResolution := 11
	   ELSEIF nResHoriz = 1280 .AND. nResVert = 600
	      // 20     1280x600        0.01%
      nResolution := 20
	   ELSEIF nResHoriz = 1152 .AND. nResVert = 864
	      *  4 = 1152 X 864
      nResolution := 4
	   ELSEIF nResHoriz = 1024 .AND. nResVert = 768
	      *  3 = 1024 X 768
      nResolution := 3
	   ELSEIF nResHoriz = 800  .AND. nResVert = 600
	      *  2 =  800 X 600
      nResolution := 2
	   ELSEIF nResHoriz = 768  .AND. nResVert = 1024
	      *  8 =  768 X 1024
      nResolution := 8
	   ELSEIF nResHoriz = 720  .AND. nResVert = 480
	      // 21 720x480 3:2 NTSC        0.001%
      nResolution := 21
	   ELSEIF nResHoriz = 640  .AND. nResVert = 480
	      *  1 =  640 X 480
      nResolution := 1
	   ENDIF
	RETURN( nResolution )
	// END OF PROGRAM

Regards, saludos.

Link to comment
Share on other sites

Em windows 7 de 32 bits, o exemplo que pedi para testar funciona de boas, já no windows 10, dá crash(quebra), que mierda, viu? Seria ideal, pois eu usaria somente um diálogo: 1280 x 768 para todos os usuários, e ao sair do programa, voltava a RESOLUÇÃO DE TELA ORIGINAL do cliente. Se tem um Windows que eu não gosto, é esse Windows 10 do kralyious(). pohhha. kkkkkkkkkkkkkkk

Rz6Cw2x.png

 

Link to comment
Share on other sites

  • 2 weeks later...

Será que os valores retornados na função abaixo server? :) 

//----------------------------------------------------------------------------//

FUNCTION DLG_RESOLUCION( oDlg )
   LOCAL aPor := {1,1},;
         nWidth := GetSysMetrics(0),;
         nHeight := GetSysMetrics(1)

   nTWid := WndWidth(FindWindow( 'Shell_TrayWnd',nil))
   IF nTWid < nWidth // TrayBar position: Right or left
      nWidth -= nTWid
   ENDIF

   nThei := WndHeight(FindWindow( 'Shell_TrayWnd',nil))
   IF nThei < nHeight // TrayBar position: Bottom or top
      nHeight -= nThei
   ENDIF

   nBwid := ((100/oDlg:nWidth)*nWidth)/100
   nBhei := ((100/oDlg:nHeight)*nHeight)/100
   aPor := {nBwid, nBhei}
RETURN aPor

 

Link to comment
Share on other sites

Ariston, blz meu rei? Eu não quero o valor de  GetSysMetrics(), eu quero,  MUDAR a RESOLUÇÃO DE TELA em tempo real. Por exemplo: o usuário está com 1024 x 768, eu quero mudar para 1280 X 768 e ele vai trabalhar somente nesta resolução, ao sair, o programa "devolve"  a resolução que ele estava, no caso, 1024 x 768, entende? O programa que eu postei acima, faz exatamente o que eu quero,  no Windows 7, más no Windows 10, dá um efeito colateral indesejado, entende? 

Obg. abs.

 

Regards, saludos.

Link to comment
Share on other sites

3 horas atrás, kapiaba disse:

Ariston, blz meu rei? Eu não quero o valor de  GetSysMetrics(), eu quero,  MUDAR a RESOLUÇÃO DE TELA em tempo real. Por exemplo: o usuário está com 1024 x 768, eu quero mudar para 1280 X 768 e ele vai trabalhar somente nesta resolução, ao sair, o programa "devolve"  a resolução que ele estava, no caso, 1024 x 768, entende? O programa que eu postei acima, faz exatamente o que eu quero,  no Windows 7, más no Windows 10, dá um efeito colateral indesejado, entende? 

Obg. abs.

 

Regards, saludos.

Opa! Eu tinha entendido errado.

Mas, desculpa minha ignorância, ;) poderia me dizer por que precisa fazer isso? :) 

Link to comment
Share on other sites

Kapi boa tarde

Primeiramente vai curinthians

eu achei isso aqui nas minhas rotinas

ele muda a resolucao do programa e quando sai volta ao normal do windows

// http://forums.fivetechsupport.com/viewtopic.php?f=6&t=9865&start=15
// By Marcelo Gomes e Yuri Marcelino
 
#include 'fivewin.ch'
#Include "dll.ch"
#Include "Struct.ch"
 
FUNCTION MAIN_reso()
 
   LOCAL nResoAncho := GetSysMetrics(0)

   IF nResoAncho > 800
 
      CamReso ( 1024, 768 )
 
*      MSGINFO('HECHO. AQUI PUEDES INICIAR TU PROGRAMA ELABORADO PARA 1024 X 768')
 
   ELSEIF nResoAncho <= 800 .AND. ISWINXP()
 
      CamReso ( 800, 600 )
                                               
   ENDIF
 
RETURN NIL
 
FUNCTION CamReso(nAncho, nAlto)
 
   Local DM_PELSWIDTH  := nHex("80000")
   Local DM_PELSHEIGHT := nHex("100000")
   Local oDevMode
   Local lPosible
   Local cBuffer
   Local lCamReso := .f.
 
   DEFAULT nAncho := GetSysMetrics(0), ;
           nAlto  := GetSysMetrics(1)
 
   STRUCT oDevMode
      MEMBER cDevName  AS STRING LEN 32
      MEMBER nSpecVer  AS WORD
      MEMBER nDrvVer   AS WORD
      MEMBER nSize     AS WORD
      MEMBER nDrvExtra AS WORD
      MEMBER nFields   AS DWORD
      MEMBER nOrientat AS WORD
      MEMBER nPaperSiz AS WORD
      MEMBER nPaperLen AS WORD
      MEMBER nPaperWid AS WORD
      MEMBER nScale    AS WORD
      MEMBER nCopies   AS WORD
      MEMBER nDefSrc   AS WORD
      MEMBER nPrnQlty  AS WORD
      MEMBER nColor    AS WORD
      MEMBER nDuplex   AS WORD
      MEMBER nYResolut AS WORD
      MEMBER nTTOpt    AS WORD
      MEMBER nCollate  AS WORD
      MEMBER cFormName AS STRING LEN 32
      MEMBER nUnusePad AS WORD
      MEMBER nBitsPPel AS DWORD
      MEMBER nPelWidth AS DWORD
      MEMBER nPelHeigh AS DWORD
      MEMBER nDisFlags AS DWORD
      MEMBER nDisFreq  AS DWORD
   ENDSTRUCT
 
   cBuffer  := oDevMode:cBuffer
   lPosible := EnumDisplaySettings(0, 0, @cBuffer)
 
   IF lPosible
 
      oDevMode:nFields := nOr(DM_PELSWIDTH, DM_PELSHEIGHT )
      oDevMode:nPelWidth := nAncho
      oDevMode:nPelHeigh := nAlto
      cBuffer:=oDevMode:cBuffer
 
      TRY
         ChangeDisplaySettings(@cBuffer, 4)
         lCamReso := .T.
      CATCH
         MsgAlert("Modo no soportado", "Error" )
      END
   else
      MsgAlert("Modo no soportado", "Error" )
   endif
 
return lCamReso
 
DLL32 FUNCTION EnumDisplaySettings(lpszDeviceName AS DWORD,;
iModeNum AS DWORD, ;
@lpDevMode AS LPSTR) AS BOOL PASCAL;
FROM "EnumDisplaySettingsA" LIB "User32.dll"
 
DLL32 STATIC FUNCTION ChangeDisplaySettings(@lpDevMode AS LPSTR,;
dwFlags AS DWORD) AS DWORD PASCAL;
FROM "ChangeDisplaySettingsA" LIB "User32.dll"
 
DLL32 FUNCTION ExitWindowsEx(uFlags AS DWORD,;
dwReserved AS DWORD) AS DWORD PASCAL;
LIB "user32.dll"

DLL32 STATIC FUNCTION BlockInput( lTrava AS BOOL ) AS BOOL LIB "User32.DLL"

Link to comment
Share on other sites

Edu, teste agora com esta RESOLUCAO que eu uso no WORKSHOP.exe.

EDU, SE VC. NAO TIVER ESTA RESOLUCAO, VEJA A QUE SE APROXIMA MAIS, PLS.

// C:\FWH..\SAMPLES\CAMRESO.PRG
	/*
Kapi boa tarde
	Primeiramente vai curinthians
	eu achei isso aqui nas minhas rotinas
	ele muda a resolucao do programa e quando sai volta ao normal do windows
*/
	// http://forums.fivetechsupport.com/viewtopic.php?f=6&t=9865&start=15
// By Marcelo Gomes e Yuri Marcelino
 
#include 'fivewin.ch'
#Include "dll.ch"
#Include "Struct.ch"
 
FUNCTION MAIN_reso()
 
   LOCAL nResoAncho := GetSysMetrics(0)
	   IF nResoAncho > 800
 
      // EDU, SE VC. NAO TIVER ESTA RESOLUCAO, VEJA A QUE SE APROXIMA MAIS, PLS.
      CamReso ( 1280, 768 ) 
 
      MSGINFO('HECHO. AQUI PUEDES INICIAR TU PROGRAMA ELABORADO PARA 1280 X 768')
 
   ELSEIF nResoAncho <= 800 .AND. ISWINXP()
 
      CamReso ( 800, 600 )
                                               
   ENDIF
 
RETURN NIL
 
FUNCTION CamReso(nAncho, nAlto)
 
   Local DM_PELSWIDTH  := nHex("80000")
   Local DM_PELSHEIGHT := nHex("100000")
   Local oDevMode
   Local lPosible
   Local cBuffer
   Local lCamReso := .f.
 
   DEFAULT nAncho := GetSysMetrics(0), ;
           nAlto  := GetSysMetrics(1)
 
   STRUCT oDevMode
      MEMBER cDevName  AS STRING LEN 32
      MEMBER nSpecVer  AS WORD
      MEMBER nDrvVer   AS WORD
      MEMBER nSize     AS WORD
      MEMBER nDrvExtra AS WORD
      MEMBER nFields   AS DWORD
      MEMBER nOrientat AS WORD
      MEMBER nPaperSiz AS WORD
      MEMBER nPaperLen AS WORD
      MEMBER nPaperWid AS WORD
      MEMBER nScale    AS WORD
      MEMBER nCopies   AS WORD
      MEMBER nDefSrc   AS WORD
      MEMBER nPrnQlty  AS WORD
      MEMBER nColor    AS WORD
      MEMBER nDuplex   AS WORD
      MEMBER nYResolut AS WORD
      MEMBER nTTOpt    AS WORD
      MEMBER nCollate  AS WORD
      MEMBER cFormName AS STRING LEN 32
      MEMBER nUnusePad AS WORD
      MEMBER nBitsPPel AS DWORD
      MEMBER nPelWidth AS DWORD
      MEMBER nPelHeigh AS DWORD
      MEMBER nDisFlags AS DWORD
      MEMBER nDisFreq  AS DWORD
   ENDSTRUCT
 
   cBuffer  := oDevMode:cBuffer
   lPosible := EnumDisplaySettings(0, 0, @cBuffer)
 
   IF lPosible
 
      oDevMode:nFields := nOr(DM_PELSWIDTH, DM_PELSHEIGHT )
      oDevMode:nPelWidth := nAncho
      oDevMode:nPelHeigh := nAlto
      cBuffer:=oDevMode:cBuffer
 
      TRY
	         ChangeDisplaySettings(@cBuffer, 4)
	         lCamReso := .T.
	      CATCH
	         MsgAlert("Modo no soportado", "Error" )
	      END
	   ELSE
	      MsgAlert("Modo no soportado", "Error" )
	   ENDIF
 
RETURN( lCamReso )
 
DLL32 FUNCTION EnumDisplaySettings(lpszDeviceName AS DWORD,;
iModeNum AS DWORD, ;
@lpDevMode AS LPSTR) AS BOOL PASCAL;
FROM "EnumDisplaySettingsA" LIB "User32.dll"
 
DLL32 STATIC FUNCTION ChangeDisplaySettings(@lpDevMode AS LPSTR,;
dwFlags AS DWORD) AS DWORD PASCAL;
FROM "ChangeDisplaySettingsA" LIB "User32.dll"
 
DLL32 FUNCTION ExitWindowsEx(uFlags AS DWORD,;
dwReserved AS DWORD) AS DWORD PASCAL;
LIB "user32.dll"
	DLL32 STATIC FUNCTION BlockInput( lTrava AS BOOL ) AS BOOL LIB "User32.DLL"
	// FIN / END


 

Regards, saludos.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...