เป็นไปได้หรือไม่ที่จะเปิดใช้งานการควบคุมความสว่างของซอฟต์แวร์ใน Dell U2412M


13

ฉันแค่ต้องการให้ใช่ / ไม่ใช่คำถามง่าย ๆ สำหรับฝ่ายสนับสนุนทางอีเมลของ Dell เว็บไซต์ของพวกเขาต้องการรหัสบริการเพียงแค่ส่งอีเมล จากนั้นฉันลองใช้การสนับสนุนการแชท "ทางเทคนิค" คนอินเดียบางคนตอบอย่างประหลาดและในที่สุดก็ตอบว่าเขา / เธอไม่มีความรู้ด้านเทคนิคและเพิ่งให้ลิงค์ไปยังการสนับสนุนทางอีเมล (ซึ่งฉันได้ลองไปแล้ว)

ฉันมีมอนิเตอร์ Dell U2412M ซึ่งมี DisplayPort และพอร์ต USB อัปลิงค์ ฉันเปิดใช้งาน DDC / CI ใน OSD แล้ว ฉันใช้ Windows 8 และการควบคุมความสว่างบน Charm Bar ถูกปิดใช้งาน

เป็นไปได้ไหมที่จะเปิดใช้งาน เพราะฉันได้ยินว่า DDC / CI ช่วยให้คอมพิวเตอร์ของคุณควบคุมการแสดงผลของคุณ

มาตรฐาน DDC / CI (Command Interface) เปิดตัวในเดือนสิงหาคมปี 1998 โดยระบุวิธีที่คอมพิวเตอร์ส่งคำสั่งไปยังจอภาพรวมทั้งรับข้อมูลเซ็นเซอร์จากจอภาพผ่านลิงก์แบบสองทิศทาง คำสั่งเฉพาะสำหรับการตรวจสอบการควบคุมถูกกำหนดไว้ในมาตรฐานการควบคุมการตรวจสอบชุดคำสั่ง (MCCS) แยกต่างหากรุ่น 1.0 ซึ่งวางจำหน่ายในเดือนกันยายนปี 1998 จอภาพ DDC / CI บางครั้งมาพร้อมกับเซ็นเซอร์สีภายนอกเพื่อให้การสอบเทียบอัตโนมัติ จอภาพ DDC / CI แบบเอียงบางตัวรองรับฟังก์ชั่น auto-pivot โดยที่เซ็นเซอร์ตรวจจับการหมุนในจอภาพช่วยให้ระบบปฏิบัติการรักษาการแสดงผลในแนวตั้งได้ขณะที่จอภาพเคลื่อนที่ระหว่างตำแหน่งแนวตั้งและแนวนอน จอภาพ DDC / CI ส่วนใหญ่รองรับชุดย่อยของคำสั่ง MCCS เพียงเล็กน้อยและบางชุดมีคำสั่งที่ไม่มีเอกสารการจัดการความสว่างและความเปรียบต่าง


สำหรับลินุกซ์ตรวจสอบddcutil.com
CWD

คำตอบ:


5

ดูหน้า DDC ในWikipedia :

มันเชื่อมโยงไปยังซอฟต์แวร์ที่ให้ GUI และการควบคุมบรรทัดคำสั่งของจอแสดงผลที่ทันสมัยที่สุด


ขอบคุณ ฉันลองscreenwhite.com/screenbrightแล้วก็ใช้งานได้ แม้ว่า GUI นั้นค่อนข้างงุ่มง่ามนิดหน่อย ...
Damn Vegetables

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 - ทำตัวเหมือน Dimmer

แก้ไข: ปรากฎว่ามี 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;
}

ใช้ในทางที่ชัดเจน


ใช้งานได้กับ Philips BDM4065UC ของฉันบน DisplayPort โดยใช้ softMCCS และมีความสุขมากสำหรับสิ่งนั้นขอบคุณ !!!!
Avlin

4

สามารถควบคุมการตั้งค่าเฟิร์มแวร์และการกำหนดค่าของจอภาพที่รองรับ DDC / CI

Dell มอบซอฟต์แวร์ที่กำหนดเองตามชื่อของDell Display Managerซึ่งออกแบบโดย EnTech Taiwan สำหรับใช้กับจอภาพของพวกเขา มันเป็นพื้นฐานยูทิลิตี้ที่ใช้ GUI แต่มีความสามารถบรรทัดคำสั่งที่ครอบคลุมพอสมควร รุ่นปัจจุบันใช้งานได้กับ Windows Vista - Windows 10 อาจใช้งานได้กับจอแสดงผลจากผู้จำหน่ายรายอื่น แต่ยังไม่ได้รับการยืนยัน

รุ่นล่าสุดของซอฟต์แวร์ที่สามารถดาวน์โหลดได้โดยตรงจากเว็บไซต์อย่างเป็นทางการ


ผู้จัดการจอแสดงผลของเดลล์

ข้อมูลด้านล่างนี้คัดลอกมาจากข้อมูลเกี่ยวกับโปรแกรมและเป็นส่วนหนึ่งของไฟล์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]- เปลี่ยนแปลงง่ายต่อการจัดประเภทของตารางเพื่อ X
Rescan- rescans แสดงฮาร์ดแวร์
ForceReset- เชื่อมต่อใหม่และสแกนอีกครั้งแสดงฮาร์ดแวร์
SetControl X Y- ตั้งค่าการควบคุมฐานสิบหก X เป็นค่าฐานสิบหก Y
IncControl X Y- เพิ่มค่าของตัวควบคุม X คูณ Y
DecControl X Y- ลดค่าควบคุม X ด้วย Y
Wait X- หยุด X มิลลิวินาทีชั่วคราว
Exit- ยกเลิกโปรแกรม

บางคำสั่งเหล่านี้ต้องการความคุ้นเคยกับมาตรฐาน MCCS ตัวอย่างเช่นบนจอภาพที่รองรับคำสั่งเพื่อเปลี่ยนภาษา OSD เป็นภาษาสเปนจะเป็น SetControl CC 0A; เพื่อปลดล็อค OSD SetControl CA 02ที่ถูกล็อกโดยไม่ได้ตั้งใจ

คำแนะนำสามารถรวมกันในบรรทัดคำสั่งและกำหนดให้กับทางลัด Windows มาตรฐานพร้อมกับปุ่มลัดเพิ่มเติม ตัวอย่างเช่น:

ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70

จะคืนค่าเริ่มต้นระดับเริ่มต้นในจอภาพทั้งหมดแล้วตั้งค่าระดับความคมชัดบนจอภาพ # 2 เป็น 70%

หมายเหตุ : หากไม่ได้กำหนดเป้าหมายไปยังจอภาพเฉพาะคำสั่งที่แสดงข้างต้นที่ติดแท็กด้วยเครื่องหมายดอกจัน (*) จะใช้กับจอภาพทั้งหมดเพื่ออำนวยความสะดวกในการควบคุมที่ง่ายและสม่ำเสมอสำหรับสมาชิกทั้งหมดของเมทริกซ์หลายจอภาพ ตัวอย่างเช่นหากดำเนินการในเมทริกซ์ของจอภาพที่เหมือนกัน 16 จอภาพบรรทัดคำสั่ง:

ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75

จะตั้งค่าจอภาพทั้งหมด 16 โหมดเป็นโหมดพรีเซ็ตอุ่นพร้อมระดับความสว่าง 75%


ไม่สามารถสร้างความคมชัดต่ำกว่า 25%
Nakilon

1

ฉันใช้โปรแกรม "mControl" ซึ่งใช้งานได้ดีสำหรับฉัน - มอนิเตอร์ของฉันคือ Dell U2312HM:

mControl เปลี่ยนอาร์เรย์จอภาพเดี่ยวและหลายชุดเป็นอุปกรณ์ที่ตั้งโปรแกรมอัจฉริยะซึ่งเปลี่ยนทิศทางการเคลื่อนที่ประหยัดพลังงานเปลี่ยนโปรไฟล์สีและปรับความสว่างโดยไม่จำเป็นต้องเรียนรู้และนำทางผ่านเมนูที่ไม่ชัดเจนโดยใช้ปุ่มโบราณบนหน้าจอ

ในการดาวน์โหลดโปรแกรมนี้คุณจะต้องค้นหาส่วน "Graphics and Monitor Utilities" ที่ด้านล่างครึ่งล่างของหน้า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)
} 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.