|
本帖最后由 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
复制代码
延迟加载:
参考:
- 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
复制代码 |
|