TrafficMonitor 插件显示当前hdr状态
本帖最后由 archxm 于 2023-6-29 17:53 编辑需求是 想知道当前系统的 hdr 开关状态。本想单独开发一个程序,在托盘显示的,没想到 TrafficMonitor支持插件开发,就整了个插件。TrafficMonitor支持在任务栏显示一些信息。
hdr快捷切换开关是 win + alt + B
链接:https://pan.baidu.com/s/1N7K5ze98c_AR2SbOkeXILw
提取码:w1r5
这里会显示 hdr 或 nohdr,表示当前hdr是打开还是关闭状态。
网盘下载的文件,放到 TrafficMonitor\plugins 文件夹,没有 plugins 文件夹 就自己建一个。
这里需要 TrafficMonitor 显示任务栏窗口,在 任务栏窗口信息 那里,鼠标右键 会出来一个 弹出菜单,选 显示设置。
滚动条往下拉,选中自绘示例
代码就是用这个 TrafficMonitor 自带的插件demo代码改的。关键代码如下:
bool CheckDisplayHDRSupport()
{
HRESULT hr;
ComPtr<IDXGIFactory4> m_dxgiFactory;
hr = CreateDXGIFactory2(0, IID_PPV_ARGS(&m_dxgiFactory));
if (FAILED(hr))
{
return false;
}
// Retrieve the current default adapter.
ComPtr<IDXGIAdapter1> dxgiAdapter;
hr = m_dxgiFactory->EnumAdapters1(0, &dxgiAdapter);
if (FAILED(hr))
{
return false;
}
UINT i = 0;
ComPtr<IDXGIOutput> currentOutput;
ComPtr<IDXGIOutput> bestOutput;
float bestIntersectArea = -1;
bool bRet = false;
while (dxgiAdapter->EnumOutputs(i, ¤tOutput) != DXGI_ERROR_NOT_FOUND)
{
bestOutput = currentOutput;
ComPtr<IDXGIOutput6> output6;
hr = bestOutput.As(&output6);
if (FAILED(hr)) {
continue;
}
DXGI_OUTPUT_DESC1 desc1;
hr = output6->GetDesc1(&desc1);
if (FAILED(hr)) {
continue;
}
bRet = desc1.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020;
if (bRet) break;
i++;
}
//m_dxgiFactory->Release();
return bRet;
}
void CCustomDrawItem::DrawItem(void* hDC, int x, int y, int w, int h, bool dark_mode)
{
//绘图句柄
CDC* pDC = CDC::FromHandle((HDC)hDC);
//矩形区域
CRect rect(CPoint(x, y), CSize(w, h));
auto b = CheckDisplayHDRSupport();
LPCWSTR LL = b?L"hdr":L"nohdr";
//设置颜色
COLORREF color1{ dark_mode ? RGB(255, 143, 107) : RGB(227, 81, 16) };
COLORREF color2{ dark_mode ? RGB(183, 241, 96) : RGB(83, 131, 11) };
COLORREF color3{ dark_mode ? RGB(158, 218, 251) : RGB(6, 111, 168) };
CPen aPen, * pOldPen;
aPen.CreatePen(PS_SOLID, 1, color1);
pOldPen = pDC->SelectObject(&aPen);
pDC->DrawText(LL, &rect, DT_LEFT);
pDC->SelectObject(pOldPen);
}
链接器里,乱七八糟依赖项:
dxgi.lib
d3d12.lib
d3d11.lib
d2d1.lib
dwrite.lib
dxguid.lib
延迟加载:
d3d12.dll
参考:
https://github.com/zhongyang219/TrafficMonitor/wiki/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97
https://github.com/zhongyang219/TrafficMonitor
https://github.com/microsoft/DirectX-Graphics-Samples.git
现在通过windows hdr校准,可以自动桌面sdr 但是亮度调节只能在hdr选项里面设置,之前用的twinkle tray就不能在hdr状态下,调节sdr亮度。
不知道我说明白没,有啥可以方便的调节办法没?
试试楼主这个,感谢分享。 nickybaby 发表于 2023-6-29 17:00
现在通过windows hdr校准,可以自动桌面sdr 但是亮度调节只能在hdr选项里面设置,之前用的twinkle tray就不 ...
没,可能我没这个需求。哈哈,从来没用过校准。
我一般不通过windows调节亮度,以前还偶尔设置显示器亮度,现在没弄过了。
你可以截个图瞧瞧。 本帖最后由 nickybaby 于 2023-6-29 17:21 编辑
https://gitee.com/zhongyang219/TrafficMonitor/raw/master/Screenshots/main.png
论坛插图 插不进去~
1.84.1 x64版本
怎么都没找到,显示设置呢
找到了,要放在任务栏,才能看到 [偷笑] 这玩意儿还是不能读取13900K温度和频率 这插件可以分别显示大核和小核的占用么 技术流要顶 马克一下。。。https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif 有没有强开Auto HDR的API 好多新游戏既没有HDR巨硬也不给自动 本帖最后由 archxm 于 2023-6-29 21:08 编辑
卢奇亚诺 发表于 2023-6-29 19:11
这插件可以分别显示大核和小核的占用么
搜了下,找不到这个api,windows的api实在太多了,msdn非常复杂, shit hill
理论上来说,必然是可以实现的,因为 各种监控工具,都能识别e-core p-core,获取到cpu使用率后,分开计算一下即可。我实在没找到这个api fighte97 发表于 2023-6-29 20:38
有没有强开Auto HDR的API 好多新游戏既没有HDR巨硬也不给自动
这个,你把系统hdr打开,再玩游戏,它不就是hdr么?
我试过war3,打开hdr后玩游戏,场景的暗处能看清。不开的话,白天环境光强的话,屏幕上的游戏暗处不容易看见。 archxm 发表于 2023-6-29 21:07
这个,你把系统hdr打开,再玩游戏,它不就是hdr么?
我试过war3,打开hdr后玩游戏,场景的暗处能看清。不 ...
系统开了 大部分游戏启动会提示已使用Windows Auto HDR增强画面效果很好 但仍有一部分游戏没有自动HDR我也找不到这个API Stackoverflow Reddit都翻遍了
页:
[1]