找回密码
 加入我们
搜索
      
查看: 4906|回复: 11

[软件] TrafficMonitor 插件显示当前hdr状态

[复制链接]
发表于 2023-6-29 16:55 | 显示全部楼层 |阅读模式
本帖最后由 archxm 于 2023-6-29 17:53 编辑

需求是 想知道当前系统的 hdr 开关状态。本想单独开发一个程序,在托盘显示的,没想到 TrafficMonitor  支持插件开发,就整了个插件。TrafficMonitor  支持在任务栏显示一些信息。
hdr快捷切换开关是 win + alt + B

链接:https://pan.baidu.com/s/1N7K5ze98c_AR2SbOkeXILw
提取码:w1r5

这里会显示 hdr 或 nohdr,表示当前hdr是打开还是关闭状态。
微信图片_20230629164129.png

网盘下载的文件,放到 TrafficMonitor\plugins 文件夹,没有 plugins 文件夹 就自己建一个。
2.png

这里需要 TrafficMonitor 显示任务栏窗口,在 任务栏窗口信息 那里,鼠标右键 会出来一个 弹出菜单,选 显示设置。
setting.png

滚动条往下拉,选中自绘示例
setting2.png


代码就是用这个 TrafficMonitor 自带的插件demo代码改的。关键代码如下:
  1. bool CheckDisplayHDRSupport()
  2. {
  3.     HRESULT hr;
  4.     ComPtr<IDXGIFactory4> m_dxgiFactory;

  5.     hr = CreateDXGIFactory2(0, IID_PPV_ARGS(&m_dxgiFactory));
  6.     if (FAILED(hr))
  7.     {
  8.         return false;
  9.     }

  10.     // Retrieve the current default adapter.
  11.     ComPtr<IDXGIAdapter1> dxgiAdapter;
  12.     hr = m_dxgiFactory->EnumAdapters1(0, &dxgiAdapter);
  13.     if (FAILED(hr))
  14.     {
  15.         return false;
  16.     }

  17.     UINT i = 0;
  18.     ComPtr<IDXGIOutput> currentOutput;
  19.     ComPtr<IDXGIOutput> bestOutput;
  20.     float bestIntersectArea = -1;

  21.     bool bRet = false;
  22.     while (dxgiAdapter->EnumOutputs(i, &currentOutput) != DXGI_ERROR_NOT_FOUND)
  23.     {
  24.         bestOutput = currentOutput;
  25.         ComPtr<IDXGIOutput6> output6;
  26.         hr = bestOutput.As(&output6);
  27.         if (FAILED(hr)) {
  28.             continue;
  29.         }

  30.         DXGI_OUTPUT_DESC1 desc1;
  31.         hr = output6->GetDesc1(&desc1);
  32.         if (FAILED(hr)) {
  33.             continue;
  34.         }
  35.         bRet = desc1.ColorSpace == DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020;
  36.         if (bRet) break;
  37.       
  38.         i++;
  39.     }

  40.     //m_dxgiFactory->Release();

  41.     return bRet;
  42. }

  43. void CCustomDrawItem::DrawItem(void* hDC, int x, int y, int w, int h, bool dark_mode)
  44. {
  45.     //绘图句柄
  46.     CDC* pDC = CDC::FromHandle((HDC)hDC);
  47.     //矩形区域
  48.     CRect rect(CPoint(x, y), CSize(w, h));

  49.    
  50.     auto b = CheckDisplayHDRSupport();
  51.     LPCWSTR LL = b?L"hdr":L"nohdr";

  52.     //设置颜色
  53.     COLORREF color1{ dark_mode ? RGB(255, 143, 107) : RGB(227, 81, 16) };
  54.     COLORREF color2{ dark_mode ? RGB(183, 241, 96) : RGB(83, 131, 11) };
  55.     COLORREF color3{ dark_mode ? RGB(158, 218, 251) : RGB(6, 111, 168) };

  56.     CPen aPen, * pOldPen;
  57.     aPen.CreatePen(PS_SOLID, 1, color1);
  58.     pOldPen = pDC->SelectObject(&aPen);
  59.     pDC->DrawText(LL, &rect, DT_LEFT);
  60.     pDC->SelectObject(pOldPen);
  61. }
复制代码


链接器里,乱七八糟依赖项:
  1. dxgi.lib
  2. d3d12.lib
  3. d3d11.lib
  4. d2d1.lib
  5. dwrite.lib
  6. dxguid.lib
复制代码


延迟加载:
  1. d3d12.dll
复制代码


参考:

  1. https://github.com/zhongyang219/TrafficMonitor/wiki/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97
  2. https://github.com/zhongyang219/TrafficMonitor
  3. https://github.com/microsoft/DirectX-Graphics-Samples.git
复制代码
发表于 2023-6-29 17:00 来自手机 | 显示全部楼层
现在通过windows hdr校准,可以自动桌面sdr 但是亮度调节只能在hdr选项里面设置,之前用的twinkle tray就不能在hdr状态下,调节sdr亮度。

不知道我说明白没,有啥可以方便的调节办法没?

试试楼主这个,感谢分享。
 楼主| 发表于 2023-6-29 17:07 | 显示全部楼层
nickybaby 发表于 2023-6-29 17:00
现在通过windows hdr校准,可以自动桌面sdr 但是亮度调节只能在hdr选项里面设置,之前用的twinkle tray就不 ...

没,可能我没这个需求。哈哈,从来没用过校准。
我一般不通过windows调节亮度,以前还偶尔设置显示器亮度,现在没弄过了。
你可以截个图瞧瞧。
发表于 2023-6-29 17:10 | 显示全部楼层
本帖最后由 nickybaby 于 2023-6-29 17:21 编辑

https://gitee.com/zhongyang219/T ... creenshots/main.png


论坛插图 插不进去~

1.84.1 x64版本

怎么都没找到,显示设置呢



找到了,要放在任务栏,才能看到
发表于 2023-6-29 19:07 | 显示全部楼层
这玩意儿还是不能读取13900K温度和频率
发表于 2023-6-29 19:11 | 显示全部楼层
这插件可以分别显示大核和小核的占用么
发表于 2023-6-29 20:21 | 显示全部楼层
技术流要顶
发表于 2023-6-29 20:26 | 显示全部楼层
马克一下。。。
发表于 2023-6-29 20:38 | 显示全部楼层
有没有强开Auto HDR的API 好多新游戏既没有HDR巨硬也不给自动
 楼主| 发表于 2023-6-29 21:05 | 显示全部楼层
本帖最后由 archxm 于 2023-6-29 21:08 编辑
卢奇亚诺 发表于 2023-6-29 19:11
这插件可以分别显示大核和小核的占用么


搜了下,找不到这个api,windows的api实在太多了,msdn非常复杂, shit hill

理论上来说,必然是可以实现的,因为 各种监控工具,都能识别e-core p-core,获取到cpu使用率后,分开计算一下即可。我实在没找到这个api
 楼主| 发表于 2023-6-29 21:07 | 显示全部楼层
fighte97 发表于 2023-6-29 20:38
有没有强开Auto HDR的API 好多新游戏既没有HDR巨硬也不给自动

这个,你把系统hdr打开,再玩游戏,它不就是hdr么?
我试过war3,打开hdr后玩游戏,场景的暗处能看清。不开的话,白天环境光强的话,屏幕上的游戏暗处不容易看见。
发表于 2023-6-29 23:27 | 显示全部楼层
archxm 发表于 2023-6-29 21:07
这个,你把系统hdr打开,再玩游戏,它不就是hdr么?
我试过war3,打开hdr后玩游戏,场景的暗处能看清。不 ...

系统开了 大部分游戏启动会提示已使用Windows Auto HDR增强画面效果很好 但仍有一部分游戏没有自动HDR  我也找不到这个API Stackoverflow Reddit都翻遍了
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-2-4 20:44 , Processed in 0.010542 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表