É possível ativar o controle de brilho do software no Dell U2412M


13

Bem, eu só queria essa pergunta simples de sim / não para o suporte de email da Dell. Seu site exigia código de serviço apenas para enviar um e-mail. Então eu tentei o suporte de bate-papo "técnico" deles. Uma pessoa indiana respondeu estranhamente e finalmente respondeu que não tinha conhecimento técnico e apenas me deu o link para o suporte por email (que eu já tentei).

Eu tenho um monitor Dell U2412M que possui uma porta DisplayPort e uma porta USB up-link. Ativei o DDC / CI no OSD. Estou usando o Windows 8 e o controle de brilho na barra de charme está desativado.

É possível habilitá-lo? Porque ouvi dizer que o DDC / CI permite que o seu computador controle sua tela.

O padrão DDC / CI (Interface de Comando) foi introduzido em agosto de 1998. Ele especifica um meio para um computador enviar comandos ao monitor, além de receber dados do sensor do monitor, através de um link bidirecional. Comandos específicos para controlar monitores são definidos em uma versão padrão do MCCS (1.0), lançada em setembro de 1998. Às vezes, os monitores DDC / CI são fornecidos com um sensor de cores externo para permitir a calibração automática do equilíbrio de cores do monitor. Alguns monitores DDC / CI inclináveis ​​suportam uma função de rotação automática, onde um sensor de rotação no monitor permite que o sistema operacional mantenha a tela na vertical enquanto o monitor é movido entre as posições retrato e paisagem. A maioria dos monitores DDC / CI suporta apenas um pequeno subconjunto de comandos MCCS e alguns possuem comandos não documentados.gerenciamento de brilho e contraste.


Para linux, verifique ddcutil.com
cwd

Respostas:



6

Eu tenho um Dell U2515H conectado via HDMI a uma placa nVidia.

Eu tentei o softMCCS e funcionou bem. Consegui ajustar o brilho da luz de fundo do software.

Estes são os códigos de controle que esse monitor aparentemente suporta:

New control value
Restore factory defaults
Restore luminance/contrast defaults
Restore color defaults
Luminance
Contrast
Select color preset
Red video gain
Green video gain
Blue video gain
Active control
Input source
Screen orientation
Horizontal frequency
Vertical frequency
Panel sub-pixel layout
Display technology type
Application enable key
Display controller type
Display firmware level
Power mode
Display application
VCP version
Manufacturer specific - 0xE0
Manufacturer specific - 0xE1
Manufacturer specific - 0xE2
Manufacturer specific - 0xF0
Manufacturer specific - 0xF1
Manufacturer specific - 0xF2
Manufacturer specific - 0xFD

Também avaliei algumas outras ferramentas:

  • Dimmer - Não diminui a luz de fundo. Usa software falso que escurece.
  • ScreenBright - aparentemente usa DDC / CI para controlar a luz de fundo, mas foi removido do site do autor. Eu não tentei baixá-lo de um desses sites de espelho desonesto.
  • Redshift - Falsifica como Dimmer.

Editar: Acontece que existe uma API fácil de usar para definir o brilho da tela no Windows. Aqui está um exemplo de código:

Monitor.h

#pragma once

#include <physicalmonitorenumerationapi.h>
#include <highlevelmonitorconfigurationapi.h>

#include <vector>

class Monitor
{
public:
    explicit Monitor(PHYSICAL_MONITOR pm);
    ~Monitor();

    bool brightnessSupported() const;

    int minimumBrightness() const;
    int maximumBrightness() const;
    int currentBrightness() const;

    void setCurrentBrightness(int b);
    // Set brightness from 0.0-1.0
    void setCurrentBrightnessFraction(double fraction);

private:
    bool mBrightnessSupported = false;

    int mMinimumBrightness = 0;
    int mMaximumBrightness = 0;
    int mCurrentBrightness = 0;
    PHYSICAL_MONITOR mPhysicalMonitor;
};

std::vector<Monitor> EnumerateMonitors();

Monitor.cpp

#include "stdafx.h"
#include "Monitor.h"

Monitor::Monitor(PHYSICAL_MONITOR pm) : mPhysicalMonitor(pm)
{
    DWORD dwMonitorCapabilities = 0;
    DWORD dwSupportedColorTemperatures = 0;
    BOOL bSuccess = GetMonitorCapabilities(mPhysicalMonitor.hPhysicalMonitor, &dwMonitorCapabilities, &dwSupportedColorTemperatures);

    if (bSuccess)
    {
        if (dwMonitorCapabilities & MC_CAPS_BRIGHTNESS)
        {
            // Get min and max brightness.
            DWORD dwMinimumBrightness = 0;
            DWORD dwMaximumBrightness = 0;
            DWORD dwCurrentBrightness = 0;
            bSuccess = GetMonitorBrightness(mPhysicalMonitor.hPhysicalMonitor, &dwMinimumBrightness, &dwCurrentBrightness, &dwMaximumBrightness);
            if (bSuccess)
            {
                mBrightnessSupported = true;
                mMinimumBrightness = dwMinimumBrightness;
                mMaximumBrightness = dwMaximumBrightness;
            }
        }
    }
}

Monitor::~Monitor()
{
}

bool Monitor::brightnessSupported() const
{
    return mBrightnessSupported;
}

int Monitor::minimumBrightness() const
{
    return mMinimumBrightness;
}

int Monitor::maximumBrightness() const
{
    return mMaximumBrightness;
}

int Monitor::currentBrightness() const
{
    if (!mBrightnessSupported)
        return -1;

    DWORD dwMinimumBrightness = 0;
    DWORD dwMaximumBrightness = 100;
    DWORD dwCurrentBrightness = 0;
    BOOL bSuccess = GetMonitorBrightness(mPhysicalMonitor.hPhysicalMonitor, &dwMinimumBrightness, &dwCurrentBrightness, &dwMaximumBrightness);
    if (bSuccess)
    {
        return dwCurrentBrightness;
    }
    return -1;
}

void Monitor::setCurrentBrightness(int b)
{
    if (!mBrightnessSupported)
        return;

    SetMonitorBrightness(mPhysicalMonitor.hPhysicalMonitor, b);
}

void Monitor::setCurrentBrightnessFraction(double fraction)
{
    if (!mBrightnessSupported)
        return;
    if (mMinimumBrightness >= mMaximumBrightness)
        return;
    setCurrentBrightness((mMaximumBrightness - mMinimumBrightness) * fraction + mMinimumBrightness);
}


BOOL CALLBACK MonitorEnumCallback(_In_ HMONITOR hMonitor, _In_ HDC hdcMonitor, _In_ LPRECT lprcMonitor, _In_ LPARAM dwData)
{
    std::vector<Monitor>* monitors = reinterpret_cast<std::vector<Monitor>*>(dwData);

    // Get the number of physical monitors.
    DWORD cPhysicalMonitors;
    BOOL bSuccess = GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &cPhysicalMonitors);

    LPPHYSICAL_MONITOR pPhysicalMonitors = NULL;
    if (bSuccess)
    {
        // Allocate the array of PHYSICAL_MONITOR structures.
        LPPHYSICAL_MONITOR pPhysicalMonitors = new PHYSICAL_MONITOR[cPhysicalMonitors];

        if (pPhysicalMonitors != NULL)
        {
            // Get the array.
            bSuccess = GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors);

            // Use the monitor handles.
            for (unsigned int i = 0; i < cPhysicalMonitors; ++i)
            {
                monitors->push_back(Monitor(pPhysicalMonitors[i]));
            }
        }
    }
    // Return true to continue enumeration.
    return TRUE;
}

std::vector<Monitor> EnumerateMonitors()
{
    std::vector<Monitor> monitors;
    EnumDisplayMonitors(NULL, NULL, MonitorEnumCallback, reinterpret_cast<LPARAM>(&monitors));
    return monitors;
}

Use da maneira óbvia.


funciona no meu BDM4065UC da Philips no DisplayPort usando softMCCS e muito feliz por isso, obrigado !!!!
Avlin

4

É possível controlar as definições de firmware e os monitores compatíveis com DDC / CI.

A Dell fornece um software de marca personalizada com o nome de Dell Display Manager , projetado pela EnTech Taiwan, para uso com seus monitores. É principalmente um utilitário baseado em GUI, mas oferece um recurso de linha de comando bastante abrangente. A versão atual é compatível com o Windows Vista - Windows 10. Pode funcionar com monitores de outros fornecedores, mas isso não foi confirmado.

A versão mais recente do software pode ser baixada diretamente do site oficial .


Dell Display Manager

As informações abaixo são extraídas das informações Sobre do programa e parte do arquivo Readme.txt, destacando a sintaxe da linha de comando.

Sobre

Dell Display Manager
versão 1.27.0.1792
Copyright (c) 2007-2016, EnTech Taiwan.

Licenciado para a Dell Inc.

Website: http://www.entechtaiwan.com
E-mail: dell.support@entechtaiwan.com

Linguagem de Comando

Uma linguagem de comando rica e flexível é suportada pela linha de comando, e os argumentos da linha de comando podem ser combinados. Onde apropriado, uma exibição específica pode ser direcionada, precedendo o comando com o número da exibição, por exemplo 2:AutoSetup; se um número de exibição não for especificado, o comando será aplicado à exibição atual selecionada ou a todas as telas, conforme apropriado. Os comandos incluem:

SetActiveInput [DVI2/HDMI/DP2,etc]- alterna a entrada ativa
RestoreFactoryDefaults- restaura os padrões de fábrica *
AutoSetup- executa uma configuração automática (somente analógica) *
RestoreLevelDefaults- restaura os padrões de nível *
RestoreColorDefaults- restaura os padrões de cores *
SetBrightnessLevel X- define o brilho para X% (0-100) *
SetContrastLevel X- define o contraste para X% (0-100 ) *
SetNamedPreset [Movie/CAL1,etc]- altera o modo predefinido *
SetPowerMode [on/off]- define o modo de energia do monitor *
SetOptimalResolution- alterna para a resolução ideal
SaveProfile [Name]- salva as configurações no perfil nomeado *
RestoreProfile [Name]- restaura as configurações do perfil nomeado *
DeleteProfile [Name]- exclui o perfil nomeado
SetGridType [X]- altera o tipo de grade Easy Arrange para X
Rescan- redefine o hardware da tela
ForceReset- reconecta e redigita o hardware da tela
SetControl X Y- define o controle hexadecimal X para o valor hexadecimal Y
IncControl X Y- aumenta o valor do controle X em Y
DecControl X Y- diminui o valor do controle X em Y
Wait X- pausa X milissegundos
Exit- finaliza o programa

Alguns desses comandos requerem familiaridade com o padrão MCCS. Por exemplo, em monitores que o suportam, o comando para mudar o idioma do OSD para o espanhol seria SetControl CC 0A; para desbloquear um OSD que foi bloqueado inadvertidamente SetControl CA 02.

As instruções podem ser combinadas na linha de comando e atribuídas aos atalhos padrão do Windows com teclas de atalho opcionais. Por exemplo:

ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70

primeiro restauraria os padrões de nível em todos os monitores e, em seguida, definiria o nível de contraste no monitor 2 para 70%.

Nota : Se não estiver direcionado para um monitor específico, os comandos listados acima, marcados com um asterisco (*), se aplicam a todos os monitores para facilitar o controle simples e uniforme de todos os membros de uma matriz de vários monitores. Por exemplo, se executado em uma matriz de 16 monitores idênticos, a linha de comando:

ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75

configuraria todos os 16 monitores para o modo predefinido Quente, com um nível de brilho de 75%.


Não é possível fazer um contraste menor que 25%
Nakilon 03/02

1

Estou usando o programa "mControl", que funciona bem para mim - meu monitor é o Dell U2312HM:

O mControl transforma matrizes de monitor único e múltiplo em dispositivos programáveis ​​inteligentes que alteram dinamicamente a orientação, economizam energia, trocam perfis de cores e ajustam o brilho, eliminando a necessidade de aprender e navegar por menus obscuros usando botões arcaicos no próprio monitor.

Para baixar este programa, você precisa encontrar a seção "Utilitários gráficos e de monitor" na metade inferior da página http://www.ddc-ci.com/ e clicar no link "mControl" na parte inferior dessa seção.


0

Eu uso esse script de autohotkey, inspirado nesta postagem do reddit para enviar os comandos MCCS apropriados. Funciona como um encanto no meu Dell U2718Q no Win10:

^!-::
    changeMonitorBrightness(-10)
return

^!=::
    changeMonitorBrightness(10)

getMonitorHandle()
{
  MouseGetPos, xpos, ypos
  point := ( ( xpos ) & 0xFFFFFFFF ) | ( ( ypos ) << 32 )
  ; Initialize Monitor handle
  hMon := DllCall("MonitorFromPoint"
    , "int64", point ; point on monitor
    , "uint", 1) ; flag to return primary monitor on failure

  ; Get Physical Monitor from handle
  VarSetCapacity(Physical_Monitor, 8 + 256, 0)

  DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
    , "int", hMon   ; monitor handle
    , "uint", 1   ; monitor array size
    , "int", &Physical_Monitor)   ; point to array with monitor

  return hPhysMon := NumGet(Physical_Monitor)
}

destroyMonitorHandle(handle)
{
  DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)
}


changeMonitorBrightness(delta)
{
  vcpLuminance := 0x10

  handle := getMonitorHandle()

  DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"
    , "int", handle
    , "char", vcpLuminance
    , "Ptr", 0
    , "uint*", luminance
    , "uint*", maximumValue)

  luminance += delta

  if (luminance > 100) 
  {
  luminance := 100
  }
  else if (luminance < 0)
  {
  luminance := 0
  }

  DllCall("dxva2\SetVCPFeature"
    , "int", handle
    , "char", vcpLuminance
    , "uint", luminance)
  destroyMonitorHandle(handle)
} 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.