none
Control del brillo en WinCE RRS feed

  • Pregunta

  •  

    Hola a todos,

     

    me encuentro realizando una aplicación con VB2005 sobre Windows CE 5.0 y estoy poniendole un slider que permita ajustar el brillo de la pantalla.

     

    Tengo una versión en WindowsXP que funciona correctamente utilizando la función SetGammaRamp de la API de gdi32.dll y GetDC de user32.dll. Sin embargo, no puedo pasarlo a Compact Framework porque no consigo encontrar en la API de WinCE las mismas funciones u otras con el mismo efecto.

     

    Agradecería si alguien pudiera referenciarme donde puedo encontrar información sobre esto.

     

    Un saludo

     

    Luis

    miércoles, 31 de octubre de 2007 18:14

Todas las respuestas

  • Buenas,

     

    por experiencia te puedo decir que de todos los terminales sobre los que he desarrollado, que no son mucho por otro lado, siempre he tenido que echar mano de las api's del terminal que provee el propio fabricante.

     

    En teoria MS ofrece esa función a través de las API del sistema WinCE, pero luego el fabricante es libre de utilizarlas o no. En la mayoria de los casos no lo hace con lo que substituyen esa función por API's propias.

     

    De qué frabricante es tu Pocket???

    viernes, 2 de noviembre de 2007 11:39
    Moderador
  • No se trata de un Pocket, sino de un PC para uso industrial con pantalla táctil de la casa Eurotech. No tengo ningún tipo de información sobre API´s del fabricante.

    lunes, 5 de noviembre de 2007 9:48
  • Hola de nuevo,

    he seguido buscando información sobre el tema, he visto que, efectivamente, en WinCE no hay nada equivalente a SetDeviceGammaRamp, en su lugar hay que utilizar la función ChangeDisplaySettings y la estructura VIDEOPARAMETERS.

    Tengo implementada mi clase utilizando esta función, después de muchas pruebas fallidas he conseguido que la función me devuelva algo, pero la respuesta es -1 (fallo).

    Estoy temiendo que el propio dispositivo tenga dehabilitado el poder controlar el brillo porque si no no me explico como puede dar un error

    Bloque de código

    Imports System.Runtime.InteropServicesEnd Class

    Public Class ScreenBrightness

        Const VP_FLAGS_BRIGHTNESS = &H40
        Const VP_COMMAND_SET = &H2
        Const VP_COMMAND_GET = &H1
        Const CDS_VIDEOPARAMETERS = &H20
        Const CDS_UPDATEREGISTRY = &H1

        Private Structure VIDEOPARAMETERS
            Public Guid As Guid
            Public dwOffset As UInt32
            Public dwFlags As UInt32
            Public dwMode As UInt32
            Public dwTVStandard As UInt32
            Public dwAvailableModes As UInt32
            Public dwAvailableTVStandards As UInt32
            Public dwFlickerFilter As UInt32
            Public dwOverScanX As UInt32
            Public dwOverScanY As UInt32
            Public dwMaxUnscaledX As UInt32
            Public dwMaxUnscaledY As UInt32
            Public dwPositionX As UInt32
            Public dwPositionY As UInt32
            Public dwBrightness As UInt32
            Public dwContrast As UInt32
            Public dwCPType As UInt32
            Public bCP_APSTriggerBits As UInt32
            <MarshalAs(UnmanagedType.ByValArray)> Public bOEMCopyProtection As Byte()
        End Structure

        Declare Function ChangeDisplaySettingsEx Lib "coredll.dll" ( _
            ByVal lpszDeviceName As String, _
            ByVal lpDevMode As IntPtr, _
            ByVal hWnd As IntPtr, _
            ByVal dwFlags As UInt32, _
            ByVal lParam As IntPtr) As Integer
     
        Private Declare Function LocalAlloc Lib "coredll.dll" ( _
            ByVal uFlags As UInt16, _
            ByVal uBytes As UInt16) As IntPtr


        Public Sub CambiarBrillo(ByVal brillo As Integer)

            Dim VP As New VIDEOPARAMETERS

            VP.Guid = New Guid("02C62061-1097-11D1-920F-00A024DF156E")
            VP.dwOffset = 0
            VP.dwMode = VP_COMMAND_SET
            VP.dwFlags = VP_FLAGS_BRIGHTNESS
            VP.dwBrightness = brillo * 10
       
            Dim unVPSize As UInt16 = Marshal.SizeOf(VP)
            Dim ptr As IntPtr = LocalAlloc(0, unVPSize)
            Marshal.StructureToPtr(VP, ptr, False)

            Dim result As Integer
            result = ChangeDisplaySettingsEx(Nothing, Nothing, Nothing, CDS_VIDEOPARAMETERS, ptr)
            MsgBox(result)

        End Sub






    miércoles, 7 de noviembre de 2007 17:49