È possibile abilitare il controllo della luminosità del software su Dell U2412M


13

Bene, volevo solo questa semplice domanda sì / no al supporto e-mail Dell. Il loro sito web richiedeva un codice di servizio solo per inviare un'e-mail. Poi ho provato il loro supporto "tecnico" alla chat. Qualcuno indiano ha risposto in modo strano e alla fine ha risposto che non aveva conoscenze tecniche e mi ha dato il link al supporto e-mail (che ho già provato).

Ho un monitor Dell U2412M che ha un DisplayPort e una porta USB up-link. Ho attivato DDC / CI nell'OSD. Sto usando Windows 8 e il controllo della luminosità sulla Charm Bar è disabilitato.

È possibile abilitarlo? Perché ho sentito che DDC / CI consente al tuo computer di controllare il tuo schermo.

Lo standard DDC / CI (Command Interface) è stato introdotto nell'agosto 1998. Specifica un mezzo per un computer per inviare comandi al monitor, nonché ricevere i dati del sensore dal monitor, tramite un collegamento bidirezionale. Comandi specifici per il controllo dei monitor sono definiti in una versione standard 1.0 di Control Control Command Set (MCCS), rilasciata nel settembre 1998. I monitor DDC / CI sono talvolta forniti con un sensore di colore esterno per consentire la calibrazione automatica del bilanciamento del colore del monitor. Alcuni monitor DDC / CI inclinabili supportano una funzione di auto-pivot, in cui un sensore di rotazione nel monitor consente al sistema operativo di mantenere il display in posizione verticale mentre il monitor viene spostato tra le sue posizioni verticale e orizzontale. La maggior parte dei monitor DDC / CI supporta solo un piccolo sottoinsieme di comandi MCCS e alcuni hanno comandi non documentati.gestione della luminosità e del contrasto.


Per Linux controlla ddcutil.com
cwd

Risposte:



6

Ho un Dell U2515H collegato tramite HDMI a una scheda nVidia.

Ho provato softMCCS e ha funzionato bene. Sono stato in grado di regolare la luminosità della retroilluminazione dal software.

Questi sono i codici di controllo supportati da questo monitor:

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

Ho anche valutato alcuni altri strumenti:

  • Dimmer : non attenua la retroilluminazione. Utilizza un oscuramento software falso.
  • ScreenBright - Apparentemente utilizza DDC / CI per controllare la retroilluminazione, ma è stato rimosso dal sito Web dell'autore. Non ho provato a scaricarlo da uno di quei siti mirror malvagi.
  • Redshift - Finge come Dimmer.

Modifica: si scopre che esiste un'API facile da usare per impostare la luminosità dello schermo in Windows. Ecco un esempio di codice:

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

Utilizzare in modo ovvio.


funziona sul mio Philips BDM4065UC su DisplayPort usando softMCCS e sono davvero felice per questo, grazie !!!!
Avlin,

4

È possibile controllare le impostazioni del firmware e la configurazione dei monitor che supportano DDC / CI.

Dell fornisce un software personalizzato con il nome di Dell Display Manager , progettato da EnTech Taiwan, da utilizzare con i propri monitor. È principalmente un'utilità basata sulla GUI ma offre una funzionalità della riga di comando abbastanza completa. La versione corrente è compatibile con Windows Vista - Windows 10. Potrebbe funzionare con display di altri fornitori, ma ciò non è stato confermato.

L'ultima versione del software può essere scaricata direttamente dal sito Web ufficiale .


Dell Display Manager

Il sotto informazioni è tratto dal programma Chi informazioni e parte del Readme.txt file di evidenziazione della sintassi della riga di comando.

Di

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

Concesso in licenza a Dell Inc.

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

Lingua di comando

Un linguaggio di comando ricco e flessibile è supportato dalla riga di comando e gli argomenti della riga di comando possono essere combinati. Se del caso, un display specifico può essere scelto come target anteponendo al comando il numero del display, ad esempio 2:AutoSetup; se non viene specificato un numero di display, il comando verrà applicato al display attualmente selezionato o a tutti i display, come appropriato. I comandi includono:

SetActiveInput [DVI2/HDMI/DP2,etc]- cambia l'ingresso attivo
RestoreFactoryDefaults- ripristina i valori predefiniti di fabbrica *
AutoSetup- esegue un autosetup (solo analogico) *
RestoreLevelDefaults- ripristina i valori predefiniti di livello *
RestoreColorDefaults- ripristina i valori predefiniti di colore *
SetBrightnessLevel X- imposta la luminosità su X% (0-100) *
SetContrastLevel X- imposta il contrasto su X% (0-100 ) *
SetNamedPreset [Movie/CAL1,etc]- modifica la modalità preimpostata *
SetPowerMode [on/off]- imposta la modalità di alimentazione del display *
SetOptimalResolution- passa alla risoluzione ottimale
SaveProfile [Name]- salva le impostazioni sul profilo denominato *
RestoreProfile [Name]- ripristina le impostazioni dal profilo denominato *
DeleteProfile [Name]- elimina il profilo denominato
SetGridType [X]- cambia il tipo di griglia Easy Arrange su X
Rescan- ripristina l'hardware del display
ForceReset- ricollega e ripristina l'hardware del display
SetControl X Y- imposta il controllo esadecimale X sul valore esadecimale Y
IncControl X Y- aumenta il valore del controllo X di Y
DecControl X Y- diminuisce il valore del controllo X di Y
Wait X- mette in pausa X millisecondi
Exit- termina il programma

Alcuni di questi comandi richiedono familiarità con lo standard MCCS. Ad esempio, sui monitor che lo supportano, il comando per passare dalla lingua OSD allo spagnolo sarebbe SetControl CC 0A; per sbloccare un OSD che è stato inavvertitamente bloccato SetControl CA 02.

Le istruzioni possono essere combinate sulla riga di comando e assegnate a collegamenti Windows standard con tasti di scelta rapida opzionali. Per esempio:

ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70

ripristinerebbe prima i valori predefiniti di livello su tutti i monitor, quindi imposterà il livello di contrasto sul monitor n. 2 al 70%.

Nota : se non indirizzati a un monitor specifico, i comandi sopra elencati che sono contrassegnati con un asterisco (*) si applicano a tutti i monitor per facilitare il controllo semplice e uniforme su tutti i membri di una matrice multi-monitor. Ad esempio, se eseguito su una matrice di 16 monitor identici, la riga di comando:

ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75

imposterebbe tutti e 16 i monitor in modalità preimpostazione Warm, con un livello di luminosità del 75%.


Il contrasto non può essere inferiore al 25%
Nakilon,

1

Sto usando il programma "mControl" che funziona bene per me - il mio monitor è Dell U2312HM:

mControl trasforma array di monitor singoli e multipli in dispositivi intelligenti programmabili che cambiano dinamicamente l'orientamento, risparmiano energia, cambiano i profili di colore e regolano la luminosità, eliminando la necessità di imparare e navigare attraverso menu oscuri utilizzando i pulsanti arcaici sul display stesso.

Per scaricare questo programma è necessario trovare la sezione "Utilità grafica e monitor" nella metà inferiore della pagina http://www.ddc-ci.com/ e fare clic sul collegamento "mControl" nella parte inferiore di quella sezione.


0

Uso questo script autohotkey, ispirato a questo post reddit per inviare i comandi MCCS appropriati. Funziona come un fascino sul mio Dell U2718Q con 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)
} 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.