Czy można włączyć programową kontrolę jasności w Dell U2412M


13

Chciałem tylko to tak / nie proste pytanie do obsługi poczty e-mail firmy Dell. Ich strona internetowa wymagała kodu serwisowego, aby wysłać wiadomość e-mail. Potem wypróbowałem ich „techniczne” wsparcie czatu. Pewna Hinduska odpowiedziała dziwnie i ostatecznie odpowiedziała, że ​​nie ma wiedzy technicznej i po prostu dała mi link do wsparcia przez e-mail (którego już próbowałem).

Mam monitor Dell U2412M z portem DisplayPort i portem USB up-link. Włączyłem DDC / CI w OSD. Korzystam z systemu Windows 8, a kontrola jasności na pasku Charm jest wyłączona.

Czy można to włączyć? Ponieważ słyszałem, że DDC / CI pozwala komputerowi sterować wyświetlaniem.

Standard DDC / CI (Interfejs poleceń) został wprowadzony w sierpniu 1998 r. Określa sposób, w jaki komputer wysyła polecenia do monitora, a także odbiera dane z czujnika za pośrednictwem łącza dwukierunkowego. Szczegółowe polecenia sterujące monitorami są zdefiniowane w osobnej standardowej wersji 1.0 Zestawu kontrolnego monitorowania (MCCS), wydanej we wrześniu 1998 r. Monitory DDC / CI są czasami dostarczane z zewnętrznym czujnikiem kolorów, aby umożliwić automatyczną kalibrację balansu kolorów monitora. Niektóre uchylne monitory DDC / CI obsługują funkcję automatycznego obrotu, w której czujnik obrotu w monitorze umożliwia systemowi operacyjnemu utrzymanie wyświetlacza w pionie, gdy monitor jest przemieszczany między pozycją pionową a poziomą. Większość monitorów DDC / CI obsługuje tylko niewielki podzbiór poleceń MCCS, a niektóre mają nieudokumentowane polecenia.zarządzanie jasnością i kontrastem.


Dla Linuksa sprawdź ddcutil.com
cwd 21.04.18

Odpowiedzi:



6

Mam Dell U2515H podłączony przez HDMI do karty nVidia.

Próbowałem softMCCS i działało dobrze. Byłem w stanie dostosować jasność podświetlenia z oprogramowania.

Są to kody kontrolne, które najwyraźniej monitoruje:

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

Oceniłem także kilka innych narzędzi:

  • Ściemniacz - Nie przyciemnia podświetlenia. Wykorzystuje fałszywe przyciemnianie oprogramowania.
  • ScreenBright - Najwyraźniej używa DDC / CI do sterowania podświetleniem, ale został usunięty ze strony autora. Nie próbowałem go pobierać z jednej z tych podejrzanych stron lustrzanych.
  • Redshift - podróbka jak ściemniacz.

Edycja: Okazuje się, że jest łatwy w użyciu interfejs API do ustawiania jasności ekranu w systemie Windows. Oto przykładowy kod:

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

Używaj w oczywisty sposób.


działa na moim Philips BDM4065UC na DisplayPort przy użyciu softMCCS i naprawdę cieszę się z tego, dzięki !!!!
Avlin

4

Możliwe jest kontrolowanie ustawień oprogramowania układowego i konfiguracji monitorów obsługujących DDC / CI.

Firma Dell zapewnia niestandardowe oprogramowanie o nazwie Dell Display Manager , zaprojektowane przez EnTech Taiwan, do użytku z ich monitorami. Jest to przede wszystkim narzędzie oparte na graficznym interfejsie użytkownika, ale oferuje dość kompleksowe funkcje wiersza poleceń. Obecna wersja jest kompatybilna z Windows Vista - Windows 10. Może działać z wyświetlaczami innych dostawców, ale nie zostało to potwierdzone.

Najnowszą wersję oprogramowania można pobrać bezpośrednio z oficjalnej strony internetowej .


Dell Display Manager

Poniższe informacje są zaczerpnięte z programu O informacji i część Readme.txt pliku wyróżnianie składni wiersza poleceń.

O

Dell Display Manager
wersja 1.27.0.1792
Copyright (c) 2007-2016, EnTech Taiwan.

Licencjonowany dla Dell Inc.

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

Język poleceń

Bogaty i elastyczny język poleceń obsługiwany jest za pomocą wiersza polecenia, a argumenty wiersza polecenia można łączyć. W stosownych przypadkach można wskazać określony ekran, zastępując polecenie numerem wyświetlacza, np 2:AutoSetup.; jeśli numer wyświetlacza nie zostanie określony, polecenie zostanie zastosowane odpowiednio do bieżącego wybranego wyświetlacza lub wszystkich wyświetlaczy. Polecenia obejmują:

SetActiveInput [DVI2/HDMI/DP2,etc]- przełącza aktywne wejście
RestoreFactoryDefaults- przywraca ustawienia fabryczne *
AutoSetup- wykonuje automatyczną konfigurację (tylko analog) *
RestoreLevelDefaults- przywraca ustawienia domyślne poziomu *
RestoreColorDefaults- przywraca ustawienia domyślne koloru *
SetBrightnessLevel X- ustawia jasność na X% (0-100) *
SetContrastLevel X- ustawia kontrast na X% (0-100 ) *
SetNamedPreset [Movie/CAL1,etc]- zmienia tryb Preset *
SetPowerMode [on/off]- ustawia tryb mocy wyświetlacza *
SetOptimalResolution- przełącza na optymalną rozdzielczość
SaveProfile [Name]- zapisuje ustawienia do nazwanego profilu *
RestoreProfile [Name]- przywraca ustawienia z nazwanego profilu *
DeleteProfile [Name]- usuwa nazwany profil
SetGridType [X]- zmienia Łatwy Rozmieść typ siatki na X
Rescan- skanuje sprzęt ponownie
ForceReset- ponownie podłącza i ponownie skanuje sprzęt wyświetlający
SetControl X Y- ustawia kontrolę szesnastkową X na wartość szesnastkową Y
IncControl X Y- zwiększa wartość kontroli X o Y
DecControl X Y- zmniejsza wartość kontroli X o Y
Wait X- pauza X milisekund
Exit- kończy działanie programu

Niektóre z tych poleceń wymagają znajomości standardu MCCS. Na przykład na monitorach, które go obsługują, polecenie przełączenia języka OSD na hiszpański SetControl CC 0A: aby odblokować OSD, który został przypadkowo zablokowany SetControl CA 02.

Instrukcje można łączyć w wierszu polecenia i przypisywać do standardowych skrótów systemu Windows za pomocą opcjonalnych skrótów klawiszowych. Na przykład:

ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70

najpierw przywróci domyślne wartości poziomu na wszystkich monitorach, a następnie ustawi poziom kontrastu na monitorze nr 2 na 70%.

Uwaga : Jeśli nie są one ukierunkowane na konkretny monitor, polecenia wymienione powyżej oznaczone gwiazdką (*) mają zastosowanie do wszystkich monitorów, aby ułatwić proste i jednolite sterowanie wszystkimi elementami matrycy wielomonitorowej. Na przykład, jeśli jest wykonywany na matrycy 16 identycznych monitorów, wiersz poleceń:

ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75

ustawiłby wszystkie 16 monitorów w tryb ciepłego ustawienia wstępnego z poziomem jasności 75%.


Nie można zmniejszyć kontrastu poniżej 25%
Nakilon

1

Korzystam z programu „mControl”, który działa dobrze dla mnie - moim monitorem jest Dell U2312HM:

mControl zmienia tablice jedno- i wielomonitorowe w inteligentne programowalne urządzenia, które dynamicznie zmieniają orientację, oszczędzają energię, przełączają profile kolorów i dostosowują jasność, eliminując potrzebę uczenia się i poruszania się po niejasnych menu za pomocą archaicznych przycisków na samym wyświetlaczu.

Aby pobrać ten program, musisz znaleźć sekcję „Narzędzia graficzne i monitorujące” w dolnej połowie strony http://www.ddc-ci.com/ i kliknąć link „mControl” na dole tej sekcji.


0

Używam tego skryptu autohotkey, zainspirowanego tym postem reddit, do wysyłania odpowiednich poleceń MCCS. Działa jak urok na moim Dell U2718Q pod 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)
} 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.