archxm 发表于 2023-6-29 16:55

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, &currentOutput) != 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

nickybaby 发表于 2023-6-29 17:00

现在通过windows hdr校准,可以自动桌面sdr 但是亮度调节只能在hdr选项里面设置,之前用的twinkle tray就不能在hdr状态下,调节sdr亮度。

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

试试楼主这个,感谢分享。

archxm 发表于 2023-6-29 17:07

nickybaby 发表于 2023-6-29 17:00
现在通过windows hdr校准,可以自动桌面sdr 但是亮度调节只能在hdr选项里面设置,之前用的twinkle tray就不 ...

没,可能我没这个需求。哈哈,从来没用过校准。
我一般不通过windows调节亮度,以前还偶尔设置显示器亮度,现在没弄过了。
你可以截个图瞧瞧。

nickybaby 发表于 2023-6-29 17:10

本帖最后由 nickybaby 于 2023-6-29 17:21 编辑

https://gitee.com/zhongyang219/TrafficMonitor/raw/master/Screenshots/main.png


论坛插图 插不进去~

1.84.1 x64版本

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



找到了,要放在任务栏,才能看到

诺凯厦门 发表于 2023-6-29 19:07

[偷笑] 这玩意儿还是不能读取13900K温度和频率

卢奇亚诺 发表于 2023-6-29 19:11

这插件可以分别显示大核和小核的占用么

mqwxp 发表于 2023-6-29 20:21

技术流要顶

sthmb 发表于 2023-6-29 20:26

马克一下。。。https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif

fighte97 发表于 2023-6-29 20:38

有没有强开Auto HDR的API 好多新游戏既没有HDR巨硬也不给自动

archxm 发表于 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

archxm 发表于 2023-6-29 21:07

fighte97 发表于 2023-6-29 20:38
有没有强开Auto HDR的API 好多新游戏既没有HDR巨硬也不给自动

这个,你把系统hdr打开,再玩游戏,它不就是hdr么?
我试过war3,打开hdr后玩游戏,场景的暗处能看清。不开的话,白天环境光强的话,屏幕上的游戏暗处不容易看见。

fighte97 发表于 2023-6-29 23:27

archxm 发表于 2023-6-29 21:07
这个,你把系统hdr打开,再玩游戏,它不就是hdr么?
我试过war3,打开hdr后玩游戏,场景的暗处能看清。不 ...

系统开了 大部分游戏启动会提示已使用Windows Auto HDR增强画面效果很好 但仍有一部分游戏没有自动HDR我也找不到这个API Stackoverflow Reddit都翻遍了
页: [1]
查看完整版本: TrafficMonitor 插件显示当前hdr状态