Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/09/2005, 06:42
Avatar de aldo1982
aldo1982
 
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 5 meses
Puntos: 6
aca te dejo algo ke kizas te ayude

CAMBIANDO LA RESOLUCIÓN DE WINDOWS

2 Api’s necesarias para cambiar la resolución de Windows. Pära este ejemplo necesitan un formulario con un Listbox y un Boton.

Const CCDEVICENAME = 32
Const CCFORMNAME = 32

Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H4
Const DISP_CHANGE_SUCCESSFUL = 0
Const DISP_CHANGE_RESTART = 1

Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long

Dim dev As DEVMODE
Dim i, resultado1, resultado2 As Long
Dim Resul As Boolean


Private Sub Command1_Click()

dev.dmPelsWidth = Mid(List1.Text, 1, InStr(1, List1.Text, "X") - 2)
dev.dmPelsHeight = Mid(List1.Text, InStr(1, List1.Text, "X") + 2, 3)
dev.dmBitsPerPel = Mid(List1.Text, InStr(1, List1.Text, "X") + 5, InStr(1, List1.Text, "b") - (InStr(1, List1.Text, "X") + 5))
resultado1 = ChangeDisplaySettings(dev, CDS_TEST)

If resultado1 = DISP_CHANGE_RESTART Then
MsgBox "Necesitas reiniciar la maquina"
End If

If resultado1 = DISP_CHANGE_SUCCESSFUL Then
ChangeDisplaySettings dev, CDS_UPDATEREGISTRY
End If

End Sub

Private Sub Form_Load()

Command1.Caption = "Cambiar Resolucion"



Do

Resul = EnumDisplaySettings(0&, i, dev)

List1.AddItem dev.dmPelsWidth & " X " & dev.dmPelsHeight & " " & dev.dmBitsPerPel & " bits"
i = i + 1
Loop While Resul

End Sub


Si ejecutan el programa verán que en el ListBox se colocan todas las Resoluciones posibles que soporta la tarjeta de video que posean, seleccionen una y denle click a “Cambiar Resolución” e inmediatamente verán como la computadora cambia de resolución.



ENUMDISPLAYSETTINGS
Api: Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean


Con esta API obtenemos información acerca de un dispositivo gráfico, en nuestro caso la usamos para hacer un listado de las resoluciones posibles a las cuales podemos cambiar.

Como parámetros tenemos
lpszDeviceName: este parámetro puede ser NULL. Si es NULL nos referimos al dispositivo gráfico usado en ese momento.
iModeNum: sirve como índice, para recuperar la información del dispositivo gráfico.
lpDevMode: Es un puntero a una estructura de tipo DEVMODE la cual en los inicios de este documento se encuentra su explicación.

En el programa lo usamos de esta manera:

Do

Resul = EnumDisplaySettings(0&, i, dev)

List1.AddItem dev.dmPelsWidth & " X " & dev.dmPelsHeight & " " & dev.dmBitsPerPel & " bits"
i = i + 1
Loop While Resul

End Sub

Como podrán observar, la estructura DEVMODE representada en la variable “dev”, cambia sus valores cada vez que entra, con este código logramos que “Mientras Resul sea true” continué mostrando información, cuando ya se haya extraído toda la información EnumDisplaySettings retorna FALSE y sale del bucle. Para moverse en los distintos tipos de información usamos la variable “i” la cual empieza en 0 y va aumentando de uno en uno.

CHANGEDISPLAYSETTINGS
Api: Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long

Api utilizada para cambiar la configuración de un dispositivo gráfico. En nuestro caso lo usamos para cambiar la resolución del sistema operativo.

Como parámetros tenemos, “lpDevMode” el cual se le pasa una variable de tipo DEVMODE, y luego tenemos un Flag “dwFlag” el cual lo utilizamos para indicar lo que queremos hacer.


En el programa lo usamos de la manera siguiente:

resultado1 = ChangeDisplaySettings(dev, CDS_TEST)

If resultado1 = DISP_CHANGE_RESTART Then
MsgBox "Necesitas reiniciar la maquina"
End If

If resultado1 = DISP_CHANGE_SUCCESSFUL Then
ChangeDisplaySettings dev, CDS_UPDATEREGISTRY
End If

Primero probamos si la resolución, a la cual estamos invocando es compatible, para ello, usamos un flag “CDS_TEST” si la función ChangeDisplaySettings retorna DISP_CHANGE_RESTART significa que para realizar el cambio de la resolución hay que reiniciar la maquina, si la función retorna DISP_CHANGE_SUCCESSFUL significa que no hay ningún problema. Ahora ¿Por qué invocar dos veces ChangeDsiplaySettings?

resultado1 = ChangeDisplaySettings(dev, CDS_TEST)
En este caso probamos si es compatible.

ChangeDisplaySettings dev, CDS_UPDATEREGISTRY
Y aquí sabiendo que ya es compatible, actualizamos esa información en el registro de Windows, y para ello usamos el flag CDS_UPDATEREGISTRY
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA