web-dev-qa-db-ja.com

Dell U2412Mでソフトウェアの輝度制御を有効にすることは可能ですか

ええと、私は、デルの電子メールサポートへのこのはい/いいえの簡単な質問を望んでいました。彼らのウェブサイトは、電子メールを送るためだけにサービスコードを必要としました。次に、「テクニカル」チャットサポートを試しました。一部のインド人は奇妙に返答し、最終的に彼/彼女は技術的な知識を持っていないと答えて、(私がすでに試した)電子メールサポートへのリンクを教えてくれました。

DisplayPortとアップリンクUSBポートを備えたDell U2412Mモニターを持っています。 OSDでDDC/CIを有効にしました。 Windows 8を使用していますが、チャームバーの輝度コントロールが無効になっています。

それを有効にすることは可能ですか? DDC/CIがあなたのコンピュータがあなたのディスプレイを制御することを可能にすると聞いたからです。

DDC/CI(コマンドインターフェイス)標準は、1998年8月に導入されました。これは、双方向リンクを介してコンピューターがモニターにコマンドを送信し、モニターからセンサーデータを受信する手段を指定します。モニターを制御する特定のコマンドは、1998年9月にリリースされた別のモニター制御コマンドセット(MCCS)標準バージョン1.0で定義されています。DDC/ CIモニターには、モニターのカラーバランスの自動キャリブレーションを可能にする外部カラーセンサーが付属している場合があります。一部の傾斜DDC/CIモニターは、オートピボット機能をサポートしています。モニターの回転センサーは、モニターが縦位置と横位置の間で移動されるときに、オペレーティングシステムがディスプレイを直立に保つことを可能にします。ほとんどのDDC/CIモニターは、MCCSコマンドの小さなサブセットのみをサポートしており、一部には文書化されていないコマンドがあります。多くのメーカーは、以前はDDC/CIに注意を払っていませんでしたが、現在、ほとんどすべてのモニターがbrightnessやコントラスト管理などの一般的なMCCSコマンドをサポートしています。

13
Damn Vegetables

Wikipedia のDDCページを参照してください。

最新のディスプレイのGUIとコマンドラインコントロールを提供するソフトウェアにリンクしています。

5
PJ_in_FL

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を使用してバックライトを制御していますが、作成者のWebサイトから削除されました。私はそれらの危険なミラーサイトの1つからそれをダウンロードしようとしませんでした。
  • Redshift-ディマーのように偽ります。

編集:Windowsの画面の明るさを設定するための使いやすいAPIがあることがわかりました。ここにいくつかのサンプルコードがあります:

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

明白な方法で使用してください。

6
Timmmm

DDC/CIをサポートするモニターのファームウェア設定と構成を制御できます。

デルは、EnTech Taiwanによって設計されたDell Display Managerという名前のカスタムブランドのソフトウェアを、モニターで使用するために提供しています。これは主にGUIベースのユーティリティですが、かなり包括的なコマンドライン機能を提供します。現在のバージョンはWindows Vista-Windows 10と互換性があります。他のベンダーのディスプレイでも動作する可能性がありますが、確認されていません。

ソフトウェアの最新バージョンは 公式ウェブサイト から直接ダウンロードできます。


デルディスプレイマネージャ

以下の情報は、プログラムのAbout情報とReadme.txtファイルの一部から抜粋して、コマンドライン構文を強調表示しています。

デルディスプレイマネージャ
バージョン1.27.0.1792
Copyright(c)2007-2016、EnTech Taiwan。

Dell Inc.にライセンス供与.

ウェブサイト: http://www.entechtaiwan.com
Eメール:[email protected]

コマンド言語

リッチで柔軟なコマンド言語がコマンドラインでサポートされており、コマンドライン引数を組み合わせることができます。必要に応じて、コマンドの前にディスプレイ番号を付けることにより、特定のディスプレイをターゲットにできます。例: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-16進制御Xを16進値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%にします。

4
Jessie Westlake

私はうまく機能するプログラム「mControl」を使用しています。私のモニターはDell U2312HMです。

mControlは、単一および複数のモニターアレイをインテリジェントなプログラム可能なデバイスに変え、方向を動的に変更し、電力を節約し、カラープロファイルを切り替え、輝度を調整します。これにより、ディスプレイ自体の古くなったボタンを使用して、あいまいなメニューを学習およびナビゲートする必要がなくなります。

このプログラムをダウンロードするには、ページの下半分にある「グラフィックスおよびモニターユーティリティ」セクション http://www.ddc-ci.com/ を見つけて、次の場所にある「mControl」リンクをクリックする必要があります。そのセクションの下部。

1
Oleksa

this reddit post に触発されたこの自動ホットキースクリプトを使用して、適切なMCCSコマンドを送信します。 Win10で私のDell U2718Qの魅力のように動作します:

^!-::
    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)
} 
0
fredless