Dam*_*les 16 display displayport brightness
好吧,我只是想向戴尔电子邮件支持提出这个是/否的简单问题。他们的网站需要服务代码才能发送电子邮件。然后我尝试了他们的“技术”聊天支持。一些印度人的回答很奇怪,最后回答说他/她没有技术知识,只是给了我电子邮件支持的链接(我已经尝试过了)。
我有一个戴尔 U2412M 显示器,它有一个 DisplayPort 和一个上行链路 USB 端口。我在 OSD 中启用了 DDC/CI。我使用的是 Windows 8,Charm Bar 上的亮度控制被禁用。
是否可以启用它?因为我听说 DDC/CI 可以让您的计算机控制您的显示器。
DDC/CI(命令接口)标准于 1998 年 8 月推出。它指定了一种计算机通过双向链路向监视器发送命令以及从监视器接收传感器数据的方法。1998 年 9 月发布的单独的监视器控制命令集 (MCCS) 标准版本 1.0 中定义了用于控制监视器的特定命令。DDC/CI 监视器有时会配备外部颜色传感器,以允许自动校准监视器的颜色平衡。一些倾斜的 DDC/CI 显示器支持自动旋转功能,其中显示器中的旋转传感器使操作系统能够在显示器在纵向和横向位置之间移动时保持显示器竖直。大多数 DDC/CI 监视器仅支持 MCCS 命令的一小部分,有些还有未记录的命令。亮度和对比度管理。
我有一个通过 HDMI 连接到 nVidia 卡的戴尔 U2515H。
我试过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
Run Code Online (Sandbox Code Playgroud)
我还评估了其他一些工具:
编辑:原来有一个易于使用的 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();
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
以明显的方式使用。
小智 5
可以控制支持 DDC/CI 的显示器的固件设置和配置。
戴尔提供了一款名为Dell Display Manager的定制品牌软件,由 EnTech Taiwan 设计,用于其显示器。它主要是一个基于 GUI 的实用程序,但提供了相当全面的命令行功能。当前版本与 Windows Vista - Windows 10 兼容。它可能适用于其他供应商的显示器,但这尚未得到证实。
最新版本的软件可以直接从官方网站下载。
以下信息摘自程序的“关于”信息以及Readme.txt文件中突出显示命令行语法的部分内容。
Dell Display Manager
版本 1.27.0.1792
版权所有 (c) 2007-2016,台湾 EnTech。授权给戴尔公司
网站: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]- 将 Easy Arrange 网格类型更改为 X
Rescan- 重新扫描显示硬件
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;解锁无意中锁定的 OSDSetControl CA 02。可以在命令行上组合指令,并使用可选热键将指令分配给标准 Windows 快捷方式。例如:
ddm.exe /RestoreLevelDefaults /2:SetContrastLevel 70将首先恢复所有显示器上的默认级别,然后将显示器 #2 上的对比度级别设置为 70%。
注意:如果不针对特定显示器,则上面列出的标有星号 (*) 的命令适用于所有显示器,以便于对多显示器矩阵的所有成员进行简单且统一的控制。例如,如果在 16 个相同监视器的矩阵上执行,则命令行:
ddm.exe /SetNamedPreset Warm /SetBrightnessLevel 75会将所有 16 台显示器设置为暖预设模式,亮度级别为 75%。