Apakah mungkin untuk mengaktifkan kontrol kecerahan perangkat lunak pada Dell U2412M


13

Yah, saya hanya ingin ya / tidak pertanyaan sederhana ini untuk dukungan email Dell. Situs web mereka memerlukan kode layanan hanya untuk mengirim email. Kemudian saya mencoba dukungan obrolan "teknis" mereka. Beberapa orang India menjawab dengan aneh dan akhirnya menjawab bahwa dia tidak memiliki pengetahuan teknis dan hanya memberi saya tautan ke dukungan email (yang sudah saya coba).

Saya memiliki monitor Dell U2412M yang memiliki DisplayPort dan port USB up-link. Saya telah mengaktifkan DDC / CI di OSD. Saya menggunakan Windows 8, dan kontrol kecerahan pada Charm Bar dinonaktifkan.

Apakah mungkin untuk mengaktifkannya? Karena saya mendengar bahwa DDC / CI memungkinkan komputer Anda mengontrol tampilan Anda.

Standar DDC / CI (Command Interface) diperkenalkan pada Agustus 1998. Standar ini menentukan cara bagi komputer untuk mengirim perintah ke monitor, serta menerima data sensor dari monitor, melalui tautan dua arah. Perintah khusus untuk mengontrol monitor ditetapkan dalam Monitor Command Command (MCCS) standar versi 1.0, dirilis pada September 1998. Monitor DDC / CI kadang-kadang dilengkapi dengan sensor warna eksternal untuk memungkinkan kalibrasi otomatis keseimbangan warna monitor. Beberapa monitor DDC / CI miring mendukung fungsi auto-pivot, di mana sensor rotasi pada monitor memungkinkan sistem operasi untuk menjaga tampilan tetap tegak saat monitor dipindahkan antara posisi portrait dan landscape. Sebagian besar monitor DDC / CI hanya mendukung sebagian kecil dari perintah MCCS dan beberapa memiliki perintah tidak berdokumen.manajemen kecerahan dan kontras.


Untuk linux, periksa ddcutil.com
cwd

Jawaban:



6

Saya memiliki Dell U2515H yang terhubung melalui HDMI ke kartu nVidia.

Saya mencoba softMCCS dan itu bekerja dengan baik. Saya dapat mengatur kecerahan cahaya latar dari perangkat lunak.

Ini adalah kode kontrol yang monitor ini dukung:

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

Saya juga telah mengevaluasi beberapa alat lain:

  • Dimmer - Tidak meredupkan lampu latar. Menggunakan peredupan perangkat lunak palsu.
  • ScreenBright - Rupanya menggunakan DDC / CI untuk mengontrol cahaya latar, tetapi telah dihapus dari situs web penulis. Saya belum mencoba mengunduhnya dari salah satu situs cermin yang cerdik itu.
  • Redshift - Memalsukannya seperti Dimmer.

Sunting: Ternyata ada API yang mudah digunakan untuk mengatur kecerahan layar di Windows. Berikut ini beberapa contoh kode:

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

Gunakan dengan cara yang jelas.


bekerja pada Philips BDM4065UC saya di DisplayPort menggunakan softMCCS dan sangat senang untuk itu, terima kasih !!!!
Avlin

4

Dimungkinkan untuk mengontrol pengaturan firmware dan konfigurasi monitor yang mendukung DDC / CI.

Dell menyediakan perangkat lunak bermerek khusus dengan nama Dell Display Manager , yang dirancang oleh EnTech Taiwan, untuk digunakan dengan monitor mereka. Ini terutama merupakan utilitas berbasis GUI tetapi menawarkan kemampuan baris perintah yang cukup komprehensif. Versi saat ini kompatibel dengan Windows Vista - Windows 10. Mungkin berfungsi dengan tampilan dari vendor lain, tetapi itu belum dikonfirmasi.

Versi terbaru perangkat lunak dapat diunduh langsung dari situs web resmi .


Manajer Display Dell

Informasi di bawah dikutip dari program Tentang info dan bagian dari Readme.txt file yang menyoroti sintaks baris perintah.

Tentang

Dell Display Manager
Versi 1.27.0.1792
Hak Cipta (c) 2007-2016, EnTech Taiwan.

Dilisensikan ke Dell Inc.

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

Bahasa Perintah

Bahasa perintah yang kaya dan fleksibel didukung melalui baris perintah, dan argumen baris perintah dapat digabungkan. Apabila diperlukan, layar tertentu dapat ditargetkan oleh prakata perintah dengan jumlah tampilan, misalnya, 2:AutoSetup; jika nomor tampilan tidak ditentukan, perintah akan diterapkan ke tampilan yang dipilih saat ini atau ke semua tampilan, yang sesuai. Perintah meliputi:

SetActiveInput [DVI2/HDMI/DP2,etc]- mengalihkan input aktif
RestoreFactoryDefaults- mengembalikan default pabrik *
AutoSetup- menjalankan autosetup (hanya analog) *
RestoreLevelDefaults- mengembalikan default level *
RestoreColorDefaults- mengembalikan default warna *
SetBrightnessLevel X- mengatur kecerahan ke X% (0-100) *
SetContrastLevel X- mengatur kontras ke X% (0-100) ) *
SetNamedPreset [Movie/CAL1,etc]- mengubah mode Prasetel *
SetPowerMode [on/off]- mengatur mode daya tampilan *
SetOptimalResolution- beralih ke resolusi optimal
SaveProfile [Name]- menyimpan pengaturan ke profil bernama *
RestoreProfile [Name]- mengembalikan pengaturan dari profil bernama *
DeleteProfile [Name]- menghapus profil bernama
SetGridType [X]- mengubah Mudah Susun jenis kisi ke X
Rescan- memindai perangkat keras layar
ForceReset- menghubungkan kembali dan memindai ulang perangkat keras display
SetControl X Y- menetapkan kontrol hex X ke nilai hex Y
IncControl X Y- meningkatkan nilai kontrol X oleh Y
DecControl X Y- mengurangi nilai kontrol X oleh Y
Wait X- jeda X milidetik
Exit- mengakhiri program

Beberapa dari perintah ini memerlukan pengenalan standar MCCS. Misalnya, pada monitor yang mendukungnya, perintah untuk mengalihkan bahasa OSD ke Spanyol adalah SetControl CC 0A; untuk membuka kunci OSD yang secara tidak sengaja terkunci SetControl CA 02.

Instruksi dapat digabungkan pada baris perintah dan ditetapkan ke pintasan Windows standar dengan tombol pintas opsional. Sebagai contoh:

ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70

pertama-tama akan mengembalikan level default pada semua monitor, dan kemudian mengatur level kontras pada monitor # 2 hingga 70%.

Catatan : Jika tidak ditargetkan ke monitor tertentu, perintah yang tercantum di atas yang ditandai dengan tanda bintang (*) berlaku untuk semua monitor untuk memfasilitasi kontrol yang sederhana dan seragam atas semua anggota matriks multi-monitor. Misalnya, jika dijalankan pada matriks 16 monitor yang identik, baris perintah:

ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75

akan mengatur semua 16 monitor ke mode Preset hangat, dengan tingkat kecerahan 75%.


Tidak dapat membuat kontras lebih rendah dari 25%
Nakilon

1

Saya telah menggunakan program "mControl" yang berfungsi dengan baik untuk monitor saya adalah Dell U2312HM:

mControl mengubah array monitor tunggal dan ganda menjadi perangkat cerdas yang dapat diprogram yang secara dinamis mengubah orientasi, menghemat daya, mengganti profil warna dan menyesuaikan kecerahan, menghilangkan kebutuhan untuk mempelajari dan menavigasi melalui menu yang tidak jelas menggunakan tombol kuno pada tampilan itu sendiri.

Untuk mengunduh program ini, Anda perlu menemukan bagian "Graphics and Monitor Utilities" di bagian bawah halaman http://www.ddc-ci.com/ , dan klik tautan "mControl" di bagian bawah bagian itu.


0

Saya menggunakan skrip autohotkey ini, terinspirasi oleh posting reddit ini untuk mengirim perintah MCCS yang sesuai. Bekerja seperti pesona pada Dell U2718Q saya di bawah 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)
} 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.