Возможно ли включить программное управление яркостью на Dell U2412M?

13

Ну, я просто хотел ответить на этот вопрос да / нет в службу поддержки Dell по электронной почте. Их веб-сайт требовал сервисный код только для отправки по электронной почте. Тогда я попробовал их «техническую» поддержку чата. Какой-то индус ответил странным образом и, наконец, ответил, что у него / нее нет технических знаний, и просто дал мне ссылку на поддержку по электронной почте (которую я уже пробовал).

У меня есть монитор Dell U2412M, который имеет порт DisplayPort и USB-порт восходящей связи. Я включил DDC / CI в экранном меню. Я использую Windows 8, и управление яркостью на панели Charm отключено.

Возможно ли это включить? Потому что я слышал, что DDC / CI позволяет вашему компьютеру управлять вашим дисплеем.

Стандарт DDC / CI (Command Interface) был введен в августе 1998 года. Он определяет средства, с помощью которых компьютер может отправлять команды на монитор, а также получать данные датчика с монитора по двунаправленной линии связи. Специальные команды для управления мониторами определены в отдельной стандартной версии 1.0 набора команд управления мониторами (MCCS), выпущенной в сентябре 1998 года. Мониторы DDC / CI иногда поставляются с внешним цветным датчиком для автоматической калибровки цветового баланса монитора. Некоторые наклонные мониторы DDC / CI поддерживают функцию автоматического поворота, при которой датчик вращения на мониторе позволяет операционной системе держать дисплей в вертикальном положении при перемещении монитора между его портретным и альбомным положениями. Большинство мониторов DDC / CI поддерживают только небольшое подмножество команд MCCS, а некоторые имеют недокументированные команды.управление яркостью и контрастом.

Чертовски овощи
источник
Для Linux проверьте ddcutil.com
cwd

Ответы:

5

Смотрите страницу DDC в Википедии :

Он ссылается на программное обеспечение, которое обеспечивает графический интерфейс и управление командной строкой большинства современных дисплеев.

PJ_in_FL
источник
Спасибо. Я попробовал screenwhite.com/screenbright , и это сработало. Хотя GUI немного неуклюжий ...
Черт, Овощи
6

У меня Dell U2515H, подключенный через HDMI к карте nVidia.

Я попробовал softMCCS, и он работал нормально. Мне удалось отрегулировать яркость подсветки с помощью программного обеспечения.

Вот контрольные коды, которые этот монитор, по-видимому, поддерживает:

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

Я также оценил несколько других инструментов:

  • Диммер - не тускнеет подсветка. Использует поддельное программное обеспечение затемнения.
  • ScreenBright - очевидно использует DDC / CI для управления подсветкой, но был удален с сайта автора. Я не пытался загрузить его с одного из этих хитрых зеркал.
  • Redshift - подделывает его как диммер.

Изменить: Оказывается, есть простой в использовании API для настройки яркости экрана в Windows. Вот пример кода:

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;
}

Используйте очевидным образом.

Timmmm
источник
работает на моем Philips BDM4065UC на DisplayPort с использованием softMCCS и очень рад этому, спасибо !!!!
Авлин
4

Можно управлять настройками прошивки и конфигурацией мониторов, поддерживающих DDC / CI.

Dell предоставляет специальное программное обеспечение под названием Dell Display Manager , разработанное EnTech Taiwan, для использования с их мониторами. Это в первую очередь утилита, основанная на графическом интерфейсе, но обладающая довольно широкими возможностями командной строки. Текущая версия совместима с Windows Vista - Windows 10. Она может работать с дисплеями других производителей, но это не было подтверждено.

Последняя версия программного обеспечения может быть загружена непосредственно с официального сайта .


Диспетчер дисплея Dell

Ниже информации взято из программы О информации и части Readme.txt раскраски файлов синтаксиса командной строки.

Около

Dell Display Manager
Версия 1.27.0.1792
Авторские права (c) 2007-2016, EnTech Taiwan.

Лицензировано для Dell Inc.

Веб-сайт: http://www.entechtaiwan.com
Электронная почта: dell.support@entechtaiwan.com

Командный язык

Богатый и гибкий язык команд поддерживается через командную строку, и аргументы командной строки могут быть объединены. Где это уместно, конкретный дисплей может быть нацелен на предварительную привязку команды к номеру дисплея, например 2:AutoSetup; если номер дисплея не указан, команда будет применена к текущему выбранному дисплею или ко всем дисплеям, в зависимости от ситуации. Команды включают в себя:

SetActiveInput [DVI2/HDMI/DP2,etc]- переключает активный вход
RestoreFactoryDefaults- восстанавливает заводские настройки по умолчанию *
AutoSetup- выполняет автоматическую настройку (только аналоговый) *
RestoreLevelDefaults- восстанавливает настройки по умолчанию для уровня *
RestoreColorDefaults- восстанавливает настройки по умолчанию * *
SetBrightnessLevel X- устанавливает яркость на X% (0-100) *
SetContrastLevel X- устанавливает контраст на X% (0-100 ) *
SetNamedPreset [Movie/CAL1,etc]- изменяет режим предустановок *
SetPowerMode [on/off]- устанавливает режим питания дисплея *
SetOptimalResolution- переключается на оптимальное разрешение
SaveProfile [Name]- сохраняет настройки в именованный профиль *
RestoreProfile [Name]- восстанавливает настройки из именованного профиля *
DeleteProfile [Name]- удаляет именованный профиль
SetGridType [X]- меняет тип сетки Easy Arrange на X
Rescan- повторно сканирует оборудование дисплея
ForceReset- переподключает и повторно сканирует оборудование дисплея
SetControl X Y- устанавливает шестнадцатеричный элемент управления X в шестнадцатеричное значение Y
IncControl X Y- увеличивает значение элемента управления X на Y
DecControl X Y- уменьшает значение элемента управления X на Y
Wait X- пауза X миллисекунд
Exit- завершает программу

Некоторые из этих команд требуют знакомства со стандартом MCCS. Например, на мониторах, которые его поддерживают, команда для переключения языка экранного меню на испанский будет иметь вид SetControl CC 0A; разблокировать экранное меню, которое было случайно заблокировано SetControl CA 02.

Инструкции могут быть объединены в командной строке и назначены стандартным сочетаниям Windows с дополнительными горячими клавишами. Например:

ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70

сначала восстановит значения по умолчанию для всех мониторов, а затем установит уровень контрастности на мониторе № 2 на 70%.

Примечание . Если команды не предназначены для конкретного монитора, перечисленные выше команды, помеченные звездочкой (*), применяются ко всем мониторам, чтобы упростить простой и равномерный контроль над всеми элементами матрицы с несколькими мониторами. Например, если выполняется на матрице из 16 одинаковых мониторов, командная строка:

ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75

установил бы все 16 мониторов в режим предустановок Warm с уровнем яркости 75%.

Джесси Вестлейк
источник
Не могу сделать контраст ниже 25%
Накилон
1

Я использую программу "mControl", которая хорошо работает для меня - мой монитор Dell U2312HM:

mControl превращает один и несколько мониторов в интеллектуальные программируемые устройства, которые динамически меняют ориентацию, сохраняют мощность, переключают цветовые профили и регулируют яркость, устраняя необходимость в изучении и навигации по непонятным меню с помощью архаичных кнопок на самом дисплее.

Чтобы загрузить эту программу, вам нужно найти раздел «Утилиты графики и монитора» в нижней половине страницы http://www.ddc-ci.com/ и щелкнуть ссылку «mControl» в нижней части этого раздела.

Олекса
источник
0

Я использую этот скрипт autohotkey, вдохновленный этим постом reddit, для отправки соответствующих команд MCCS. Работает как шарм на моем Dell U2718Q под 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)
} 
fredless
источник