Full Code of zhongyang219/TrafficMonitor for AI

master dd187f6001b1 cached
279 files
1.9 MB
552.5k tokens
749 symbols
1 requests
Download .txt
Showing preview only (1,990K chars total). Download the full file or copy to clipboard to get everything.
Repository: zhongyang219/TrafficMonitor
Branch: master
Commit: dd187f6001b1
Files: 279
Total size: 1.9 MB

Directory structure:
gitextract_ygmqo6_g/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── BugReport_en.yaml
│   │   ├── BugReport_zh.yaml
│   │   ├── FeatureRequest_en.yaml
│   │   ├── FeatureRequest_zh.yaml
│   │   └── config.yml
│   └── workflows/
│       └── main.yml
├── .gitignore
├── Help.md
├── Help_en-us.md
├── LICENSE
├── LICENSE_CN
├── OpenHardwareMonitorApi/
│   ├── LibreHardwareMonitorLib.xml
│   ├── OpenHardwareMonitorApi.vcxproj
│   ├── OpenHardwareMonitorApi.vcxproj.filters
│   ├── OpenHardwareMonitorImp.cpp
│   ├── OpenHardwareMonitorImp.h
│   ├── ReadMe.txt
│   ├── Stdafx.cpp
│   ├── Stdafx.h
│   ├── UpdateVisitor.cpp
│   ├── UpdateVisitor.h
│   ├── app.rc
│   └── resource.h
├── PluginDemo/
│   ├── CustomDrawItem.cpp
│   ├── CustomDrawItem.h
│   ├── DataManager.cpp
│   ├── DataManager.h
│   ├── OptionsDlg.cpp
│   ├── OptionsDlg.h
│   ├── PluginDemo.cpp
│   ├── PluginDemo.h
│   ├── PluginDemo.rc
│   ├── PluginDemo.vcxproj
│   ├── PluginDemo.vcxproj.filters
│   ├── PluginSystemDate.cpp
│   ├── PluginSystemDate.h
│   ├── PluginSystemTime.cpp
│   ├── PluginSystemTime.h
│   ├── framework.h
│   ├── pch.cpp
│   ├── pch.h
│   └── resource.h
├── README.md
├── README_en-us.md
├── TrafficMonitor/
│   ├── AboutDlg.cpp
│   ├── AboutDlg.h
│   ├── AdapterCommon.cpp
│   ├── AdapterCommon.h
│   ├── AppAlreadyRuningDlg.cpp
│   ├── AppAlreadyRuningDlg.h
│   ├── BaseDialog.cpp
│   ├── BaseDialog.h
│   ├── CAutoAdaptSettingsDlg.cpp
│   ├── CAutoAdaptSettingsDlg.h
│   ├── CMFCColorDialogEx.cpp
│   ├── CMFCColorDialogEx.h
│   ├── CSkinPreviewView.cpp
│   ├── CSkinPreviewView.h
│   ├── CTabCtrlEx.cpp
│   ├── CTabCtrlEx.h
│   ├── CVariant.cpp
│   ├── CVariant.h
│   ├── CalendarHelper.cpp
│   ├── CalendarHelper.h
│   ├── ClassicalTaskbarDlg.cpp
│   ├── ClassicalTaskbarDlg.h
│   ├── ColorSettingListCtrl.cpp
│   ├── ColorSettingListCtrl.h
│   ├── ColorStatic.cpp
│   ├── ColorStatic.h
│   ├── ComboBox2.cpp
│   ├── ComboBox2.h
│   ├── Common.cpp
│   ├── Common.h
│   ├── CommonData.cpp
│   ├── CommonData.h
│   ├── D2D1Support.cpp
│   ├── D2D1Support.h
│   ├── D3D10Support1.cpp
│   ├── D3D10Support1.h
│   ├── DCompositionSupport.cpp
│   ├── DCompositionSupport.h
│   ├── DisplayItem.cpp
│   ├── DisplayItem.h
│   ├── DisplayTextSettingDlg.cpp
│   ├── DisplayTextSettingDlg.h
│   ├── DllFunctions.cpp
│   ├── DllFunctions.h
│   ├── DrawCommon.cpp
│   ├── DrawCommon.h
│   ├── DrawCommonEx.cpp
│   ├── DrawCommonEx.h
│   ├── DrawCommonFactory.cpp
│   ├── DrawCommonFactory.h
│   ├── DrawTextManager.cpp
│   ├── DrawTextManager.h
│   ├── Dxgi1Support2.cpp
│   ├── Dxgi1Support2.h
│   ├── FileDialogEx.cpp
│   ├── FileDialogEx.h
│   ├── FilePathHelper.cpp
│   ├── FilePathHelper.h
│   ├── GeneralSettingsDlg.cpp
│   ├── GeneralSettingsDlg.h
│   ├── HResultException.cpp
│   ├── HResultException.h
│   ├── HighResolutionTimer.h
│   ├── HistoryTrafficCalendarDlg.cpp
│   ├── HistoryTrafficCalendarDlg.h
│   ├── HistoryTrafficDlg.cpp
│   ├── HistoryTrafficDlg.h
│   ├── HistoryTrafficFile.cpp
│   ├── HistoryTrafficFile.h
│   ├── HistoryTrafficListCtrl.cpp
│   ├── HistoryTrafficListCtrl.h
│   ├── HistoryTrafficListDlg.cpp
│   ├── HistoryTrafficListDlg.h
│   ├── IDrawCommon.h
│   ├── IconSelectDlg.cpp
│   ├── IconSelectDlg.h
│   ├── Image2DEffect.cpp
│   ├── Image2DEffect.h
│   ├── IniHelper.cpp
│   ├── IniHelper.h
│   ├── LinkStatic.cpp
│   ├── LinkStatic.h
│   ├── ListCtrlEx.cpp
│   ├── ListCtrlEx.h
│   ├── MainWndColorDlg.cpp
│   ├── MainWndColorDlg.h
│   ├── MainWndSettingsDlg.cpp
│   ├── MainWndSettingsDlg.h
│   ├── MessageDlg.cpp
│   ├── MessageDlg.h
│   ├── NetworkInfoDlg.cpp
│   ├── NetworkInfoDlg.h
│   ├── Nullable.hpp
│   ├── OptionsDlg.cpp
│   ├── OptionsDlg.h
│   ├── PdhHardwareQuery/
│   │   ├── CPUUsage.cpp
│   │   ├── CPUUsage.h
│   │   ├── CpuFreq.cpp
│   │   ├── CpuFreq.h
│   │   ├── DiskUsage.cpp
│   │   ├── DiskUsage.h
│   │   ├── GpuUsage.cpp
│   │   ├── GpuUsage.h
│   │   ├── PdhQuery.cpp
│   │   └── PdhQuery.h
│   ├── PictureStatic.cpp
│   ├── PictureStatic.h
│   ├── PluginInfoDlg.cpp
│   ├── PluginInfoDlg.h
│   ├── PluginManager.cpp
│   ├── PluginManager.h
│   ├── PluginManagerDlg.cpp
│   ├── PluginManagerDlg.h
│   ├── PluginUpdateHelper.cpp
│   ├── PluginUpdateHelper.h
│   ├── ReadMe.txt
│   ├── RenderAPISupport.h
│   ├── SelectConnectionsDlg.cpp
│   ├── SelectConnectionsDlg.h
│   ├── SetItemOrderDlg.cpp
│   ├── SetItemOrderDlg.h
│   ├── SettingsHelper.cpp
│   ├── SettingsHelper.h
│   ├── SimpleXML.cpp
│   ├── SimpleXML.h
│   ├── SkinAutoAdaptSettingDlg.cpp
│   ├── SkinAutoAdaptSettingDlg.h
│   ├── SkinDlg.cpp
│   ├── SkinDlg.h
│   ├── SkinFile.cpp
│   ├── SkinFile.h
│   ├── SkinManager.cpp
│   ├── SkinManager.h
│   ├── SpinEdit.cpp
│   ├── SpinEdit.h
│   ├── StaticEx.cpp
│   ├── StaticEx.h
│   ├── StrTable.cpp
│   ├── StrTable.h
│   ├── SupportedRenderEnums.cpp
│   ├── SupportedRenderEnums.h
│   ├── TabDlg.cpp
│   ├── TabDlg.h
│   ├── TaskBarDlg.cpp
│   ├── TaskBarDlg.h
│   ├── TaskBarDlgDrawCommon.cpp
│   ├── TaskBarDlgDrawCommon.h
│   ├── TaskBarSettingsDlg.cpp
│   ├── TaskBarSettingsDlg.h
│   ├── TaskbarColorDlg.cpp
│   ├── TaskbarColorDlg.h
│   ├── TaskbarDefaultStyle.cpp
│   ├── TaskbarDefaultStyle.h
│   ├── TaskbarHelper.cpp
│   ├── TaskbarHelper.h
│   ├── TaskbarItemOrderHelper.cpp
│   ├── TaskbarItemOrderHelper.h
│   ├── Test.cpp
│   ├── Test.h
│   ├── TinyXml2Helper.cpp
│   ├── TinyXml2Helper.h
│   ├── TrafficMonitor.cpp
│   ├── TrafficMonitor.h
│   ├── TrafficMonitor.rc
│   ├── TrafficMonitor.vcxproj
│   ├── TrafficMonitor.vcxproj.filters
│   ├── TrafficMonitorDlg.cpp
│   ├── TrafficMonitorDlg.h
│   ├── UpdateHelper.cpp
│   ├── UpdateHelper.h
│   ├── WIC.cpp
│   ├── WIC.h
│   ├── Win11TaskbarDlg.cpp
│   ├── Win11TaskbarDlg.h
│   ├── Win11TaskbarSettingDlg.cpp
│   ├── Win11TaskbarSettingDlg.h
│   ├── WinVersionHelper.cpp
│   ├── WinVersionHelper.h
│   ├── WindowsSettingHelper.cpp
│   ├── WindowsSettingHelper.h
│   ├── WindowsWebExperienceDetector.cpp
│   ├── WindowsWebExperienceDetector.h
│   ├── WineTaskbarDlg.cpp
│   ├── WineTaskbarDlg.h
│   ├── auto_start_helper.cpp
│   ├── auto_start_helper.h
│   ├── crashtool.cpp
│   ├── crashtool.h
│   ├── language/
│   │   ├── English.ini
│   │   ├── German.ini
│   │   ├── Hebrew.ini
│   │   ├── Hungarian.ini
│   │   ├── Italian.ini
│   │   ├── Polish.ini
│   │   ├── Portuguese_Brazilian.ini
│   │   ├── Russian.ini
│   │   ├── Simplified_Chinese.ini
│   │   ├── Traditional_Chinese.ini
│   │   └── Turkish.ini
│   ├── language.h
│   ├── print_compile_time.bat
│   ├── res/
│   │   ├── Acknowledgement.txt
│   │   ├── Acknowledgement_en.txt
│   │   └── TrafficMonitor.rc2
│   ├── resource.h
│   ├── skins/
│   │   ├── 0默认皮肤/
│   │   │   └── skin.ini
│   │   ├── xml_test/
│   │   │   └── skin.xml
│   │   ├── 皮肤01/
│   │   │   └── skin.ini
│   │   ├── 皮肤02/
│   │   │   └── skin.ini
│   │   ├── 皮肤03/
│   │   │   └── skin.ini
│   │   ├── 皮肤04/
│   │   │   └── skin.ini
│   │   ├── 皮肤05/
│   │   │   └── skin.ini
│   │   ├── 皮肤06/
│   │   │   └── skin.ini
│   │   ├── 皮肤07/
│   │   │   └── skin.ini
│   │   ├── 皮肤08/
│   │   │   └── skin.ini
│   │   ├── 皮肤09/
│   │   │   └── skin.ini
│   │   ├── 皮肤10/
│   │   │   └── skin.ini
│   │   ├── 皮肤10(竖排)/
│   │   │   └── skin.ini
│   │   ├── 皮肤11/
│   │   │   └── skin.ini
│   │   └── 默认皮肤2/
│   │       └── skin.ini
│   ├── stdafx.cpp
│   ├── stdafx.h
│   ├── targetver.h
│   └── tinyxml2/
│       ├── tinyxml2.cpp
│       └── tinyxml2.h
├── TrafficMonitor.sln
├── UpdateLog/
│   ├── update_log.md
│   ├── update_log_en-us.md
│   └── update_log_zh-tw.md
├── include/
│   ├── OpenHardwareMonitor/
│   │   ├── OpenHardwareMonitorApi.h
│   │   └── OpenHardwareMonitorGlobal.h
│   └── PluginInterface.h
├── version.info
├── version_utf8.info
└── 皮肤制作教程.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/BugReport_en.yaml
================================================
name: Bug Report
description: File a bug report
body:
  - type: checkboxes
    attributes: 
      label: Prerequisites
      options:
        - label: I have searched for related issues in the [issues](https://github.com/halo-dev/halo/issues) list.
          required: true
        - label: I have read the [FAQ](https://github.com/zhongyang219/TrafficMonitor/blob/master/Help_en-us.md) in detail and searched for related issues in FAQ list.
          required: true
  - type: input
    attributes:
      label: Current TrafficMonitor Version
      description: Right-click the TrafficMonitor tray icon, select `Help` → `About`.
    validations: 
      required: true
  - type: input
    attributes:
      label: Current Operating System Version
    validations: 
      required: true
  - type: textarea
    attributes:
      label: What happened?
      description: "For ease of management, please do not report multiple unrelated issues under the same issue."
    validations:
      required: true
  - type: textarea
    attributes:
      label: Log Output
      description: "Error logs can be found in the TrafficMonitor root directory.<br>This will be automatically formatted as code, so no backticks are needed."
      render: shell
  - type: textarea
    attributes:
      label: Additional Information
      description: "If you have other information to note, you can fill it in here."


================================================
FILE: .github/ISSUE_TEMPLATE/BugReport_zh.yaml
================================================
name: Bug反馈
description: 提交Bug反馈
body:
  - type: checkboxes
    attributes: 
      label: 前置条件
      options:
        - label: 已经在[issue](https://github.com/zhongyang219/TrafficMonitor/issues)列表中搜索了相关问题。
          required: true
        - label: 已详细阅读了[常见问题](https://github.com/zhongyang219/TrafficMonitor/blob/master/Help.md)并在常见问题列表中搜索了相关问题。
          required: true
  - type: input
    attributes:
      label: 您当前使用的TrafficMonitor版本
      description: 右键TrafficMonitor托盘图标,选择`帮助` → `关于`。
    validations: 
      required: true
  - type: input
    attributes:
      label: 您当前使用的操作系统版本
    validations: 
      required: true
  - type: textarea
    attributes:
      label: 发生了什么?
      description: "为了方便我们管理,请不要在同一个issue下报告多个不相关的问题。"
    validations:
      required: true
  - type: textarea
    attributes:
      label: 日志输出
      description: "错误日志可在TrafficMonitor根目录中找到。<br>这将自动格式化为代码,因此无需反引号。"
      render: shell
  - type: textarea
    attributes:
      label: 附加信息
      description: "如果你还有其他需要提供的信息,可以在这里填写。"


================================================
FILE: .github/ISSUE_TEMPLATE/FeatureRequest_en.yaml
================================================
name: Feature Request
description: File a feature request
body:
  - type: checkboxes
    attributes: 
      label: Prerequisites
      options:
        - label: I have searched for related issues in the [issues](https://github.com/zhongyang219/TrafficMonitor/issues) list.
          required: true
        - label: I have read the [wiki](https://github.com/zhongyang219/TrafficMonitor/wiki/Home_en) page and make sure that the current version of TrafficMonitor does not provide this feature.
          required: true
  - type: input
    attributes:
      label: Current TrafficMonitor Version
      description: "Right-click the TrafficMonitor tray icon, select `Help` → `About`."
    validations: 
      required: true
  - type: textarea
    attributes:   
      label: Describe the feature
      description: "For ease of management, please do not report multiple unrelated issues under the same issue."
    validations:
      required: true
  - type: textarea
    attributes:
      label: Additional Information
      description: "If you have other information to note, you can fill it in here."


================================================
FILE: .github/ISSUE_TEMPLATE/FeatureRequest_zh.yaml
================================================
name: 功能请求
description: 请求一个新功能
body:
  - type: checkboxes
    attributes: 
      label: 前置条件
      options:
        - label: 已经在[issue](https://github.com/zhongyang219/TrafficMonitor/issues)列表中搜索了相关问题。
          required: true
        - label: 已经阅读了[wiki](https://github.com/zhongyang219/TrafficMonitor/wiki)页面并确保当前版本TrafficMonitor没有提供此功能。
          required: true
  - type: input
    attributes:
      label: 您当前使用的TrafficMonitor版本
      description: 右键TrafficMonitor托盘图标,选择`帮助` → `关于`。
    validations: 
      required: true
  - type: textarea
    attributes:   
      label: 描述一下该功能
      description: "为了方便我们管理,请不要在同一个issue下提交多个没有相关性的特性。"
    validations:
      required: true
  - type: textarea
    attributes:
      label: 附加信息
      description: "如果你还有其他需要提供的信息,可以在这里填写。"


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false


================================================
FILE: .github/workflows/main.yml
================================================
name: Release CI
on: push
jobs:

  x64_build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v3
      
    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v2
      
    - name: Run msbuild
      run: msbuild -p:configuration=release -p:platform=x64 -p:platformToolset=v143
      
    - name: Get current time
      uses: josStorer/get-current-time@v2.0.2
      id: current-time
      with:
        format: YYYYMMDD_HHmmss
        utcOffset: "+08:00"
      
    - name : Upload artifact
      uses: actions/upload-artifact@v4
      with:
        name: x64_${{ steps.current-time.outputs.formattedTime }}_TrafficMonitor
        path: |
          Bin/x64/Release/TrafficMonitor.exe
          Bin/x64/Release/*.dll

    - name : Upload pdb files
      uses: actions/upload-artifact@v4
      with:
        name: x64_${{ steps.current-time.outputs.formattedTime }}_pdb
        path: Bin/x64/Release/*.pdb

  x86_build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v3
      
    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v2
      
    - name: Run msbuild
      run: msbuild -p:configuration=release -p:platform=x86 -p:platformToolset=v143
      
    - name: Get current time
      uses: josStorer/get-current-time@v2.0.2
      id: current-time
      with:
        format: YYYYMMDD_HHmmss
        utcOffset: "+08:00"
      
    - name : Upload artifact
      uses: actions/upload-artifact@v4
      with:
        name: x86_${{ steps.current-time.outputs.formattedTime }}_TrafficMonitor
        path: |
          Bin/Release/TrafficMonitor.exe
          Bin/Release/*.dll
      
    - name : Upload pdb files
      uses: actions/upload-artifact@v4
      with:
        name: x86_${{ steps.current-time.outputs.formattedTime }}_pdb
        path: Bin/Release/*.pdb

  arm64ec_build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v3
      
    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v2
      
    - name: Run msbuild
      run: msbuild -p:configuration=release -p:platform=ARM64EC -p:platformToolset=v143
      
    - name: Get current time
      uses: josStorer/get-current-time@v2.0.2
      id: current-time
      with:
        format: YYYYMMDD_HHmmss
        utcOffset: "+08:00"

    - name: Move dll file path 
      run: mv Bin/x64/Release/*.dll  Bin/ARM64EC/Release/

    - name : Upload artifact
      uses: actions/upload-artifact@v4
      with:
        name: arm64EC_${{ steps.current-time.outputs.formattedTime }}_TrafficMonitor
        path: |
          Bin/ARM64EC/Release/TrafficMonitor.exe
          Bin/ARM64EC/Release/*.dll

    - name : Upload pdb files
      uses: actions/upload-artifact@v4
      with:
        name: arm64EC_${{ steps.current-time.outputs.formattedTime }}_pdb
        path: Bin/ARM64EC/Release/*.pdb
  # winXP_build:
    # runs-on: windows-latest

    # steps:
    # - uses: actions/checkout@v3
      
    # - name: Add msbuild to PATH
      # uses: microsoft/setup-msbuild@v1.1.3
      
    # - name: Run msbuild
      # run: |
        # set ExternalCompilerOptions=/DCOMPILE_FOR_WINXP
        # msbuild -p:configuration=release -p:platform=x86 -p:platformToolset=v140_xp
      # shell: cmd
      
    # - name: Get current time
      # uses: josStorer/get-current-time@v2.0.2
      # id: current-time
      # with:
        # format: YYYYMMDD_HHmmss
        # utcOffset: "+08:00"
      
    # - name : Upload artifact
      # uses: actions/upload-artifact@v3
      # with:
        # name: winXP_${{ steps.current-time.outputs.formattedTime }}_TrafficMonitor
        # path: Bin/Release/TrafficMonitor.exe


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Typescript v1 declaration files
typings/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

*.ini
!skin.ini
*.dat
*.bak
/TrafficMonitor/skins/test*
[Dd]ebug (without temperature)/
[Rr]elease (without temperature)/
[Dd]ebug (lite)/
[Rr]elease (lite)/
/TrafficMonitor/compile_time.txt
!/TrafficMonitor/language/*.ini
*.diagsession


================================================
FILE: Help.md
================================================
**简体中文 | [English](./Help_en-us.md)**

## TrafficMonitor 常见问题
这里是关于TrafficMonitor常见问题的页面,如果你想查看关于TrafficMonitor的各项功能和使用方法的详细介绍,请[点击这里](https://github.com/zhongyang219/TrafficMonitor/wiki)转到TraffinMonitor Wiki页面。

### Windows11下任务栏窗口和系统小组件重叠

在Windows11下,可以通过以下步骤解决此问题:

打开“选项设置”——“任务栏设置”,点击“Windows11相关设置”按钮,勾选“避免与右侧小组件重叠”选项,如下图所示。

<img src="Screenshots/image-20250310121048889.png" alt="image-20250310121048889" style="zoom:80%;" />

如果你的任务栏中没有显示“小组件”,则此选项是灰色不可用状态。

### Windows11下“任务栏窗口显示在任务栏左侧”是灰色不可用状态

在Windows11,只有在任务栏居中的情况下,此选项才可用。

因为当任务栏靠左显示时,左侧没有给TrafficMonitor显示的空间。 

### Windows11下,当任务栏被占满时,TrafficMonitor的任务栏窗口和任务栏图标重叠

<img src="images/image-20250310173257156.png" alt="image-20250310173257156" style="zoom:80%;" />

这个问题目前无法解决,建议尽量不要让任务栏被占满,或者在系统设置中将“合并任务栏按钮和标签”改为“始终”。

请不要向我反馈此问题。

### 如何显示CPU和内存利用率?

在主窗口点击右弹出键菜单,勾选“显示更多信息”。如果需要在任务栏窗口中也显示CPU和内存利用率,则在任务栏窗口中点击右键弹出菜单,选择“显示设置<img src="./Screenshots/images/item.png" style="zoom: 80%;" />”,在弹出对话框中勾选“CPU和内存利用率”即可。

### 如何更改任务栏中“CPU”、“内存”等文本

任务栏窗口中的标签文本是可以自定义的。点击鼠标右键,在右键菜单中选择“选项”,点击“任务栏窗口设置”,点击“显示文本设置”,双击项目右侧的文本即可更改,然后点击两次“确定”即可。

<img src="Screenshots/images/image-20221119093547649.png" alt="image-20221119093547649" style="zoom:80%;" />

由于这些文本是可以自定义的,因此切换语言时不会自动更改。在切换语言后,你可以点击“显示文本”对话框中的“恢复默认”按钮。

### 网速一直显示为0KB

这种情况可能是因为你电脑中正在使用的网卡发生了切换导致的。

点击右键菜单“选择网络连接”下面的“刷新网络连接列表”也许可以解决这个问题。

<img src="Screenshots/images/image-20221119094324759.png" alt="image-20221119094324759" style="zoom:80%;" />

如果问题仍然存在,请尝试在“选择网络连接”的子菜单下选择你要监控的网络连接,而不是选择“自动选择”。

如果问题仍然存在,请尝试在“选项设置”>“常规设置”>“高级”中点击“选择要监控的网络连接”按钮,在弹出的对话框中只勾选你想监控的网络连接,去掉其他项目的勾选,点击两次“确定”按钮即可。

<img src="Screenshots/images/image-20221119094501312.png" alt="image-20221119094501312" style="zoom:80%;" />

### 如何单独设置任务栏窗口中每个项目的颜色?
在右键菜单中选择“选项”,切换到“任务栏窗口设置”,勾选“指定每个项目的颜色”,此时再点击“文本颜色”右边的颜色块,就会弹出“任务栏窗口颜色设置”的对话框了。

如果不勾选“指定每个项目的颜色”,则只能为文本设置统一的颜色。

### 设置了开机自动运行仍然无法开机自启。
从1.80版本开始,标准版和Lite版采用了不同的方式来实现开机自启动。

* Lite版和1.80以前的版本:

  Lite版和1.80以前的版本的开机启动功能是通过在注册表“计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”中创建“TrafficMonitor”的注册表项来实现的,如果你遇到无法开机启动的问题,请先检查该注册表项是否存在,再检查程序的路径是否正确。如果你移动了程序的位置,则会因为路径无效导致开机自启动失效,此时只需要在选项设置中取消“开机自动运行”的勾选,再将其勾选上就可以了。

  注意,某些第三方安全软件可能会阻止TrafficMonitor的开机自启动,请尝试在安全软件中允许TrafficMonitor开机自启动。

  如果设置了以管理员身份运行也会出现开机无法自启动的问题,请尝试去掉以管理员身份运行。

* 标准版:

  标准版是通过创建任务计划来实现开机自启动的。可以通过`控制面板\系统和安全\管理工具`来打开任务计划程序。

  如下图所示:

  <img src="./Screenshots/images/image3.jpg"/>

  如果你遇到无法开机自启动的情况,请到“任务计划程序”中检查TrafficMonitor的计划任务是否正常创建,exe文件的路径是否正确。

开机无法自启动的一个常见原因是你可能移动了TrafficMonitor主程序的位置。如果你为TrafficMonitor设置好了开机自动运行,但是你将TrafficMonitor移动到了其他位置,那么开机自启动肯定就失效了。你需要打开TrafficMonitor的“选项设置”——“常规设置”,如果“开机时自动运行”处于勾选状态,先去掉勾选,然后再次打开“选项设置”——“常规设置”,重新勾选“开机时自动运行”即可。

需要注意的是,如果你使用不含温度监控的版本在注册表中创建了开机自启动项,然后再使用包含温度监控的版本开启开机自启动功能,它会自动将注册表中的开机自启动项删除,再在任务计划中创建开机自启动项。反之亦然。

### 程序弹出“无法保存设置”的对话框。
如果遇到这种情况,说明程序没有向其所在目录下写入数据的权限,导致设置数据无法保存。尝试将程序移动到其他有写入权限的文件夹中可以解决这个问题。

你也可以通过以下步骤将配置文件的保存路径改为C:\Users\\<用户名\>\AppData\Roaming\TrafficMonitor目录。

* 退出TrafficMonitor,以管理员身份重新启动TrafficMonitor。
* 在右键菜单中选择“选项”,切换到“常规设置”选项卡,在“数据和配置文件”中选择“保存到Appdata目录”。

如果此时仍然提示“无法保存设置”,请打开应用程序所在目录,打开`global_cfg.ini`文件,如果不存在请新建一个,在里面添加如下内容:

```
[config]
portable_mode = false
```

如果无法新建,可以在其他位置(比如桌面)新建该文件,然后移动到程序所在目录。

如果`global_cfg.ini`文件已存在,就把`portable_mode `的值改成`false`,保存后重新启动TrafficMonitor。

如果`global_cfg.ini`没有写入权限,可以尝试把该文件复制到桌面,改好后复制回原来的路径将原文件覆盖。

执行以上步骤后理论上应该不会出现这种问题了。如果这个问题仍然出现,请尝试把C:\Users\\<用户名\>\AppData\Roaming\TrafficMonitor\config.ini删除,该文件会在删除后重新生成。

在1.79以后的版本中,如果程序所在目录无法写入数据,会自动将配置和数据文件保存到C:\Users\\<用户名\>\AppData\Roaming\TrafficMonitor目录,此时,“选项”——“常规设置”——“数据和配置文件”中“保存到程序所在目录”将不可用。

### 更改设置后下次开机时设置丢失

如果你没有看到“无法保存设置”的对话框,则说明程序的配置文件是能正常保存的。因此这个问题的原因可能是你的电脑中存在了多个TrafficMonitor的程序文件,并且配置文件保存在了程序所在目录下。

例如,你打开了“D:\software\TrafficMonitor\TrafficMonitor.exe”,并且更改了选项设置,但是下次开机时启动的却是“D:\software1\TrafficMonitor\TrafficMonitor.exe”,而你之前修改的配置被保存在了“D:\software\TrafficMonitor\”目录下。

解决这个问题的方法是:

1. 在“选项设置”>“常规设置”>“配置和数据文件”中,将配置文件的保存位置更改为Appdata目录。
2. 删除你电脑中不需要的TrafficMonitor的程序文件,启动TrafficMonitor后,打开“选项设置”>“常规设置”,点击“重新设置开机自动运行”按钮。

### 网速数值显示不全。
由于不同字体每个字符的宽度并不一样,在某些情况下,确实会出现网速数值显示不全的问题。如果出现了这样的问题,请打开“选项”——“任务栏窗口设置”,在“数据位数”下拉列表中选择一个更大的值。
### 设置了鼠标穿透后如何取消?
在通知区的TrafficMonitor的图标上点击鼠标右键,去掉“鼠标穿透”的勾选即可。

设置了鼠标穿透后,悬浮窗将无法响应任何鼠标消息,也无法弹出右键菜单,但是可以通过通知区图标来弹出右键菜单。主窗口的右键菜单和通知区图标的右键是完全一样的。

另外,即使你之前设置了隐藏通知区图标,开启鼠标穿透后,通知区图标也会自动显示出来,防止无法弹出右键菜单。

说明:以下几种情况下通知区图标会自动显示出来:

* 开启鼠标穿透后;
* 不显示任务栏窗口的情况下隐藏主窗口后;
* 隐藏主窗口的情况下关闭任务栏窗口后;
* 开启鼠标穿透的情况下关闭任务栏窗口后。
### Windows 10 白色任务栏主题时任务栏窗口颜色的问题

在使用白色任务栏主题时,你可以在在“任务栏窗口设置”点击“预设方案”按钮,选择“浅色模式”,可以一键设置浅色模式任务栏颜色。如图所示:

<img src="./Screenshots/images/image2.jpg" style="zoom:80%;" />

同时,你还可能勾选“自动适应Windows10深色/浅色主题”,程序会在Windows10深色/浅色主题更换时自动切换颜色方案。你可以点击“自动适应设置”按钮来配置在深色和浅色主题时分别使用哪个颜色预设。

### 在Windows7/Windows8/8.1下任务栏窗口有个背景色,无法完全透明
这个问题确实存在,但是在Win10下是正常的。这个问题暂时无法解决。

在1.79以后的版本中,Windows8/8.1下可以在“选项”——“任务栏窗口设置”中勾选“背景色透明”,再勾选“根据任务栏颜色自动设置背景色”即可获得较好的显示效果。

### 任务栏窗口有时会显示不全,比如单位被覆盖了
这确实是一个BUG,但是我目前还没有找到一个好的解决方法,这个问题通常出现在任务栏右侧通知区域宽度变化的时候,主要在在切换输入法的时候,如果出现了这个问题,可以将通知区任意一个图标向上拖动将其隐藏,再将其拖下来即可恢复正常。
出现这个问题原因在于,由于系统任务栏通知区的图标数量可能会发生变化,导致通知区的宽度也会时常变化,当通知区的宽度发生变化时,TrafficMonitor的任务栏窗口需要实时调整其位置。但是由于我无法知道通知区的宽度在什么时候变化,因此只能每隔一段时间判断是否需要调整位置,如果任务栏通知区域的宽度变化得太快,就会导致TrafficMonitor的任务栏无法及时调整其位置,从而导致了这个BUG。

**以下步骤或许可以解决这个问题:**

* 打开“设置”
* 点击“时间和语言”——“区域和语言”
* 点击右侧“高级键盘设置”
* 勾选“使用桌面语言栏”
* 右键点击任务栏,选择“任务栏设置”
* 点击“打开或关闭系统图标”,关闭“输入指示”
方法来自知乎 [win10的任务栏为何一点击就乱动?](https://www.zhihu.com/question/312032145/answer/627965084)

### Windows10中开启HDR后任务栏窗口无法显示

部分用户反馈,在Windows10中开始HDR功能会导致任务栏窗口无法显示。如果遇到这个问题,可以尝试在[“选项设置”——“任务栏窗口设置”](https://github.com/zhongyang219/TrafficMonitor/wiki/选项设置#任务栏窗口设置)中关闭“背景透明”选项的勾选。

在1.85版本以后,可以通过在“选项设置”——“任务栏窗口设置”——“渲染设置”中改成Direct2D渲染来解决这个问题。

### CPU利用率显示和任务管理器不一致

在Windows10及以上操作系统中,如果你需要让TrafficMonitor显示的CPU利用率和任务管理器一致,请到[“选项设置”——“常规设置”——“高级”](https://github.com/zhongyang219/TrafficMonitor/wiki/选项设置#高级)——“CPU使用率获取方式”中选择“使用性能计数器”。

由于Windows10以上操作系统中任务管理器获取CPU利用率的方式发生了改变,因此选择“基于CPU使用时间”的方式获取到的CPU利用率会和任务管理器中显示的不一致。

### 关于TrafficMonitor温度监控的问题

由于温度监控功能在某些电脑中存在一些问题,因此温度监控功能默认是关闭的,如果你要使用TrafficMonitor的温度监控功能,请到[“选项设置”-“常规设置”-“硬件监控”](https://github.com/zhongyang219/TrafficMonitor/wiki/选项设置#硬件监控)中开启。开启后,任务栏右键菜单中的“显示设置”子菜单下才会出现温度相关的项目。

TrafficMonitor的温度监控功能依赖第三方开源库[LibreHardwareMonitor](https://github.com/LibreHardwareMonitor/LibreHardwareMonitor)。如果你遇到硬件温度无法显示,或者显示的温度异常的问题,请先下载LibreHardwareMonitor,并查看LibreHardwareMonitor是否能正常显示对应的温度。如果下载的最新版LibreHardwareMonitor可以正常监控到硬件温度,则将下载的LibreHardwareMonitor文件夹中的LibreHardwareMonitorLib.dll替换掉TrafficMonitor文件夹下的LibreHardwareMonitorLib.dll文件,即可解决温度无法检测的问题。

请不要向我反馈诸如温度显示不准确、显卡利用率不准确之类的问题,此类问题我无法解决。TrafficMonitor不是专业的硬件监控软件,无法保证硬件监控的数据在所有设备上的准确性。

**注意:硬件监控功能(包括温度监控和显卡使用率监控)可能存在一些问题,它可能会占用更多的CPU和内存。据部分用户反馈,开启温度功能后会导致程序崩溃和系统死机等问题,请在知晓以上风险后再决定开启硬件监控功能。否则,请不要使用硬件监控功能。**

### 程序启动时提示找不到“MSVC\*.dll”、“mfc\*.dll”、“vc*.dll”

点击以下链接下载并安装Microsoft Visual C++ 运行环境。

[最新支持的 Visual C++ 可再发行程序包下载 | Microsoft Docs](https://docs.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?view=msvc-170)

### 我希望在任务栏上显示更多硬件信息,比如风扇转速、功率等

现在推出了硬件监控插件,可以显示LibreHardwareMonitor中所有监控项目。

![](Screenshots/420555677-53bd3ac9-1c55-4212-aa68-1fe5711e9fbc.png)

使用说明和下载链接请点下方链接转到插件下载页面:

[TrafficMonitorPlugins/download/plugin_download.md at main · zhongyang219/TrafficMonitorPlugins](https://github.com/zhongyang219/TrafficMonitorPlugins/blob/main/download/plugin_download.md)

### 关于程序崩溃问题

如果遇到程序崩溃的问题,重新启动程序后,请先到“选项”——“常规设置”——“硬件监控”中关闭所有项目的硬件监控,因为基于用户提供的dmp文件发现,大多数崩溃问题都和硬件监控功能有关。和硬件监控功能相关的崩溃问题我无法解决,请不要向我发送邮件反馈。如果你排除了硬件监控的问题,但是崩溃问题仍然存在,请先到“选项”——“常规设置”——“高级”——“插件管理”中禁用所有插件,再重新启动程序(如果程序无法启动,请删除TrafficMonitor所在目录下plugins里面的所有dll文件)。如果排除了插件的问题,但是崩溃问题仍然存在,请根据崩溃弹窗中的提示向我发送电子邮件。

如果还遇到其他问题,也可以点击“关于”对话框中的“联系作者”,或者直接[点击此处](mailto:zhongyang219@hotmail.com)向我发送电子邮件。但我由于作者的能力有限,我并不能保证可以解决所有问题,但是你的反馈也许可以帮助我更好的改进这个软件。
请在邮件中尽可能详细地描述你遇到的问题,出现了什么错误提示,你尝试过哪些操作等,最好能够附上截图和配置文件(“选项”——“常规设置”——“打开配置文件所在路径”)。
注意,发送前请先确认一下你发送时使用的电子邮件地址,如果你的邮件地址是形如“outlook_随机字符串@outlook.com”的格式,那么这样的邮箱地址是无法回复的。
这可能是由于你使用了第三方邮箱地址作为Microsoft账号登录Windows导致的。如果有这样的情况,请务必在邮件中附上正确的电子邮件地址。


================================================
FILE: Help_en-us.md
================================================
**[简体中文](./Help.md) | English**

# TrafficMonitor Frequently Asked Questions
This is the page about the Frequently Asked Questions of TrafficMonitor. If you want to view the detailed introduction of the functions and usage of TrafficMonitor, please [click here](https://github.com/zhongyang219/TrafficMonitor/wiki) to go the the TraffinMonitor Wiki page.

### In Windows 11, the taskbar window overlapped with the windows Widgets

In Windows 11, this issue can be fixed with the following steps:

Open "Option Settings"-"Taskbar Window Settings", click the "Settings related to Windows 11" button, and check "Avoid overlapping with right Widgets" option. As shown in the picture bellow.

<img src="Screenshots/image-20250310121048889.png" alt="image-20250310121048889" style="zoom:80%;" />

If the Widgets is not showing on the taskbar, this option is grayed.

### In Windows 11, "The taskbar window appears to the left of the taskbar" is grayed

In Windows 11, this option is only available when the taskbar is align centered.

Because when the taskbar is displayed on the left, there is no space on the left side for TrafficMonitor to display.

### In Windows 11, the taskbar window of TrafficMonitor overlaps with the taskbar icons when taskbar is full

<img src="images/image-20250310173257156.png" alt="image-20250310173257156" style="zoom:80%;" />

This problem cannot be fixed at present. It is recommended to try not to fill the taskbar, or change "Merge taskbar buttons and tabs" to "Always" in the system settings.

Please do not send feedback to me on this issue.

### How to show the CPU and memory usage?

Right click the main window and check "Show More Info". If you also need to display the CPU and memory usage in the taskbar window, right click the taskbar window and select "Display Settings<img src="./Screenshots/images/item.png" style="zoom: 80%;" />", check "CPU and Memory Usage" in the  pop-up dialog box.

### How do I change the text such as "CPU" and "MEM" in the taskbar

The label text in the taskbar window can be customized. Right click on the taskbar window, select "Options", click "Taskbar Windows Settings", click "Display Text settings" button, the text on the right side of the item can be modified by double click. After modified, click "OK" button twice.

<img src="Screenshots/images/image-20221119093547649.png" alt="image-20221119093547649" style="zoom:80%;" />

Because the text is customizable, it does not automatically change when you switch the language. After you swatch the language, you can click "Restore default" button in the "Display Text settings" dialog box.

### The net speed is always displayed as 0KB

This may caused by the switch of the network you are using on your computer.

Click "Refresh connection list" under "Select network connections" in the context menu may solve this problem.

<img src="Screenshots/images/image-20221119094324759.png" alt="image-20221119094324759" style="zoom:80%;" />

If this problem still exists, please try to select the network connection you want to monitored in the "Select network connections" submenu instead of select "Auto select".

If this problem still exists, please try to click the "Select the connection to monitor" button in "Options Settings" > "General Settings" > "Advanced", check the network you want to monitored, uncheck other items, and click "OK" button twice.

<img src="Screenshots/images/image-20221119094501312.png" alt="image-20221119094501312" style="zoom:80%;" />

### How do I set the color of each item in the taskbar window individually?

Select "Options" In the right-click menu, switch to "Taskbar Window Settings" tab, check "Specify colors for each item", and then click the color block on the right side of "Text Color " to pop up the dialog box for taskbar window color settings. 

If you do not check "Specify colors for each item", you can only set the uniform color for the text.

### "Auto run when Windows start" dose not work
Starting from version 1.80, the version with temperature monitoring and the version without temperature monitoring have adopted different methods to realize "auto run when Windows start".

* Versions without temperature monitoring and versions before 1.80:

  The auto run function of the versions without temperature monitoring and versions before 1.80 is achieved by creating the "TrafficMonitor" key in the registry path of "Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run".
  If you encounter the problem of auto run dose not work, please check that the registry exists, and then check the program path is correct. If you move the location of the program, the auto run will be invalid because of the program location being invalid. In this case, you only need to uncheck "Auto run when Windows start" in the option settings, and then check it on.

  Note that some third-party security software may prevent TrafficMonitor from booting up automatically. Please try to allow TrafficMonitor to boot up automatically in the security software.

  If you set the program to run as an administrator, the auto run function will also not work. Please try to remove running as an administrator.

* Version with temperature monitoring:

  The version that includes temperature monitoring implements auto run function by creating a task plan. The task scheduler can be opened through `Control Panel\System and Security\Administrative Tools`.  As shown below:

  <img src="./Screenshots/images/image3.jpg"/>

  If you encounter that situation that the program cannot be started automatically after booting, please go to "Task Scheduler" to check whether the scheduled task of TrafficMonitor is created normally and the path of the exe file is correct.

A common reason why the "Auto run when Windows start" dose not work is that you may have moved the location of the TrafficMonitor main program. If you have set up TrafficMonitor to run automatically at startup, but you move TrafficMonitor to another location, then the auto run at startup will definitely fail. You need to open "Option Settings"-"General Settings" of TrafficMonitor, if "Auto run when Windows start" is checked, remove the check, then open "Option Settings"-"General Settings" again, and check again "Auto run when Windows start" will be fine.

It should be noted that if you use the version without temperature monitoring to create a auto-start item in the registry, and then use the version that with temperature monitoring to turn on the "Auto run when Windows start" function, it will automatically delete the auto-start item in the registry, and then create a auto-start item in the task plan. vice versa.

### The program pops up the "Unable to Save Settings" message box.
If you encountered this problem, that means the program does not have permission to write data to its directory, causing the settings data cannot be saved. Try to move the program to another folder that has write permissions will save this problem. 
You can also change the save path of the configuration and data file to the C:\Users\\<username\>\AppData\Roaming\TrafficMonitor directory by the following steps. 

* Exit TrafficMonitor and restart TrafficMonitor as an administrator.
* Select "Options" in the right-click menu, switch to the "General Settings" tab, and select "Save to AppData Directory" in "Configuration and data files".

If it still pops up the "Unable to Save Settings" message box, open the directory where the application is located, open the `global_cfg.ini` file. If it doesn't exist, create a new one, adding the following:

```
[config]
portable_mode = false
```

If the file cannot be created, you can create the file in a different location, such as the desktop, and then move to the directory where the program is located.

If the `global_cfg.ini` file already exists, change the value of `portable_mode` to `false` and save, then restart TrafficMonitor.

If `global_cfg.ini` does not have write permission, you can try copying the file to the desktop, and then copying it back to the original path to overwrite the original file after modified.

After these steps, this problem should not theoretically occur. If this problem still occurs, try to delete the file C:\Users\\<username\>\AppData\Roaming\TrafficMonitor\config.ini. This file will be regenerated after it is deleted. 

In version 1.79 and later, if the directory where the program located is not writable, the configuration and data files will be automatically saved to the "C:\Users\\<username\>\AppData\Roaming\TrafficMonitor" directory. At this time, "Options" -“General Settings”-“Save to the program directory” in “Configuration and data files” will not be available.

### The configuration is lost after next start up

If you do not see the "Unable to Save Settings" message box, that means the configuration file can be saved normally. The cause of this problem may be that you have multiple TrafficMonitor application files on your computer and the configuration files are saved in the application directory.

For example, you have open "D:\software\TrafficMonitor\TrafficMonitor.exe", and modified the configuration, but next time you start your computer, "D:\software1\TrafficMonitor\TrafficMonitor.exe" is started, while the configuration files you modified before is saved in "D:\software\TrafficMonitor\\".

The method to solve this problem is:

1. Change the save location of the configuration files to AppData directory in "Option Settings" > "General Settings" > "Configuration and data file".
2. Delete the TrafficMonitor application files you don't need on your computer, start TrafficMonitor, open "Option Settings" > "General Settings", click "Reset autorun" button. 

### The net speed value is not fully displayed.
Because the width of each character in different fonts is not the same, in some cases, it does appear the problem of the net speed value is not fully displayed. If this problem occurs, open "Options"-"Taskbar Window Settings", and select a larger value in the "Number of digits" drop down list.
### How to cancel after setting the mouse penetrate?
Right click the TrafficMonitor icon in the notification area, uncheck the "Mouse Penetrate".
After the mouse penetrate is set, the suspension window will not be able to respond to any mouse messages, or pop-up right-click menu. But the menu can be popped up by right click the icon in notification area. The right-click menu of the main window and which of the notification area icon is exactly the same.
In addition, even if you have previously set the hidden notify icon, when the "mouse penetrate" is set, the notify icon will also automatically appear to prevent the right-click menu cannot be displayed. 
Note: The notification area icon will be automatically displayed in the following situations: 

* After the "Mouse Penetrate" is set;
* Hide the main window without displaying the taskbar window;
* Close the taskbar window when the main window is hidden;
* Close the taskbar window when the "Mouse Penetrate" is set.
### Problems with the taskbar window color in Windows 10 white taskbar theme
When using the white taskbar theme, you can click the "Preset" button in the "Taskbar Window Settings" and select "Light Mode" to set the taskbar color in light mode. As the picture shows:

<img src="./Screenshots/images/image2.jpg" style="zoom:80%;" />

At the same time, you may also check "Auto adapt to Windows 10 dark/light theme", the program will automatically switch the color preset when Windows 10 dark/light theme is changed. You can click the "Auto Adapt settings" button to configure which color preset to use for dark and light themes.

### The taskbar windows cannot be displayed when the HDR is turned on in Windows 10

Some users have reported that turning on the HDR function in Windows 10 will cause the taskbar window to fail to display. If you encounter this problem, you can try turning off the "Background Transparent" option in ["Option Settings" - "Taskbar Window Settings"](https://github.com/zhongyang219/TrafficMonitor/wiki/选项设置#任务栏窗口设置).

Since version 1.85, this can be fixed by changing to Direct2D rendering in "Options Settings" - "Taskbar Window Settings" - "Rendering Settings".

### The CPU usage displayed is inconsistent with Task Manager

Since Windows 10, if you want to make the CPU usage shown by TrafficMonitor consistent with Task Manager, please go to "Option Settings"-"General Settings"-"Advanced"-"CPU usage acquisition method", and select "Use the performance counter".

### About the temperature monitoring of TrafficMonitor

Due to some problems occurred in some computers caused by the temperature monitoring function, the temperature monitoring function is turned off by default. If you want to use the temperature monitoring function of TrafficMonitor, please go to ["Option Settings"-"General Settings"-"Hardware Monitoring"](https://github.com/zhongyang219/TrafficMonitor/wiki/选项设置#硬件监控) to enable it. After it is turned on, temperature-related items will appear under the "Display Settings" submenu in the taskbar right-click menu.

The temperature monitoring function of TrafficMonitor relies on a third-party open source library [LibreHardwareMonitor](https://github.com/LibreHardwareMonitor/LibreHardwareMonitor). If you encounter the problem that the hardware temperature cannot be displayed, or the displayed temperature is incorrect, then  please download LibreHardwareMonitor first, and check whether LibreHardwareMonitor can display the corresponding temperature normally.

If LibreHardwareMonitor cannot display the temperature of the corresponding hardware, then I cannot solve this problem. You can report your problem to the author of LibreHardwareMonitor.

If the latest version of LibreHardwareMonitor can display the hardware temperature normally, replace the LibreHardwareMonitorLib.dll files in the TrafficMonitor folder with the downloaded the LibreHardwareMonitorLib.dll files may solve this problem.

**Note: The hardware monitoring function (including temperature monitoring and GPU usage monitoring) may have some problems, which may cause more CPU and memory usage. According to feedback from some users, turning on the temperature function will cause problems such as program crashes and system crashes. Please decide to turn on the hardware monitoring function after you are aware of the above risks. Otherwise, please do not use the hardware monitoring function.**

## The program prompts that "MSVC\*.dll" or "mfc\*.dll" cannot be found when the program starts

Click the link below to download and install the Microsoft Visual C++ runtime environment.

[Latest supported Visual C++ Redistributable downloads | Microsoft Docs](https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)

### I want to have more hardware information on the taskbar, such an fan speed, power, etc

The Hardware Monitor plug in is now available. It can display all the monitoring items in LibreHardwareMonitor.

![](images/420555677-53bd3ac9-1c55-4212-aa68-1fe5711e9fbc.png)

For instructions and download links, please click the link below to go to the plug-in download page:

[TrafficMonitorPlugins/download/plugin_download.md at main · zhongyang219/TrafficMonitorPlugins](https://github.com/zhongyang219/TrafficMonitorPlugins/blob/main/download/plugin_download.md)

### About the crash issue

If you encounter the problem of program crash, please turn off all the items in "Options" - "General Settings" - "Hardware Monitoring" after restarting the program, because based on the DMP file provided by the user, most crash problems are related to the hardware monitoring function. I cannot solve the crash problem related to the hardware monitoring function, please do not send me email feedback. If you have excluded the hardware monitoring problem, but the crash problem still exists, please go to "Options" - "General Settings" - "Advanced" - "Plug-in Management" to disable all plugins, and then restart the program. (If the program fails to start, please delete all the `dll` files in the `plugins` in the directory where TrafficMonitor is located). If you have excluded the plugin problem, but the crash problem still exists, please send me the email according to the prompts in the crash window.

If you have encountered any other problems, you can also click "Contact Author" in the "About" dialog box, or directly [click here](mailto:zhongyang219@hotmail.com) to send me an email.
Please describe the problems you have encountered in detail, the error prompts, what operations you have tried, it is better to attach the screenshots and configuration files ("Options"-"General Settings"-"Open configuration file path"). 
Note: Please confirm the email address that you used before sending the email. If your email address is form like "Outlook_\<random string\>@outlook.com", then such email address is unable to reply.
This may be due to the fact that you are using a third-party e-mail address as the Microsoft account to log on to Windows. If this is the case, be sure to enclose the correct email address in the message.


================================================
FILE: LICENSE
================================================
Copyright (c) <2019> <copyright zhongyang219>

"Anti 996" License Version 1.0 (Draft)

Permission is hereby granted to any individual or legal entity
obtaining a copy of this licensed work (including the source code,
documentation and/or related items, hereinafter collectively referred
to as the "licensed work"), free of charge, to deal with the licensed
work for any purpose, including without limitation, the rights to use,
reproduce, modify, prepare derivative works of, distribute, publish
and sublicense the licensed work, subject to the following conditions:

1. The individual or the legal entity must conspicuously display,
without modification, this License and the notice on each redistributed
or derivative copy of the Licensed Work.

2. The individual or the legal entity must strictly comply with all
applicable laws, regulations, rules and standards of the jurisdiction
relating to labor and employment where the individual is physically
located or where the individual was born or naturalized; or where the
legal entity is registered or is operating (whichever is stricter). In
case that the jurisdiction has no such laws, regulations, rules and
standards or its laws, regulations, rules and standards are
unenforceable, the individual or the legal entity are required to
comply with Core International Labor Standards.

3. The individual or the legal entity shall not induce, suggest or force
its employee(s), whether full-time or part-time, or its independent
contractor(s), in any methods, to agree in oral or written form, to
directly or indirectly restrict, weaken or relinquish his or her
rights or remedies under such laws, regulations, rules and standards
relating to labor and employment as mentioned above, no matter whether
such written or oral agreements are enforceable under the laws of the
said jurisdiction, nor shall such individual or the legal entity
limit, in any methods, the rights of its employee(s) or independent
contractor(s) from reporting or complaining to the copyright holder or
relevant authorities monitoring the compliance of the license about
its violation(s) of the said license.

THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN ANY WAY CONNECTION WITH THE
LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE LICENSED WORK.


================================================
FILE: LICENSE_CN
================================================
版权所有(c)<2019> <copyright zhongyang219>

反996许可证版本1.0

在符合下列条件的情况下,特此免费向任何得到本授权作品的副本(包括源代码、文件和/或相关内容,以
下统称为“授权作品”)的个人和法人实体授权:被授权个人或法人实体有权以任何目的处置授权作品,包括
但不限于使用、复制,修改,衍生利用、散布,发布和再许可:

1. 个人或法人实体必须在许可作品的每个再散布或衍生副本上包含以上版权声明和本许可证,不得自行修
改。
2. 个人或法人实体必须严格遵守与个人实际所在地或个人出生地或归化地、或法人实体注册地或经营地(
以较严格者为准)的司法管辖区所有适用的与劳动和就业相关法律、法规、规则和标准。如果该司法管辖区
没有此类法律、法规、规章和标准或其法律、法规、规章和标准不可执行,则个人或法人实体必须遵守国际
劳工标准的核心公约。
3. 个人或法人不得以任何方式诱导、暗示或强迫其全职或兼职员工或其独立承包人以口头或书面形式同意
直接或间接限制、削弱或放弃其所拥有的,受相关与劳动和就业有关的法律、法规、规则和标准保护的权利
或补救措施,无论该等书面或口头协议是否被该司法管辖区的法律所承认,该等个人或法人实体也不得以任
何方法限制其雇员或独立承包人向版权持有人或监督许可证合规情况的有关当局报告或投诉上述违反许可证
的行为的权利。

该授权作品是"按原样"提供,不做任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵
权性的保证。在任何情况下,无论是在合同诉讼、侵权诉讼或其他诉讼中,版权持有人均不承担因本软件或
本软件的使用或其他交易而产生、引起或与之相关的任何索赔、损害或其他责任。


================================================
FILE: OpenHardwareMonitorApi/LibreHardwareMonitorLib.xml
================================================
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>LibreHardwareMonitorLib</name>
    </assembly>
    <members>
        <member name="P:LibreHardwareMonitor.Hardware.Battery.BatteryGroup.Hardware">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Battery.BatteryGroup.Close">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Battery.BatteryGroup.GetReport">
            <inheritdoc />
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Computer">
            <summary>
            Stores all hardware groups and decides which devices should be enabled and updated.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.#ctor">
            <summary>
            Creates a new <see cref="T:LibreHardwareMonitor.Hardware.IComputer" /> instance with basic initial <see cref="T:LibreHardwareMonitor.Hardware.Computer.Settings" />.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.#ctor(LibreHardwareMonitor.Hardware.ISettings)">
            <summary>
            Creates a new <see cref="T:LibreHardwareMonitor.Hardware.IComputer" /> instance with additional <see cref="T:LibreHardwareMonitor.Hardware.ISettings" />.
            </summary>
            <param name="settings">Computer settings that will be transferred to each <see cref="T:LibreHardwareMonitor.Hardware.IHardware" />.</param>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.Computer.HardwareAdded">
            <inheritdoc />
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.Computer.HardwareRemoved">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.Hardware">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsBatteryEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsControllerEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsCpuEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsGpuEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsMemoryEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsMotherboardEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsNetworkEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsPsuEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.IsStorageEnabled">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Computer.SMBios">
            <summary>
            Contains computer information table read in accordance with <see href="https://www.dmtf.org/standards/smbios">System Management BIOS (SMBIOS) Reference Specification</see>.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.Accept(LibreHardwareMonitor.Hardware.IVisitor)">
            <summary>
            Triggers the <see cref="M:LibreHardwareMonitor.Hardware.IVisitor.VisitComputer(LibreHardwareMonitor.Hardware.IComputer)" /> method for the given observer.
            </summary>
            <param name="visitor">Observer who call to devices.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.Traverse(LibreHardwareMonitor.Hardware.IVisitor)">
            <summary>
            Triggers the <see cref="M:LibreHardwareMonitor.Hardware.IElement.Accept(LibreHardwareMonitor.Hardware.IVisitor)" /> method with the given visitor for each device in each group.
            </summary>
            <param name="visitor">Observer who call to devices.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.Open">
            <summary>
            If hasn't been opened before, opens <see cref="P:LibreHardwareMonitor.Hardware.Computer.SMBios" />, <see cref="T:LibreHardwareMonitor.Hardware.Ring0" />, <see cref="T:LibreHardwareMonitor.Hardware.OpCode" /> and triggers the private <see cref="M:LibreHardwareMonitor.Hardware.Computer.AddGroups" /> method depending on which categories are
            enabled.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.Close">
            <summary>
            If opened before, removes all <see cref="T:LibreHardwareMonitor.Hardware.IGroup" /> and triggers <see cref="M:LibreHardwareMonitor.Hardware.OpCode.Close" />, <see cref="M:LibreHardwareMonitor.Hardware.InpOut.Close" /> and <see cref="M:LibreHardwareMonitor.Hardware.Ring0.Close" />.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Computer.Reset">
            <summary>
            If opened before, removes all <see cref="T:LibreHardwareMonitor.Hardware.IGroup" /> and recreates it.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Computer.Settings">
            <summary>
            <see cref="T:LibreHardwareMonitor.Hardware.Computer" /> specific additional settings passed to its <see cref="T:LibreHardwareMonitor.Hardware.IHardware" />.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Controller.Nzxt.KrakenX3">
            Support for the Kraken X3 devices from NZXT
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.CPU.CpuId.#ctor(System.Int32,System.Int32,LibreHardwareMonitor.Hardware.GroupAffinity)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.CPU.CpuId" /> class.
            </summary>
            <param name="group">The group.</param>
            <param name="thread">The thread.</param>
            <param name="affinity">The affinity.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.CPU.CpuId.Get(System.Int32,System.Int32)">
            <summary>
            Gets the specified <see cref="T:LibreHardwareMonitor.Hardware.CPU.CpuId" />.
            </summary>
            <param name="group">The group.</param>
            <param name="thread">The thread.</param>
            <returns><see cref="T:LibreHardwareMonitor.Hardware.CPU.CpuId" />.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.CPU.GenericCpu.CpuId">
            <summary>
            Gets the CPUID.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.CPU.GenericCpu.Index">
            <summary>
            Gets the CPU index.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Gpu.AmdGpu.DeviceId">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Gpu.AmdGpu.SetDefaultFanSpeed">
            <summary>
            Sets the default fan speed.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Gpu.AmdGpu.GetODNTemperature(LibreHardwareMonitor.Interop.AtiAdlxx.ADLODNTemperatureType,LibreHardwareMonitor.Hardware.Sensor,System.Double,System.Double,System.Boolean)">
            <summary>
            Gets the OverdriveN temperature.
            </summary>
            <param name="type">The type.</param>
            <param name="sensor">The sensor.</param>
            <param name="minTemperature">The minimum temperature.</param>
            <param name="scale">The scale.</param>
            <param name="reset">If set to <c>true</c>, resets the sensor value to <c>null</c>.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Gpu.AmdGpu.GetPMLog(LibreHardwareMonitor.Interop.AtiAdlxx.ADLPMLogDataOutput,LibreHardwareMonitor.Interop.AtiAdlxx.ADLSensorType,LibreHardwareMonitor.Hardware.Sensor,System.Single,System.Boolean)">
            <summary>
            Gets a PMLog sensor value.
            </summary>
            <param name="data">The data.</param>
            <param name="sensorType">Type of the sensor.</param>
            <param name="sensor">The sensor.</param>
            <param name="factor">The factor.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Gpu.AmdGpu.GetOD6Power(LibreHardwareMonitor.Interop.AtiAdlxx.ADLODNCurrentPowerType,LibreHardwareMonitor.Hardware.Sensor)">
            <summary>
            Gets the Overdrive6 power.
            </summary>
            <param name="type">The type.</param>
            <param name="sensor">The sensor.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Gpu.GenericGpu.#ctor(System.String,LibreHardwareMonitor.Hardware.Identifier,LibreHardwareMonitor.Hardware.ISettings)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.Gpu.GenericGpu" /> class.
            </summary>
            <param name="name">Component name.</param>
            <param name="identifier">Identifier that will be assigned to the device. Based on <see cref="T:LibreHardwareMonitor.Hardware.Identifier" /></param>
            <param name="settings">Additional settings passed by the <see cref="T:LibreHardwareMonitor.Hardware.IComputer" />.</param>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Gpu.GenericGpu.DeviceId">
            <summary>
            Gets the device identifier.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Gpu.IntelIntegratedGpu.DeviceId">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Gpu.NvidiaGpu.DeviceId">
            <inheritdoc />
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.GroupAffinity">
            <summary>
            This structure describes a group-specific affinity.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.GroupAffinity.#ctor(System.UInt16,System.UInt64)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.GroupAffinity" /> struct.
            </summary>
            <param name="group">The group.</param>
            <param name="mask">The mask.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.GroupAffinity.Single(System.UInt16,System.Int32)">
            <summary>
            Gets a single group affinity.
            </summary>
            <param name="group">The group.</param>
            <param name="index">The index.</param>
            <returns><see cref="T:LibreHardwareMonitor.Hardware.GroupAffinity" />.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.GroupAffinity.Group">
            <summary>
            Gets the group.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.GroupAffinity.Mask">
            <summary>
            Gets the mask.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.GroupAffinity.Equals(System.Object)">
            <summary>
            Determines whether the specified <see cref="T:System.Object" /> is equal to this instance.
            </summary>
            <param name="o">The <see cref="T:System.Object" /> to compare with this instance.</param>
            <returns><c>true</c> if the specified <see cref="T:System.Object" /> is equal to this instance; otherwise, <c>false</c>.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.GroupAffinity.GetHashCode">
            <summary>
            Returns a hash code for this instance.
            </summary>
            <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.GroupAffinity.op_Equality(LibreHardwareMonitor.Hardware.GroupAffinity,LibreHardwareMonitor.Hardware.GroupAffinity)">
            <summary>
            Implements the == operator.
            </summary>
            <param name="a1">The a1.</param>
            <param name="a2">The a2.</param>
            <returns>The result of the operator.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.GroupAffinity.op_Inequality(LibreHardwareMonitor.Hardware.GroupAffinity,LibreHardwareMonitor.Hardware.GroupAffinity)">
            <summary>
            Implements the != operator.
            </summary>
            <param name="a1">The a1.</param>
            <param name="a2">The a2.</param>
            <returns>The result of the operator.</returns>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Hardware">
            <summary>
            Object representing a component of the computer.
            <para>
            Individual information can be read from the <see cref="P:LibreHardwareMonitor.Hardware.Hardware.Sensors"/>.
            </para>
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.#ctor(System.String,LibreHardwareMonitor.Hardware.Identifier,LibreHardwareMonitor.Hardware.ISettings)">
            <summary>
            Creates a new <see cref="T:LibreHardwareMonitor.Hardware.Hardware"/> instance based on the data provided.
            </summary>
            <param name="name">Component name.</param>
            <param name="identifier">Identifier that will be assigned to the device. Based on <see cref="P:LibreHardwareMonitor.Hardware.Hardware.Identifier"/></param>
            <param name="settings">Additional settings passed by the <see cref="T:LibreHardwareMonitor.Hardware.IComputer"/>.</param>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.Hardware.Closing">
            <summary>
            Event triggered when <see cref="T:LibreHardwareMonitor.Hardware.Hardware"/> is closing.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.HardwareType">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.Identifier">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.Name">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.Parent">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.Properties">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.Sensors">
            <inheritdoc />
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Hardware.SubHardware">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.GetReport">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.Update">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.Accept(LibreHardwareMonitor.Hardware.IVisitor)">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.Traverse(LibreHardwareMonitor.Hardware.IVisitor)">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.ActivateSensor(LibreHardwareMonitor.Hardware.ISensor)">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.DeactivateSensor(LibreHardwareMonitor.Hardware.ISensor)">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Hardware.Close">
            <inheritdoc />
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.HardwareType">
            <summary>
            Collection of identifiers representing the purpose of the hardware.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.HardwareEventHandler">
            <summary>
            Handler that will trigger the actions assigned to it when the event occurs.
            </summary>
            <param name="hardware">Component returned to the assigned action(s).</param>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.IComputer">
            <summary>
            Basic abstract with methods for the class which can store all hardware and decides which devices are to be checked and updated.
            </summary>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.IComputer.HardwareAdded">
            <summary>
            Triggered when a new <see cref="T:LibreHardwareMonitor.Hardware.IHardware" /> is registered.
            </summary>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.IComputer.HardwareRemoved">
            <summary>
            Triggered when a <see cref="T:LibreHardwareMonitor.Hardware.IHardware" /> is removed.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.Hardware">
            <summary>
            Gets a list of all known <see cref="T:LibreHardwareMonitor.Hardware.IHardware" />.
            <para>Can be updated by <see cref="T:LibreHardwareMonitor.Hardware.IVisitor" />.</para>
            </summary>
            <returns>List of all enabled devices.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsBatteryEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Battery" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsControllerEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about:
            <list>
                <item>
                    <see cref="T:LibreHardwareMonitor.Hardware.Controller.TBalancer.TBalancerGroup" />
                </item>
                <item>
                    <see cref="T:LibreHardwareMonitor.Hardware.Controller.Heatmaster.HeatmasterGroup" />
                </item>
                <item>
                    <see cref="T:LibreHardwareMonitor.Hardware.Controller.AquaComputer.AquaComputerGroup" />
                </item>
                <item>
                    <see cref="T:LibreHardwareMonitor.Hardware.Controller.AeroCool.AeroCoolGroup" />
                </item>
                <item>
                    <see cref="T:LibreHardwareMonitor.Hardware.Controller.Nzxt.NzxtGroup" />
                </item>
            </list>
            devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsCpuEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Cpu" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsGpuEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.GpuAmd" /> or <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.GpuNvidia" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsMemoryEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Memory" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsMotherboardEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Motherboard" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsNetworkEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Network" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsPsuEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Psu" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IComputer.IsStorageEnabled">
            <summary>
            Gets or sets a value indicating whether collecting information about <see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Storage" /> devices should be enabled and updated.
            </summary>
            <returns><see langword="true" /> if a given category of devices is already enabled.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IComputer.GetReport">
            <summary>
            Generates full LibreHardwareMonitor report for devices that have been enabled.
            </summary>
            <returns>A formatted text string with library, OS and hardware information.</returns>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Identifier">
            <summary>
            Represents a unique <see cref="T:LibreHardwareMonitor.Hardware.ISensor" />/<see cref="T:LibreHardwareMonitor.Hardware.IHardware" /> identifier in text format with a / separator.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Identifier.#ctor(LibreHardwareMonitor.Hardware.Identifier,System.String[])">
            <summary>
            Creates a new identifier instance based on the base <see cref="T:LibreHardwareMonitor.Hardware.Identifier" /> and additional elements.
            </summary>
            <param name="identifier">Base identifier being the beginning of the new one.</param>
            <param name="extensions">Additional parts by which the base <see cref="T:LibreHardwareMonitor.Hardware.Identifier" /> will be extended.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Identifier.CompareTo(LibreHardwareMonitor.Hardware.Identifier)">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Identifier.ToString">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Identifier.Equals(System.Object)">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Identifier.GetHashCode">
            <inheritdoc />
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.IElement">
            <summary>
            Abstract parent with logic for the abstract class that stores data.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IElement.Accept(LibreHardwareMonitor.Hardware.IVisitor)">
            <summary>
            Accepts the observer for this instance.
            </summary>
            <param name="visitor">Computer observer making the calls.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IElement.Traverse(LibreHardwareMonitor.Hardware.IVisitor)">
            <summary>
            Call the <see cref="M:LibreHardwareMonitor.Hardware.IElement.Accept(LibreHardwareMonitor.Hardware.IVisitor)"/> method for all child instances <c>(called only from visitors).</c>
            </summary>
            <param name="visitor">Computer observer making the calls.</param>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.IGroup">
            <summary>
            A group of devices from one category in one list.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IGroup.Hardware">
            <summary>
            Gets a list that stores information about <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/> in a given group.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IGroup.GetReport">
            <summary>
            Report containing most of the known information about all <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/> in this <see cref="T:LibreHardwareMonitor.Hardware.IGroup"/>.
            </summary>
            <returns>A formatted text string with hardware information.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IGroup.Close">
            <summary>
            Stop updating this group in the future.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SensorEventHandler">
            <summary>
            Handler that will trigger the actions assigned to it when the event occurs.
            </summary>
            <param name="sensor">Component returned to the assigned action(s).</param>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.IHardware">
            <summary>
            Abstract object that stores information about a device. All sensors are available as an array of <see cref="P:LibreHardwareMonitor.Hardware.IHardware.Sensors"/>.
            <para>
            Can contain <see cref="P:LibreHardwareMonitor.Hardware.IHardware.SubHardware"/>.
            Type specified in <see cref="P:LibreHardwareMonitor.Hardware.IHardware.HardwareType"/>.
            </para>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.HardwareType">
            <summary>
            <inheritdoc cref="T:LibreHardwareMonitor.Hardware.HardwareType"/>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.Identifier">
            <summary>
            Gets a unique hardware ID that represents its location.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.Name">
            <summary>
            Gets or sets device name.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.Parent">
            <summary>
            Gets the device that is the parent of the current hardware. For example, the motherboard is the parent of SuperIO.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.Sensors">
            <summary>
            Gets an array of all sensors such as <see cref="F:LibreHardwareMonitor.Hardware.SensorType.Temperature"/>, <see cref="F:LibreHardwareMonitor.Hardware.SensorType.Clock"/>, <see cref="F:LibreHardwareMonitor.Hardware.SensorType.Load"/> etc.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.SubHardware">
            <summary>
            Gets child devices, e.g. <see cref="T:LibreHardwareMonitor.Hardware.Motherboard.Lpc.LpcIO"/> of the <see cref="T:LibreHardwareMonitor.Hardware.Motherboard.Motherboard"/>.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IHardware.GetReport">
            <summary>
            Report containing most of the known information about the current device.
            </summary>
            <returns>A formatted text string with hardware information.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IHardware.Update">
            <summary>
            Refreshes the information stored in <see cref="P:LibreHardwareMonitor.Hardware.IHardware.Sensors"/> array.
            </summary>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.IHardware.SensorAdded">
            <summary>
            An <see langword="event"/> that will be triggered when a new sensor appears.
            </summary>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.IHardware.SensorRemoved">
            <summary>
            An <see langword="event"/> that will be triggered when one of the sensors is removed.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IHardware.Properties">
            <summary>
            Gets rarely changed hardware properties that can't be represented as sensors.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.IParameter">
            <summary>
            Abstract object that represents additional parameters included in <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.DefaultValue">
            <summary>
            Gets a parameter default value defined by library.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.Description">
            <summary>
            Gets a parameter description defined by library.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.Identifier">
            <summary>
            Gets a unique parameter ID that represents its location.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.IsDefault">
            <summary>
            Gets or sets information whether the given <see cref="T:LibreHardwareMonitor.Hardware.IParameter"/> is the default for <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.Name">
            <summary>
            Gets a parameter name defined by library.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.Sensor">
            <summary>
            Gets the sensor that is the data container for the given parameter.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.IParameter.Value">
            <summary>
            Gets or sets the current value.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SensorType">
            <summary>
            Category of what type the selected sensor is.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SensorValue">
            <summary>
            Stores the readed value and the time in which it was recorded.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SensorValue.#ctor(System.Single,System.DateTime)">
            <param name="value"><see cref="P:LibreHardwareMonitor.Hardware.SensorValue.Value"/> of the sensor.</param>
            <param name="time">The time code during which the <see cref="P:LibreHardwareMonitor.Hardware.SensorValue.Value"/> was recorded.</param>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SensorValue.Value">
            <summary>
            Gets the value of the sensor
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SensorValue.Time">
            <summary>
            Gets the time code during which the <see cref="P:LibreHardwareMonitor.Hardware.SensorValue.Value"/> was recorded.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ISensor">
            <summary>
            Stores information about the readed values and the time in which they were collected.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Hardware">
            <summary>
            <inheritdoc cref="T:LibreHardwareMonitor.Hardware.IHardware"/>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Index">
            <summary>
            Gets the unique identifier of this sensor for a given <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Max">
            <summary>
            Gets a maximum value recorded for the given sensor.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Min">
            <summary>
            Gets a minimum value recorded for the given sensor.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Name">
            <summary>
            Gets or sets a sensor name.
            <para>By default determined by the library.</para>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.SensorType">
            <summary>
            <inheritdoc cref="T:LibreHardwareMonitor.Hardware.SensorType"/>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Value">
            <summary>
            Gets the last recorded value for the given sensor.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensor.Values">
            <summary>
            Gets a list of recorded values for the given sensor.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ISensor.ResetMin">
            <summary>
            Resets a value stored in <see cref="P:LibreHardwareMonitor.Hardware.ISensor.Min"/>.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ISensor.ResetMax">
            <summary>
            Resets a value stored in <see cref="P:LibreHardwareMonitor.Hardware.ISensor.Max"/>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ISensorLimits">
            <summary>
            Abstract object that stores information about the limits of <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensorLimits.HighLimit">
            <summary>
            Upper limit of <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> value.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ISensorLimits.LowLimit">
            <summary>
            Lower limit of <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> value.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ICriticalSensorLimits">
            <summary>
            Abstract object that stores information about the critical limits of <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ICriticalSensorLimits.CriticalHighLimit">
            <summary>
            Critical upper limit of <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> value.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ICriticalSensorLimits.CriticalLowLimit">
            <summary>
            Critical lower limit of <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> value.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ISettings">
            <summary>
            Abstract object that stores settings passed to <see cref="T:LibreHardwareMonitor.Hardware.IComputer"/>, <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/> and <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ISettings.Contains(System.String)">
            <summary>
            Returns information whether the given collection of settings contains a value assigned to the given key.
            </summary>
            <param name="name">Key to which the setting value is assigned.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ISettings.SetValue(System.String,System.String)">
            <summary>
            Assigns a setting option to a given key.
            </summary>
            <param name="name">Key to which the setting value is assigned.</param>
            <param name="value">Text setting value.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ISettings.GetValue(System.String,System.String)">
            <summary>
            Gets a setting option assigned to the given key.
            </summary>
            <param name="name">Key to which the setting value is assigned.</param>
            <param name="value">Default value.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ISettings.Remove(System.String)">
            <summary>
            Removes a setting with the specified key from the settings collection.
            </summary>
            <param name="name">Key to which the setting value is assigned.</param>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.IVisitor">
            <summary>
            Base interface for creating observers who call to devices.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IVisitor.VisitComputer(LibreHardwareMonitor.Hardware.IComputer)">
            <summary>
            Refreshes the values of all <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> in all <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/> on selected <see cref="T:LibreHardwareMonitor.Hardware.IComputer"/>.
            </summary>
            <param name="computer">Instance of the computer to be revisited.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IVisitor.VisitHardware(LibreHardwareMonitor.Hardware.IHardware)">
            <summary>
            Refreshes the values of all <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> on selected <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/>.
            </summary>
            <param name="hardware">Instance of the hardware to be revisited.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IVisitor.VisitSensor(LibreHardwareMonitor.Hardware.ISensor)">
            <summary>
            Refreshes the values on selected <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
            <param name="sensor">Instance of the sensor to be revisited.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.IVisitor.VisitParameter(LibreHardwareMonitor.Hardware.IParameter)">
            <summary>
            Refreshes the values on selected <see cref="T:LibreHardwareMonitor.Hardware.IParameter"/>.
            </summary>
            <param name="parameter">Instance of the parameter to be revisited.</param>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempChipset">
            <summary>Chipset temperature [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempCPU">
            <summary>CPU temperature [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempMB">
            <summary>motherboard temperature [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempTSensor">
            <summary>"T_Sensor" temperature sensor reading [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempVrm">
            <summary>VRM temperature [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.VoltageCPU">
            <summary>CPU Core voltage [mV]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.FanCPUOpt">
            <summary>CPU_Opt fan [RPM]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.FanVrmHS">
            <summary>VRM heat sink fan [RPM]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.FanChipset">
            <summary>Chipset fan [RPM]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.FanWaterPump">
            <summary>Water Pump [RPM]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.FanWaterFlow">
            <summary>Water flow sensor reading [RPM]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.CurrCPU">
            <summary>CPU current [A]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempWaterIn">
            <summary>"Water_In" temperature sensor reading [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempWaterOut">
            <summary>"Water_Out" temperature sensor reading [℃]</summary>
        </member>
        <member name="F:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController.ECSensor.TempWaterBlockIn">
            <summary>Water block temperature sensor reading [℃]</summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.WindowsEmbeddedControllerIO">
            <summary>
            An unsafe but universal implementation for the ACPI Embedded Controller IO interface for Windows
            </summary>
            <remarks>
            It is unsafe because of possible race condition between this application and the PC firmware when
            writing to the EC registers. For a safe approach ACPI/WMI methods have to be used, but those are
            different for each motherboard model.
            </remarks>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Lpc.IT87XX.SelectBank(System.Byte)">
            <summary>
            Selects another bank. Memory from 0x10-0xAF swaps to data from new bank.
            Beware to select the default bank 0 after changing.
            Bank selection is reset after power cycle.
            </summary>
            <param name="bankIndex">New bank index. Can be a value of 0-3.</param>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Motherboard.Motherboard">
            <summary>
            Represents the motherboard of a computer with its <see cref="T:LibreHardwareMonitor.Hardware.Motherboard.Lpc.LpcIO"/> and <see cref="T:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController"/> as <see cref="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SubHardware"/>.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.#ctor(LibreHardwareMonitor.Hardware.SMBios,LibreHardwareMonitor.Hardware.ISettings)">
            <summary>
            Creates motherboard instance by retrieving information from <see cref="T:LibreHardwareMonitor.Hardware.SMBios"/> and creates a new <see cref="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SubHardware"/> based on data from <see cref="T:LibreHardwareMonitor.Hardware.Motherboard.Lpc.LpcIO"/> and <see cref="T:LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC.EmbeddedController"/>.
            </summary>
            <param name="smBios"><see cref="T:LibreHardwareMonitor.Hardware.SMBios"/> table containing motherboard data.</param>
            <param name="settings">Additional settings passed by <see cref="T:LibreHardwareMonitor.Hardware.IComputer"/>.</param>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SensorAdded">
            <inheritdoc/>
        </member>
        <member name="E:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SensorRemoved">
            <inheritdoc/>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.HardwareType">
            <returns><see cref="F:LibreHardwareMonitor.Hardware.HardwareType.Motherboard"/></returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Identifier">
            <inheritdoc/>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Name">
            <summary>
            Gets the name obtained from <see cref="T:LibreHardwareMonitor.Hardware.SMBios"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Parent">
            <inheritdoc/>
            <returns>Always <see langword="null"/></returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Properties">
            <inheritdoc/>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Sensors">
            <inheritdoc/>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SMBios">
            <summary>
            Gets the <see cref="T:LibreHardwareMonitor.Hardware.SMBios"/> information.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SubHardware">
            <inheritdoc/>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.GetReport">
            <inheritdoc/>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Update">
            <summary>
            Motherboard itself cannot be updated. Update <see cref="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SubHardware"/> instead.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Accept(LibreHardwareMonitor.Hardware.IVisitor)">
            <inheritdoc/>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Traverse(LibreHardwareMonitor.Hardware.IVisitor)">
            <inheritdoc/>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.Close">
            <summary>
            Closes <see cref="P:LibreHardwareMonitor.Hardware.Motherboard.Motherboard.SubHardware"/> using <see cref="M:LibreHardwareMonitor.Hardware.Hardware.Close"/>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ParameterDescription">
            <summary>
            Composite class containing information about the selected <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ParameterDescription.#ctor(System.String,System.String,System.Single)">
            <summary>
            Creates a new instance and assigns values.
            </summary>
            <param name="name">Name of the selected component.</param>
            <param name="description">Description of the selected component.</param>
            <param name="defaultValue">Default value of the selected component.</param>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ParameterDescription.Name">
            <summary>
            Gets a name of the parent <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ParameterDescription.Description">
            <summary>
            Gets a description of the parent <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ParameterDescription.DefaultValue">
            <summary>
            Gets a default value of the parent <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SensorVisitor">
            <summary>
            Observer making calls to selected component <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>'s.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SensorVisitor.#ctor(LibreHardwareMonitor.Hardware.SensorEventHandler)">
            <summary>
            Creates a new observer instance.
            </summary>
            <param name="handler">Instance of the <see cref="T:LibreHardwareMonitor.Hardware.SensorEventHandler"/> that triggers events during visiting the <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/>.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SensorVisitor.VisitComputer(LibreHardwareMonitor.Hardware.IComputer)">
            <summary>
            Goes through all the components of the specified <see cref="T:LibreHardwareMonitor.Hardware.IComputer"/> with its <see cref="M:LibreHardwareMonitor.Hardware.IElement.Traverse(LibreHardwareMonitor.Hardware.IVisitor)"/>.
            </summary>
            <param name="computer">Computer class instance that is derived from the <see cref="T:LibreHardwareMonitor.Hardware.IComputer"/> interface.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SensorVisitor.VisitHardware(LibreHardwareMonitor.Hardware.IHardware)">
            <summary>
            Goes through all the components of the specified <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/> with its <see cref="M:LibreHardwareMonitor.Hardware.IElement.Traverse(LibreHardwareMonitor.Hardware.IVisitor)"/>.
            </summary>
            <param name="hardware">Hardware class instance that is derived from the <see cref="T:LibreHardwareMonitor.Hardware.IHardware"/> interface.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SensorVisitor.VisitSensor(LibreHardwareMonitor.Hardware.ISensor)">
            <summary>
            Goes through all the components of the specified <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> using <see cref="T:LibreHardwareMonitor.Hardware.SensorEventHandler"/>.
            </summary>
            <param name="sensor">Sensor class instance that is derived from the <see cref="T:LibreHardwareMonitor.Hardware.ISensor"/> interface.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SensorVisitor.VisitParameter(LibreHardwareMonitor.Hardware.IParameter)">
            <summary>
            Goes through all the components of the specified <see cref="T:LibreHardwareMonitor.Hardware.IParameter"/>.
            <para>
            <see cref="T:System.NotImplementedException"/>
            </para>
            </summary>
            <param name="parameter">Parameter class instance that is derived from the <see cref="T:LibreHardwareMonitor.Hardware.IParameter"/> interface.</param>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SystemEnclosureSecurityStatus">
            <summary>
            System enclosure security status based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.4.3</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SystemEnclosureState">
            <summary>
            System enclosure state based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.4.2</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SystemEnclosureType">
            <summary>
            System enclosure type based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.4.1</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ProcessorFamily">
            <summary>
            Processor family based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.2</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ProcessorCharacteristics">
            <summary>
            Processor characteristics based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.9</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ProcessorType">
            <summary>
            Processor type based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.1</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ProcessorSocket">
            <summary>
            Processor socket based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.5</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SystemWakeUp">
            <summary>
            System wake-up type based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.2.2</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.CacheAssociativity">
            <summary>
            Cache associativity based on <see href="https://www.dmtf.org/dsp/DSP0134">DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.8.5</see>.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.CacheDesignation">
            <summary>
            Processor cache level.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.MemoryType">
            <summary>
            Memory type.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.InformationBase.#ctor(System.Byte[],System.Collections.Generic.IList{System.String})">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.InformationBase" /> class.
            </summary>
            <param name="data">The data.</param>
            <param name="strings">The strings.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.InformationBase.GetByte(System.Int32)">
            <summary>
            Gets the byte.
            </summary>
            <param name="offset">The offset.</param>
            <returns><see cref="T:System.Byte" />.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.InformationBase.GetWord(System.Int32)">
            <summary>
            Gets the word.
            </summary>
            <param name="offset">The offset.</param>
            <returns><see cref="T:System.UInt16" />.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.InformationBase.GetDword(System.Int32)">
            <summary>
            Gets the dword.
            </summary>
            <param name="offset">The offset.</param>
            <returns><see cref="T:System.UInt16" />.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.InformationBase.GetQword(System.Int32)">
            <summary>
            Gets the qword.
            </summary>
            <param name="offset">The offset.</param>
            <returns><see cref="T:System.UInt64" />.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.InformationBase.GetString(System.Int32)">
            <summary>
            Gets the string.
            </summary>
            <param name="offset">The offset.</param>
            <returns><see cref="T:System.String" />.</returns>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.BiosInformation">
            <summary>
            Motherboard BIOS information obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BiosInformation.Date">
            <summary>
            Gets the BIOS release date.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BiosInformation.Size">
            <summary>
            Gets the size of the physical device containing the BIOS.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BiosInformation.Vendor">
            <summary>
            Gets the string number of the BIOS Vendor’s Name.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BiosInformation.Version">
            <summary>
            Gets the string number of the BIOS Version. This value is a free-form string that may contain Core and OEM version information.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.BiosInformation.GetSize">
            <summary>
            Gets the size.
            </summary>
            <returns><see cref="T:System.Nullable`1" />.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.BiosInformation.GetDate(System.String)">
            <summary>
            Gets the date.
            </summary>
            <param name="date">The bios date.</param>
            <returns><see cref="T:System.Nullable`1" />.</returns>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SystemInformation">
            <summary>
            System information obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemInformation.Family">
            <summary>
            Gets the family associated with system.
            <para>
            This text string identifies the family to which a particular computer belongs. A family refers to a set of computers that are similar but not identical from a hardware or software point of
            view. Typically, a family is composed of different computer models, which have different configurations and pricing points. Computers in the same family often have similar branding and cosmetic
            features.
            </para>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemInformation.ManufacturerName">
            <summary>
            Gets the manufacturer name associated with system.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemInformation.ProductName">
            <summary>
            Gets the product name associated with system.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemInformation.SerialNumber">
            <summary>
            Gets the serial number string associated with system.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemInformation.Version">
            <summary>
            Gets the version string associated with system.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemInformation.WakeUp">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.SystemWakeUp" />
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SystemEnclosure">
            <summary>
            System enclosure obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.AssetTag">
            <summary>
            Gets the asset tag associated with the enclosure or chassis.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.BootUpState">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.SystemEnclosureState" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.LockDetected">
            <summary>
            Gets or sets the system enclosure lock.
            </summary>
            <returns>System enclosure lock is present if <see langword="true" />. Otherwise, either a lock is not present or it is unknown if the enclosure has a lock.</returns>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.ManufacturerName">
            <summary>
            Gets the string describing the chassis or enclosure manufacturer name.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.PowerCords">
            <summary>
            Gets the number of power cords associated with the enclosure or chassis.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.PowerSupplyState">
            <summary>
            Gets the state of the enclosure’s power supply (or supplies) when last booted.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.RackHeight">
            <summary>
            Gets the height of the enclosure, in 'U's. A U is a standard unit of measure for the height of a rack or rack-mountable component and is equal to 1.75 inches or 4.445 cm. A value of <c>0</c>
            indicates that the enclosure height is unspecified.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.SecurityStatus">
            <summary>
            Gets the physical security status of the enclosure when last booted.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.SerialNumber">
            <summary>
            Gets the string describing the chassis or enclosure serial number.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.SKU">
            <summary>
            Gets the string describing the chassis or enclosure SKU number.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.ThermalState">
            <summary>
            Gets the thermal state of the enclosure when last booted.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.Type">
            <summary>
            Gets <inheritdoc cref="P:LibreHardwareMonitor.Hardware.SystemEnclosure.Type" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SystemEnclosure.Version">
            <summary>
            Gets the number of null-terminated string representing the chassis or enclosure version.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.BaseBoardInformation">
            <summary>
            Motherboard information obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BaseBoardInformation.ManufacturerName">
            <summary>
            Gets the value that represents the manufacturer's name.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BaseBoardInformation.ProductName">
            <summary>
            Gets the value that represents the motherboard's name.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BaseBoardInformation.SerialNumber">
            <summary>
            Gets the value that represents the motherboard's serial number.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.BaseBoardInformation.Version">
            <summary>
            Gets the value that represents the motherboard's revision number.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.ProcessorInformation">
            <summary>
            Processor information obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Characteristics">
            <summary>
            Gets the characteristics of the processor.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.CoreCount">
            <summary>
            Gets the value that represents the number of cores per processor socket.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.CoreEnabled">
            <summary>
            Gets the value that represents the number of enabled cores per processor socket.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.CurrentSpeed">
            <summary>
            Gets the value that represents the current processor speed (in MHz).
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.ExternalClock">
            <summary>
            Gets the external Clock Frequency, in MHz. If the value is unknown, the field is set to 0.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Family">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.ProcessorFamily" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Handle">
            <summary>
            Gets the handle.
            </summary>
            <value>The handle.</value>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Id">
            <summary>
            Gets the identifier.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.L1CacheHandle">
            <summary>
            Gets the L1 cache handle.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.L2CacheHandle">
            <summary>
            Gets the L2 cache handle.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.L3CacheHandle">
            <summary>
            Gets the L3 cache handle.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.ManufacturerName">
            <summary>
            Gets the string number of Processor Manufacturer.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.MaxSpeed">
            <summary>
            Gets the value that represents the maximum processor speed (in MHz) supported by the system for this processor socket.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.ProcessorType">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.ProcessorType" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Serial">
            <summary>
            Gets the value that represents the string number for the serial number of this processor.
            <para>This value is set by the manufacturer and normally not changeable.</para>
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Socket">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.ProcessorSocket" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.SocketDesignation">
            <summary>
            Gets the string number for Reference Designation.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.ThreadCount">
            <summary>
            Gets the value that represents the number of threads per processor socket.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ProcessorInformation.Version">
            <summary>
            Gets the value that represents the string number describing the Processor.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.CacheInformation">
            <summary>
            Cache information obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.CacheInformation.Associativity">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.CacheAssociativity" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.CacheInformation.Designation">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.CacheDesignation" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.CacheInformation.Handle">
            <summary>
            Gets the handle.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.CacheInformation.Size">
            <summary>
            Gets the value that represents the installed cache size.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.CacheInformation.GetCacheDesignation">
            <summary>
            Gets the cache designation.
            </summary>
            <returns><see cref="T:LibreHardwareMonitor.Hardware.CacheDesignation" />.</returns>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.MemoryDevice">
            <summary>
            Memory information obtained from the SMBIOS table.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.BankLocator">
            <summary>
            Gets the string number of the string that identifies the physically labeled bank where the memory device is located.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.DeviceLocator">
            <summary>
            Gets the string number of the string that identifies the physically-labeled socket or board position where the memory device is located.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.ManufacturerName">
            <summary>
            Gets the string number for the manufacturer of this memory device.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.PartNumber">
            <summary>
            Gets the string number for the part number of this memory device.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.SerialNumber">
            <summary>
            Gets the string number for the serial number of this memory device.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.Size">
            <summary>
            Gets the size of the memory device. If the value is 0, no memory device is installed in the socket.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.Speed">
            <summary>
            Gets the value that identifies the maximum capable speed of the device, in mega transfers per second (MT/s).
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.MemoryDevice.Type">
            <summary>
            Gets the type of this memory device.
            </summary>
            <value>The type.</value>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.SMBios">
            <summary>
            Reads and processes information encoded in an SMBIOS table.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SMBios.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.SMBios" /> class.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.Bios">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.BiosInformation" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.Board">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.BaseBoardInformation" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.MemoryDevices">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.MemoryDevice" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.ProcessorCaches">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.CacheInformation" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.Processors">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.ProcessorInformation" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.System">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.SystemInformation" />
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.SMBios.SystemEnclosure">
            <summary>
            Gets <inheritdoc cref="T:LibreHardwareMonitor.Hardware.SystemEnclosure" />
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.SMBios.GetReport">
            <summary>
            Report containing most of the information that could be read from the SMBIOS table.
            </summary>
            <returns>A formatted text string with computer information and the entire SMBIOS table.</returns>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Storage.AbstractStorage.PerformanceValue">
            <summary>
            Helper to calculate the disk performance with base timestamps
            https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-perfrawdata
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Storage.AtaStorage.Smart">
            <summary>
            Gets the SMART data.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Storage.AtaStorage.SmartAttributes">
            <summary>
            Gets the SMART attributes.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Storage.NVMeGeneric.Smart">
            <summary>
            Gets the SMART data.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Storage.SmartAttribute.#ctor(System.Byte,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.Storage.SmartAttribute" /> class.
            </summary>
            <param name="id">The SMART id of the attribute.</param>
            <param name="name">The name of the attribute.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Storage.SmartAttribute.#ctor(System.Byte,System.String,LibreHardwareMonitor.Hardware.Storage.SmartAttribute.RawValueConversion)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.Storage.SmartAttribute" /> class.
            </summary>
            <param name="id">The SMART id of the attribute.</param>
            <param name="name">The name of the attribute.</param>
            <param name="rawValueConversion">
            A delegate for converting the raw byte
            array into a value (or null to use the attribute value).
            </param>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Storage.SmartAttribute.#ctor(System.Byte,System.String,LibreHardwareMonitor.Hardware.Storage.SmartAttribute.RawValueConversion,System.Nullable{LibreHardwareMonitor.Hardware.SensorType},System.Int32,System.String,System.Boolean,LibreHardwareMonitor.Hardware.ParameterDescription[])">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Hardware.Storage.SmartAttribute" /> class.
            </summary>
            <param name="id">The SMART id of the attribute.</param>
            <param name="name">The name of the attribute.</param>
            <param name="rawValueConversion">
            A delegate for converting the raw byte
            array into a value (or null to use the attribute value).
            </param>
            <param name="sensorType">
            Type of the sensor or null if no sensor is to
            be created.
            </param>
            <param name="sensorChannel">
            If there exists more than one attribute with
            the same sensor channel and type, then a sensor is created only for the
            first attribute.
            </param>
            <param name="sensorName">
            The name to be used for the sensor, or null if
            no sensor is created.
            </param>
            <param name="defaultHiddenSensor">True to hide the sensor initially.</param>
            <param name="parameterDescriptions">
            Description for the parameters of the sensor
            (or null).
            </param>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.Storage.SmartAttribute.Id">
            <summary>
            Gets the SMART identifier.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Hardware.Storage.SmartNames">
            <summary>
            Localization class for SMART attribute names.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Storage.SsdMicron.UpdateAdditionalSensors(LibreHardwareMonitor.Interop.Kernel32.SMART_ATTRIBUTE[])">
            <inheritdoc />
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.Storage.WindowsSmart.ReadSmartHealth">
            <summary>
            Reads Smart health status of the drive
            </summary>
            <returns>True, if drive is healthy; False, if unhealthy; Null, if it cannot be read</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ThreadAffinity.#cctor">
            <summary>
            Initializes static members of the <see cref="T:LibreHardwareMonitor.Hardware.ThreadAffinity" /> class.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Hardware.ThreadAffinity.ProcessorGroupCount">
            <summary>
            Gets the processor group count.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ThreadAffinity.IsValid(LibreHardwareMonitor.Hardware.GroupAffinity)">
            <summary>
            Returns true if the <paramref name="affinity"/> is valid.
            </summary>
            <param name="affinity">The affinity.</param>
            <returns><c>true</c> if the specified affinity is valid; otherwise, <c>false</c>.</returns>
        </member>
        <member name="M:LibreHardwareMonitor.Hardware.ThreadAffinity.Set(LibreHardwareMonitor.Hardware.GroupAffinity)">
            <summary>
            Sets the processor group affinity for the current thread.
            </summary>
            <param name="affinity">The processor group affinity.</param>
            <returns>The previous processor group affinity.</returns>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_OK_WAIT">
            <summary>
            All OK, but need to wait.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_OK_RESTART">
            <summary>
            All OK, but need restart.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_OK_MODE_CHANGE">
            <summary>
            All OK but need mode change.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_OK_WARNING">
            <summary>
            All OK, but with warning.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_OK">
            <summary>
            ADL function completed successfully.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR">
            <summary>
            Generic Error. Most likely one or more of the Escape calls to the driver
            failed!
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_NOT_INIT">
            <summary>
            ADL not initialized.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_INVALID_PARAM">
            <summary>
            One of the parameter passed is invalid.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_INVALID_PARAM_SIZE">
            <summary>
            One of the parameter size is invalid.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_INVALID_ADL_IDX">
            <summary>
            Invalid ADL index passed.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_INVALID_CONTROLLER_IDX">
            <summary>
            Invalid controller index passed.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_INVALID_DIPLAY_IDX">
            <summary>
            Invalid display index passed.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_NOT_SUPPORTED">
            <summary>
            Function not supported by the driver.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_NULL_POINTER">
            <summary>
            Null Pointer error.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_DISABLED_ADAPTER">
            <summary>
            Call can't be made due to disabled adapter.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_INVALID_CALLBACK">
            <summary>
            Invalid Callback.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_RESOURCE_CONFLICT">
            <summary>
            Display Resource conflict.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_SET_INCOMPLETE">
            <summary>
            Failed to update some of the values. Can be returned by set request that
            include multiple values if not all values were successfully committed.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.AtiAdlxx.ADLStatus.ADL_ERR_NO_XDISPLAY">
            <summary>
            There's no Linux XDisplay in Linux Console environment.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_CRITICAL_WARNING.AvailableSpaceLow">
            <summary>
            If set to 1, then the available spare space has fallen below the threshold.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_CRITICAL_WARNING.TemperatureThreshold">
            <summary>
            If set to 1, then a temperature is above an over temperature threshold or below an under temperature threshold.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_CRITICAL_WARNING.ReliabilityDegraded">
            <summary>
            If set to 1, then the device reliability has been degraded due to significant media related errors or any internal error that degrades device reliability.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_CRITICAL_WARNING.ReadOnly">
            <summary>
            If set to 1, then the media has been placed in read only mode
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_CRITICAL_WARNING.VolatileMemoryBackupDeviceFailed">
            <summary>
            If set to 1, then the volatile memory backup device has failed. This field is only valid if the controller has a volatile memory backup solution.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Interop.Kernel32.CreateStruct``1">
            <summary>
            Create a instance from a struct with zero initialized memory arrays
            no need to init every inner array with the correct sizes
            </summary>
            <typeparam name="T">type of struct that is needed</typeparam>
            <returns></returns>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.ATA_COMMAND.ATA_SMART">
            <summary>
            SMART data requested.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.ATA_COMMAND.ATA_IDENTIFY_DEVICE">
            <summary>
            Identify data is requested.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.SMART_READ_DATA">
            <summary>
            Read SMART data.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.READ_THRESHOLDS">
            <summary>
            Read SMART thresholds.
            obsolete
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.ENABLE_DISABLE_AUTOSAVE">
            <summary>
            Autosave SMART data.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.SAVE_ATTRIBUTE_VALUES">
            <summary>
            Save SMART attributes.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.EXECUTE_OFFLINE_DIAGS">
            <summary>
            Set SMART to offline immediately.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.SMART_READ_LOG">
            <summary>
            Read SMART log.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.SMART_WRITE_LOG">
            <summary>
            Write SMART log.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.WRITE_THRESHOLDS">
            <summary>
            Write SMART thresholds.
            obsolete
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.ENABLE_SMART">
            <summary>
            Enable SMART.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.DISABLE_SMART">
            <summary>
            Disable SMART.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.RETURN_SMART_STATUS">
            <summary>
            Get SMART status.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.SMART_FEATURES.ENABLE_DISABLE_AUTO_OFFLINE">
            <summary>
            Set SMART to offline automatically.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.MP">
            <summary>
            bit 0:15 Maximum  Power (MP) in centiwatts
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.Reserved0">
            <summary>
            bit 16:23
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.MPS_NOPS">
            <summary>
            bit 24 Max Power Scale (MPS), bit 25 Non-Operational State (NOPS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.ENLAT">
            <summary>
            bit 32:63 Entry Latency (ENLAT) in microseconds
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.EXLAT">
            <summary>
            bit 64:95 Exit Latency (EXLAT) in microseconds
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.RRT">
            <summary>
            bit 96:100 Relative Read Throughput (RRT)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.RRL">
            <summary>
            bit 104:108 Relative Read Latency (RRL)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.RWT">
            <summary>
            bit 112:116 Relative Write Throughput (RWT)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.RWL">
            <summary>
            bit 120:124 Relative Write Latency (RWL)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.IDLP">
            <summary>
            bit 128:143 Idle Power (IDLP)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.IPS">
            <summary>
            bit 150:151 Idle Power Scale (IPS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.Reserved7">
            <summary>
            bit 152:159
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.ACTP">
            <summary>
            bit 160:175 Active Power (ACTP)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.APW_APS">
            <summary>
            bit 176:178 Active Power Workload (APW), bit 182:183  Active Power Scale (APS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_POWER_STATE_DESC.Reserved9">
            <summary>
            bit 184:255.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.VID">
            <summary>
            byte 0:1 M - PCI Vendor ID (VID)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.SSVID">
            <summary>
            byte 2:3 M - PCI Subsystem Vendor ID (SSVID)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.SN">
            <summary>
            byte 4: 23 M - Serial Number (SN)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.MN">
            <summary>
            byte 24:63 M - Model Number (MN)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.FR">
            <summary>
            byte 64:71 M - Firmware Revision (FR)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.RAB">
            <summary>
            byte 72 M - Recommended Arbitration Burst (RAB)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.IEEE">
            <summary>
            byte 73:75 M - IEEE OUI Identifier (IEEE). Controller Vendor code.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.CMIC">
            <summary>
            byte 76 O - Controller Multi-Path I/O and Namespace Sharing Capabilities (CMIC)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.MDTS">
            <summary>
            byte 77 M - Maximum Data Transfer Size (MDTS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.CNTLID">
            <summary>
            byte 78:79 M - Controller ID (CNTLID)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.VER">
            <summary>
            byte 80:83 M - Version (VER)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.RTD3R">
            <summary>
            byte 84:87 M - RTD3 Resume Latency (RTD3R)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.RTD3E">
            <summary>
            byte 88:91 M - RTD3 Entry Latency (RTD3E)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.OAES">
            <summary>
            byte 92:95 M - Optional Asynchronous Events Supported (OAES)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved0">
            <summary>
            byte 96:239.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.ReservedForManagement">
            <summary>
            byte 240:255.  Refer to the NVMe Management Interface Specification for definition.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.OACS">
            <summary>
            byte 256:257 M - Optional Admin Command Support (OACS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.ACL">
            <summary>
            byte 258 M - Abort Command Limit (ACL)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.AERL">
            <summary>
            byte 259 M - Asynchronous Event Request Limit (AERL)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.FRMW">
            <summary>
            byte 260 M - Firmware Updates (FRMW)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.LPA">
            <summary>
            byte 261 M - Log Page Attributes (LPA)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.ELPE">
            <summary>
            byte 262 M - Error Log Page Entries (ELPE)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.NPSS">
            <summary>
            byte 263 M - Number of Power States Support (NPSS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.AVSCC">
            <summary>
            byte 264 M - Admin Vendor Specific Command Configuration (AVSCC)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.APSTA">
            <summary>
            byte 265 O - Autonomous Power State Transition Attributes (APSTA)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.WCTEMP">
            <summary>
            byte 266:267 M - Warning Composite Temperature Threshold (WCTEMP)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.CCTEMP">
            <summary>
            byte 268:269 M - Critical Composite Temperature Threshold (CCTEMP)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.MTFA">
            <summary>
            byte 270:271 O - Maximum Time for Firmware Activation (MTFA)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.HMPRE">
            <summary>
            byte 272:275 O - Host Memory Buffer Preferred Size (HMPRE)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.HMMIN">
            <summary>
            byte 276:279 O - Host Memory Buffer Minimum Size (HMMIN)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.TNVMCAP">
            <summary>
            byte 280:295 O - Total NVM Capacity (TNVMCAP)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.UNVMCAP">
            <summary>
            byte 296:311 O - Unallocated NVM Capacity (UNVMCAP)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.RPMBS">
            <summary>
            byte 312:315 O - Replay Protected Memory Block Support (RPMBS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved1">
            <summary>
            byte 316:511
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.SQES">
            <summary>
            byte 512 M - Submission Queue Entry Size (SQES)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.CQES">
            <summary>
            byte 513 M - Completion Queue Entry Size (CQES)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved2">
            <summary>
            byte 514:515
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.NN">
            <summary>
            byte 516:519 M - Number of Namespaces (NN)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.ONCS">
            <summary>
            byte 520:521 M - Optional NVM Command Support (ONCS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.FUSES">
            <summary>
            byte 522:523 M - Fused Operation Support (FUSES)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.FNA">
            <summary>
            byte 524 M - Format NVM Attributes (FNA)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.VWC">
            <summary>
            byte 525 M - Volatile Write Cache (VWC)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.AWUN">
            <summary>
            byte 526:527 M - Atomic Write Unit Normal (AWUN)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.AWUPF">
            <summary>
            byte 528:529 M - Atomic Write Unit Power Fail (AWUPF)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.NVSCC">
            <summary>
            byte 530 M - NVM Vendor Specific Command Configuration (NVSCC)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved3">
            <summary>
            byte 531
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.ACWU">
            <summary>
            byte 532:533 O - Atomic Compare and Write Unit (ACWU)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved4">
            <summary>
            byte 534:535
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.SGLS">
            <summary>
            byte 536:539 O - SGL Support (SGLS)
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved5">
            <summary>
            byte 540:703
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.Reserved6">
            <summary>
            byte 704:2047
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.PDS">
            <summary>
            byte 2048:3071 Power State Descriptors
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_IDENTIFY_CONTROLLER_DATA.VS">
            <summary>
            byte 3072:4095 Vendor Specific
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.CriticalWarning">
            <summary>
            This field indicates critical warnings for the state of the  controller.
            Each bit corresponds to a critical warning type; multiple bits may be set.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.CompositeTemp">
            <summary>
            Composite Temperature:  Contains the temperature of the overall device (controller and NVM included) in units of Kelvin.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.AvailableSpare">
            <summary>
            Available Spare:  Contains a normalized percentage (0 to 100%) of the remaining spare capacity available
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.AvailableSpareThreshold">
            <summary>
            Available Spare Threshold:  When the Available Spare falls below the threshold indicated in this field,
            an asynchronous event completion may occur. The value is indicated as a normalized percentage (0 to 100%).
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.PercentageUsed">
            <summary>
            Percentage Used:  Contains a vendor specific estimate of the percentage of NVM subsystem life used based on
            the actual usage and the manufacturer’s prediction of NVM life. A value of 100 indicates that the estimated endurance of
            the NVM in the NVM subsystem has been consumed, but may not indicate an NVM subsystem failure. The value is allowed to exceed 100.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.DataUnitRead">
            <summary>
            Data Units Read:  Contains the number of 512 byte data units the host has read from the controller;
            this value does not include metadata. This value is reported in thousands
            (i.e., a value of 1 corresponds to 1000 units of 512 bytes read) and is rounded up.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.DataUnitWritten">
            <summary>
            Data Units Written:  Contains the number of 512 byte data units the host has written to the controller;
            this value does not include metadata. This value is reported in thousands
            (i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.HostReadCommands">
            <summary>
            Host Read Commands:  Contains the number of read commands completed by the controller.
            For the NVM command set, this is the number of Compare and Read commands.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.HostWriteCommands">
            <summary>
            Host Write Commands:  Contains the number of write commands completed by the controller.
            For the NVM command set, this is the number of Write commands.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.ControllerBusyTime">
            <summary>
            Controller Busy Time:  Contains the amount of time the controller is busy with I/O commands.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.PowerCycles">
            <summary>
            Power Cycles:  Contains the number of power cycles.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.PowerOnHours">
            <summary>
            Power On Hours:  Contains the number of power-on hours.
            This does not include time that the controller was powered and in a low power state condition.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.UnsafeShutdowns">
            <summary>
            Unsafe Shutdowns:  Contains the number of unsafe shutdowns.
            This count is incremented when a shutdown notification is not received prior to loss of power.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.MediaAndDataIntegrityErrors">
            <summary>
            Media Errors:  Contains the number of occurrences where the controller detected an unrecoverable data integrity error.
            Errors such as uncorrectable ECC, CRC checksum failure, or LBA tag mismatch are included in this field.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.NumberErrorInformationLogEntries">
            <summary>
            Number of Error Information Log Entries:  Contains the number of Error Information log entries over the life of the controller
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.WarningCompositeTemperatureTime">
            <summary>
            Warning Composite Temperature Time:  Contains the amount of time in minutes that the controller is operational and the Composite Temperature is greater than or equal to the Warning Composite
            Temperature Threshold.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.CriticalCompositeTemperatureTime">
            <summary>
            Critical Composite Temperature Time:  Contains the amount of time in minutes that the controller is operational and the Composite Temperature is greater than the Critical Composite Temperature
            Threshold.
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.Kernel32.NVME_HEALTH_INFO_LOG.TemperatureSensor">
            <summary>
            Contains the current temperature reported by temperature sensor 1-8.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Interop.Kernel32.IOControlCode.Code">
            <summary>
            Gets the resulting IO control code.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Interop.Kernel32.IOControlCode.#ctor(System.UInt32,System.UInt32,LibreHardwareMonitor.Interop.Kernel32.IOControlCode.Access)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Interop.Kernel32.IOControlCode" /> struct.
            </summary>
            <param name="deviceType">Type of the device.</param>
            <param name="function">The function.</param>
            <param name="access">The access.</param>
        </member>
        <member name="M:LibreHardwareMonitor.Interop.Kernel32.IOControlCode.#ctor(System.UInt32,System.UInt32,LibreHardwareMonitor.Interop.Kernel32.IOControlCode.Method,LibreHardwareMonitor.Interop.Kernel32.IOControlCode.Access)">
            <summary>
            Initializes a new instance of the <see cref="T:LibreHardwareMonitor.Interop.Kernel32.IOControlCode" /> struct.
            </summary>
            <param name="deviceType">Type of the device.</param>
            <param name="function">The function.</param>
            <param name="method">The method.</param>
            <param name="access">The access.</param>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.Success">
            <summary>
            The operation was successful
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.Uninitialized">
            <summary>
            NvidiaML was not first initialized with nvmlInit()
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.InvalidArgument">
            <summary>
            A supplied argument is invalid
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.NotSupported">
            <summary>
            The requested operation is not available on target device
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.NoPermission">
            <summary>
            The current user does not have permission for operation
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.NotFound">
            <summary>
            A query to find an object was unsuccessful
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.InsufficientSize">
            <summary>
            An input argument is not large enough
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.InsufficientPower">
            <summary>
            A device's external power cables are not properly attached
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.DriverNotLoaded">
            <summary>
            NVIDIA driver is not loaded
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.TimeOut">
            <summary>
            User provided timeout passed
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.IRQIssue">
            <summary>
            NVIDIA Kernel detected an interrupt issue with a GPU
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.LibraryNotFound">
            <summary>
            NvidiaML Shared Library couldn't be found or loaded
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.FunctionNotFound">
            <summary>
            Local version of NvidiaML doesn't implement this function
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.CorruptedInfoRom">
            <summary>
            infoROM is corrupted
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.GpuIsLost">
            <summary>
            The GPU has fallen off the bus or has otherwise become inaccessible
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.ResetRequired">
            <summary>
            The GPU requires a reset before it can be used again
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.OperatingSystem">
            <summary>
            The GPU control device has been blocked by the operating system/cgroups
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.LibRmVersionMismatch">
            <summary>
            RM detects a driver/library version mismatch
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.InUse">
            <summary>
            An operation cannot be performed because the GPU is currently in use
            </summary>
        </member>
        <member name="F:LibreHardwareMonitor.Interop.NvidiaML.NvmlReturn.Unknown">
            <summary>
            An public driver error occurred
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Interop.Ring0">
            <summary>
            Driver with access at kernel level.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Interop.WinNt">
            <summary>
            Contains Win32 definitions for Windows NT.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Interop.WinNt.LUID">
            <summary>
            Describes a local identifier for an adapter.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Interop.WinNt.LARGE_INTEGER">
            <summary>
            Represents a 64-bit signed integer value.
            </summary>
        </member>
        <member name="T:LibreHardwareMonitor.Software.OperatingSystem">
            <summary>
            Contains basic information about the operating system.
            </summary>
        </member>
        <member name="M:LibreHardwareMonitor.Software.OperatingSystem.#cctor">
            <summary>
            Statically checks if the current system <see cref="P:LibreHardwareMonitor.Software.OperatingSystem.Is64Bit"/> and <see cref="P:LibreHardwareMonitor.Software.OperatingSystem.IsUnix"/>.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Software.OperatingSystem.Is64Bit">
            <summary>
            Gets information about whether the current system is 64 bit.
            </summary>
        </member>
        <member name="P:LibreHardwareMonitor.Software.OperatingSystem.IsUnix">
            <summary>
            Gets information about whether the current system is Unix based.
            </summary>
        </member>
    </members>
</doc>


================================================
FILE: OpenHardwareMonitorApi/OpenHardwareMonitorApi.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|ARM64EC">
      <Configuration>Debug</Configuration>
      <Platform>ARM64EC</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|ARM64EC">
      <Configuration>Release</Configuration>
      <Platform>ARM64EC</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{C0A42F4A-ABB3-4575-B4D5-CEDD8379AC26}</ProjectGuid>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <Keyword>ManagedCProj</Keyword>
    <RootNamespace>OpenHardwareMonitorApi</RootNamespace>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CLRSupport>true</CLRSupport>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CLRSupport>true</CLRSupport>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CLRSupport>true</CLRSupport>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CLRSupport>true</CLRSupport>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CLRSupport>true</CLRSupport>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CLRSupport>true</CLRSupport>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
    <OutDir>$(SolutionDir)Bin\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
    <IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
    <OutDir>$(SolutionDir)Bin\$(Platform)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">
    <LinkIncremental>true</LinkIncremental>
    <IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
    <OutDir>$(SolutionDir)Bin\$(Platform)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
    <OutDir>$(SolutionDir)Bin\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
    <OutDir>$(SolutionDir)Bin\$(Platform)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">
    <LinkIncremental>false</LinkIncremental>
    <IncludePath>$(ProjectDir)..\include;$(IncludePath)</IncludePath>
    <OutDir>$(SolutionDir)Bin\$(Platform)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions);OPENHARDWAREMONITOR_EXPORTS</PreprocessorDefinitions>
      <PrecompiledHeader>Use</PrecompiledHeader>
    </ClCompile>
    <Link>
      <AdditionalDependencies />
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);OPENHARDWAREMONITOR_EXPORTS</PreprocessorDefinitions>
      <PrecompiledHeader>Use</PrecompiledHeader>
    </ClCompile>
    <Link>
      <AdditionalDependencies />
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);OPENHARDWAREMONITOR_EXPORTS</PreprocessorDefinitions>
      <PrecompiledHeader>Use</PrecompiledHeader>
    </ClCompile>
    <Link>
      <AdditionalDependencies>
      </AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions);OPENHARDWAREMONITOR_EXPORTS</PreprocessorDefinitions>
      <PrecompiledHeader>Use</PrecompiledHeader>
    </ClCompile>
    <Link>
      <AdditionalDependencies />
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);OPENHARDWAREMONITOR_EXPORTS</PreprocessorDefinitions>
      <PrecompiledHeader>Use</PrecompiledHeader>
    </ClCompile>
    <Link>
      <AdditionalDependencies />
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);OPENHARDWAREMONITOR_EXPORTS</PreprocessorDefinitions>
      <PrecompiledHeader>Use</PrecompiledHeader>
    </ClCompile>
    <Link>
      <AdditionalDependencies>
      </AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <Reference Include="LibreHardwareMonitorLib">
      <HintPath>LibreHardwareMonitorLib.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\include\OpenHardwareMonitor\OpenHardwareMonitorApi.h" />
    <ClInclude Include="..\include\OpenHardwareMonitor\OpenHardwareMonitorGlobal.h" />
    <ClInclude Include="OpenHardwareMonitorImp.h" />
    <ClInclude Include="resource.h" />
    <ClInclude Include="Stdafx.h" />
    <ClInclude Include="UpdateVisitor.h" />
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="OpenHardwareMonitorImp.cpp" />
    <ClCompile Include="Stdafx.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">Create</PrecompiledHeader>
    </ClCompile>
    <ClCompile Include="UpdateVisitor.cpp" />
  </ItemGroup>
  <ItemGroup>
    <Text Include="ReadMe.txt" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="app.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: OpenHardwareMonitorApi/OpenHardwareMonitorApi.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="源文件">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="头文件">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
    </Filter>
    <Filter Include="资源文件">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="Stdafx.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="resource.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="OpenHardwareMonitorImp.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="..\include\OpenHardwareMonitor\OpenHardwareMonitorApi.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="UpdateVisitor.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="..\include\OpenHardwareMonitor\OpenHardwareMonitorGlobal.h">
      <Filter>头文件</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="Stdafx.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="OpenHardwareMonitorImp.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="UpdateVisitor.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <Text Include="ReadMe.txt" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="app.rc">
      <Filter>资源文件</Filter>
    </ResourceCompile>
  </ItemGroup>
</Project>

================================================
FILE: OpenHardwareMonitorApi/OpenHardwareMonitorImp.cpp
================================================
// 这是主 DLL 文件。

#include "stdafx.h"

#include "OpenHardwareMonitorImp.h"
#include <vector>

namespace OpenHardwareMonitorApi
{
    static std::wstring error_message;

    //将CRL的String类型转换成C++的std::wstring类型
    static std::wstring ClrStringToStdWstring(System::String^ str)
    {
        if (str == nullptr)
        {
            return std::wstring();
        }
        else
        {
            const wchar_t* chars = (const wchar_t*)(Runtime::InteropServices::Marshal::StringToHGlobalUni(str)).ToPointer();
            std::wstring os = chars;
            Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr((void*)chars));
            return os;
        }
    }


    std::shared_ptr<IOpenHardwareMonitor> CreateInstance()
    {
        std::shared_ptr<IOpenHardwareMonitor> pMonitor;
        try
        {
            MonitorGlobal::Instance()->Init();
            pMonitor = std::make_shared<COpenHardwareMonitor>();
        }
        catch (System::Exception^ e)
        {
            error_message = ClrStringToStdWstring(e->Message);
        }
        return pMonitor;
    }

    std::wstring GetErrorMessage()
    {
        return error_message;
    }

    float COpenHardwareMonitor::CpuTemperature()
    {
        return m_cpu_temperature;
    }

    float COpenHardwareMonitor::GpuTemperature()
    {
        if (m_gpu_nvidia_temperature >= 0)
            return m_gpu_nvidia_temperature;
        else if (m_gpu_ati_temperature >= 0)
            return m_gpu_ati_temperature;
        else
            return m_gpu_intel_temperature;
    }

    float COpenHardwareMonitor::HDDTemperature()
    {
        return m_hdd_temperature;
    }

    float COpenHardwareMonitor::MainboardTemperature()
    {
        return m_main_board_temperature;
    }

    float COpenHardwareMonitor::GpuUsage()
    {
        if (m_gpu_nvidia_usage >= 0)
            return m_gpu_nvidia_usage;
        else if (m_gpu_ati_usage >= 0)
            return m_gpu_ati_usage;
        else
            return m_gpu_intel_usage;
    }

    float COpenHardwareMonitor::CpuFreq()
    {
            return m_cpu_freq;
    }

    float COpenHardwareMonitor::CpuUsage()
    {
        return m_cpu_usage;
    }

    const std::map<std::wstring, float>& COpenHardwareMonitor::AllHDDTemperature()
    {
        return m_all_hdd_temperature;
    }

    const std::map<std::wstring, float>& COpenHardwareMonitor::AllCpuTemperature()
    {
        return m_all_cpu_temperature;
    }

    const std::map<std::wstring, float>& COpenHardwareMonitor::AllHDDUsage()
    {
        return m_all_hdd_usage;
    }

    void COpenHardwareMonitor::SetCpuEnable(bool enable)
    {
        MonitorGlobal::Instance()->computer->IsCpuEnabled = enable;
    }

    void COpenHardwareMonitor::SetGpuEnable(bool enable)
    {
        MonitorGlobal::Instance()->computer->IsGpuEnabled = enable;
    }

    void COpenHardwareMonitor::SetHddEnable(bool enable)
    {
        MonitorGlobal::Instance()->computer->IsStorageEnabled = enable;
    }

    void COpenHardwareMonitor::SetMainboardEnable(bool enable)
    {
        MonitorGlobal::Instance()->computer->IsMotherboardEnabled = enable;
    }

    bool COpenHardwareMonitor::GetCPUFreq(IHardware^ hardware, float& freq) {
        for (int i = 0; i < hardware->Sensors->Length; i++)
        {
            if (hardware->Sensors[i]->SensorType == SensorType::Clock)
            {
                String^ name = hardware->Sensors[i]->Name;
                if (name != L"Bus Speed")
                    m_all_cpu_clock[ClrStringToStdWstring(name)] = Convert::ToDouble(hardware->Sensors[i]->Value);
            }
        }
        float sum{};
        for (auto i : m_all_cpu_clock)
            sum += i.second;
        freq = sum / m_all_cpu_clock.size() / 1000.0;
        return true;
    }

    bool COpenHardwareMonitor::GetCpuUsage(IHardware^ hardware, float& cpu_usage)
    {
        for (int i = 0; i < hardware->Sensors->Length; i++)
        {
            if (hardware->Sensors[i]->SensorType == SensorType::Load)
            {
                String^ name = hardware->Sensors[i]->Name;
                if (name != L"CPU Total")
                {
                    cpu_usage = Convert::ToDouble(hardware->Sensors[i]->Value);
                    return true;
                }
            }
        }
        return false;
    }

    bool COpenHardwareMonitor::GetHardwareTemperature(IHardware^ hardware, float& temperature)
    {
        temperature = -1;
        std::vector<float> all_temperature;
        float core_temperature{ -1 };
        System::String^ temperature_name;
        switch (hardware->HardwareType)
        {
        case HardwareType::Cpu:
            temperature_name = L"Core Average";
            break;
        case HardwareType::GpuNvidia: case HardwareType::GpuAmd: case HardwareType::GpuIntel:
            temperature_name = L"GPU Core";
            break;
        default:
            break;
        }
        for (int i = 0; i < hardware->Sensors->Length; i++)
        {
            //找到温度传感器
            if (hardware->Sensors[i]->SensorType == SensorType::Temperature)
            {
                float cur_temperture = Convert::ToDouble(hardware->Sensors[i]->Value);
                all_temperature.push_back(cur_temperture);
                if (hardware->Sensors[i]->Name == temperature_name) //如果找到了名称为temperature_name的温度传感器,则将温度保存到core_temperature里
                    core_temperature = cur_temperture;
            }
        }
        if (core_temperature >= 0)
        {
            temperature = core_temperature;
            return true;
        }
        if (!all_temperature.empty())
        {
            //如果有多个温度传感器,则取平均值
            float sum{};
            for (auto i : all_temperature)
                sum += i;
            temperature = sum / all_temperature.size();
            return true;
        }
        //如果没有找到温度传感器,则在SubHardware中寻找
        for (int i = 0; i < hardware->SubHardware->Length; i++)
        {
            if (GetHardwareTemperature(hardware->SubHardware[i], temperature))
                return true;
        }
        return false;
    }

    bool COpenHardwareMonitor::GetCpuTemperature(IHardware^ hardware, float& temperature)
    {
        temperature = -1;
        m_all_cpu_temperature.clear();
        for (int i = 0; i < hardware->Sensors->Length; i++)
        {
            //找到温度传感器
            if (hardware->Sensors[i]->SensorType == SensorType::Temperature)
            {
                String^ name = hardware->Sensors[i]->Name;
                //保存每个CPU传感器的温度
                m_all_cpu_temperature[ClrStringToStdWstring(name)] = Convert::ToDouble(hardware->Sensors[i]->Value);
            }
        }
        //计算平均温度
        if (!m_all_cpu_temperature.empty())
        {
            float sum{};
            for (const auto& item : m_all_cpu_temperature)
                sum += item.second;
            temperature = sum / m_all_cpu_temperature.size();
        }
        return temperature > 0;
    }

    bool COpenHardwareMonitor::GetGpuUsage(IHardware^ hardware, float& gpu_usage)
    {
        float usage_max = 0;
        for (int i = 0; i < hardware->Sensors->Length; i++)
        {
            //找到负载
            if (hardware->Sensors[i]->SensorType == SensorType::Load)
            {
                float cur_gpu_usage = Convert::ToDouble(hardware->Sensors[i]->Value);
                if (hardware->Sensors[i]->Name == L"GPU Core")
                {
                    gpu_usage = cur_gpu_usage;
                    return true;
                }

                //计算最大值
                if (cur_gpu_usage > usage_max)
                    usage_max = cur_gpu_usage;
            }
        }
        gpu_usage = usage_max;
        return true;
    }

    bool COpenHardwareMonitor::GetHddUsage(IHardware^ hardware, float& hdd_usage)
    {
        for (int i = 0; i < hardware->Sensors->Length; i++)
        {
            //找到负载
            if (hardware->Sensors[i]->SensorType == SensorType::Load)
            {
                if (hardware->Sensors[i]->Name == L"Total Activity")
                {
                    hdd_usage = Convert::ToDouble(hardware->Sensors[i]->Value);
                    return true;
                }
            }
        }
        return false;
    }

    COpenHardwareMonitor::COpenHardwareMonitor()
    {
        ResetAllValues();
    }

    COpenHardwareMonitor::~COpenHardwareMonitor()
    {
        MonitorGlobal::Instance()->UnInit();
    }

    void COpenHardwareMonitor::ResetAllValues()
    {
        m_cpu_temperature = -1;
        m_gpu_nvidia_temperature = -1;
        m_gpu_ati_temperature = -1;
        m_gpu_intel_temperature = -1;
        m_hdd_temperature = -1;
        m_main_board_temperature = -1;
        m_gpu_nvidia_usage = -1;
        m_gpu_ati_usage = -1;
        m_gpu_intel_usage = -1;
        m_all_hdd_temperature.clear();
        m_all_hdd_usage.clear();
        m_cpu_freq = -1;
        m_cpu_usage = -1;
    }

    void COpenHardwareMonitor::InsertValueToMap(std::map<std::wstring, float>& value_map, const std::wstring& key, float value)
    {
        auto iter = value_map.find(key);
        if (iter == value_map.end())
        {
            value_map[key] = value;
        }
        else
        {
            std::wstring key_exist = iter->first;
            size_t index = key_exist.rfind(L'#');   //查找字符串是否含有#号
            if (index != std::wstring::npos)
            {
                //取到#号后面的数字,将其加1
                int num = _wtoi(key_exist.substr(index + 1).c_str());
                num++;
                key_exist = key_exist.substr(0, index + 1);
                key_exist += std::to_wstring(num);
            }
            else //没有#号则在末尾添加" #1"
            {
                key_exist += L" #1";
            }
            value_map[key_exist] = value;
        }
    }

    void COpenHardwareMonitor::GetHardwareInfo()
    {
        ResetAllValues();
        error_message.clear();
        try
        {
            auto computer = MonitorGlobal::Instance()->computer;
            computer->Accept(MonitorGlobal::Instance()->updateVisitor);
            for (int i = 0; i < computer->Hardware->Count; i++)
            {
                //查找硬件类型
                switch (computer->Hardware[i]->HardwareType)
                {
                case HardwareType::Cpu:
                    if (m_cpu_temperature < 0)
                        GetCpuTemperature(computer->Hardware[i], m_cpu_temperature);
                    if (m_cpu_freq < 0)
                        GetCPUFreq(computer->Hardware[i], m_cpu_freq);
                    if (m_cpu_usage < 0)
                        GetCpuUsage(computer->Hardware[i], m_cpu_usage);
                    break;
                case HardwareType::GpuNvidia:
                    if (m_gpu_nvidia_temperature < 0)
                        GetHardwareTemperature(computer->Hardware[i], m_gpu_nvidia_temperature);
                    if (m_gpu_nvidia_usage < 0)
                        GetGpuUsage(computer->Hardware[i], m_gpu_nvidia_usage);
                    break;
                case HardwareType::GpuAmd:
                    if (m_gpu_ati_temperature < 0)
                        GetHardwareTemperature(computer->Hardware[i], m_gpu_ati_temperature);
                    if (m_gpu_ati_usage < 0)
                        GetGpuUsage(computer->Hardware[i], m_gpu_ati_usage);
                    break;
                case HardwareType::GpuIntel:
                    if (m_gpu_intel_temperature < 0)
                        GetHardwareTemperature(computer->Hardware[i], m_gpu_intel_temperature);
                    if (m_gpu_intel_usage < 0)
                        GetGpuUsage(computer->Hardware[i], m_gpu_intel_usage);
                    break;
                case HardwareType::Storage:
                {
                    float cur_hdd_temperature = -1;
                    GetHardwareTemperature(computer->Hardware[i], cur_hdd_temperature);
                    //m_all_hdd_temperature[ClrStringToStdWstring(computer->Hardware[i]->Name)] = cur_hdd_temperature;
                    InsertValueToMap(m_all_hdd_temperature, ClrStringToStdWstring(computer->Hardware[i]->Name), cur_hdd_temperature);
                    float cur_hdd_usage = -1;
                    GetHddUsage(computer->Hardware[i], cur_hdd_usage);
                    //m_all_hdd_usage[ClrStringToStdWstring(computer->Hardware[i]->Name)] = cur_hdd_usage;
                    InsertValueToMap(m_all_hdd_usage, ClrStringToStdWstring(computer->Hardware[i]->Name), cur_hdd_usage);
                    if (m_hdd_temperature < 0)
                        m_hdd_temperature = cur_hdd_temperature;
                }
                break;
                case HardwareType::Motherboard:
                    if (m_main_board_temperature < 0)
                        GetHardwareTemperature(computer->Hardware[i], m_main_board_temperature);
                    break;
                default:
                    break;
                }
            }
        }
        catch (System::Exception^ e)
        {
            error_message = ClrStringToStdWstring(e->Message);
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////
    MonitorGlobal::MonitorGlobal()
    {

    }

    MonitorGlobal::~MonitorGlobal()
    {

    }

    void MonitorGlobal::Init()
    {
        updateVisitor = gcnew UpdateVisitor();
        computer = gcnew Computer();
        computer->Open();
    }

    void MonitorGlobal::UnInit()
    {
        computer->Close();
    }

}


================================================
FILE: OpenHardwareMonitorApi/OpenHardwareMonitorImp.h
================================================
// OpenHardwareMonitorApi.h

#pragma once
#include <string>
#include "OpenHardwareMonitor/OpenHardwareMonitorApi.h"
#include "UpdateVisitor.h"
#include <map>

using namespace System;
using namespace LibreHardwareMonitor::Hardware;

namespace OpenHardwareMonitorApi {

    public class COpenHardwareMonitor : public IOpenHardwareMonitor
	{
    public:
        COpenHardwareMonitor();
        virtual ~COpenHardwareMonitor();

        virtual void GetHardwareInfo() override;
        virtual float CpuTemperature() override;
        virtual float GpuTemperature() override;
        virtual float HDDTemperature() override;
        virtual float MainboardTemperature() override;
        virtual float GpuUsage() override;
        virtual float CpuFreq() override;
        virtual float CpuUsage() override;
        virtual const std::map<std::wstring, float>& AllHDDTemperature() override;
        virtual const std::map<std::wstring, float>& AllCpuTemperature() override;
        virtual const std::map<std::wstring, float>& AllHDDUsage() override;

        virtual void SetCpuEnable(bool enable) override;
        virtual void SetGpuEnable(bool enable) override;
        virtual void SetHddEnable(bool enable) override;
        virtual void SetMainboardEnable(bool enable) override;

    private:
        bool GetHardwareTemperature(IHardware^ hardware, float& temperature);
        bool GetCpuTemperature(IHardware^ hardware, float& temperature);
        bool GetGpuUsage(IHardware^ hardware, float& gpu_usage);
        bool GetHddUsage(IHardware^ hardware, float& hdd_usage);
        bool GetCPUFreq(IHardware^ hardware, float& freq);
        bool GetCpuUsage(IHardware^ hardware, float& cpu_usage);
        void ResetAllValues();
        //向map中插入一个数值,如果key已经存在,则自动对新插入的key重命名
        static void InsertValueToMap(std::map<std::wstring, float>& value_map, const std::wstring& key, float value);

    private:
        float m_cpu_temperature{};
        float m_gpu_nvidia_temperature{};
        float m_gpu_ati_temperature{};
        float m_gpu_intel_temperature{};
        float m_hdd_temperature{};
        float m_main_board_temperature{};
        float m_gpu_nvidia_usage{};
        float m_gpu_ati_usage{};
        float m_gpu_intel_usage{};
        float m_cpu_freq{};
        float m_cpu_usage{};
        std::map<std::wstring, float> m_all_hdd_temperature;
        std::map<std::wstring, float> m_all_cpu_temperature;
        std::map<std::wstring, float> m_all_cpu_clock;
        std::map<std::wstring, float> m_all_hdd_usage;
    };

    //一个单实例类
    //由于COpenHardwareMonitor是非托管类,不能将托管类的对象作为成员变量,此类用于保存托管类的对象
    public ref class MonitorGlobal
    {
    public:
        MonitorGlobal();
        ~MonitorGlobal();
        static MonitorGlobal^ Instance()
        {
            if (m_instance == nullptr)
            {
                m_instance = gcnew MonitorGlobal();
            }
            return m_instance;
        }

        void Init();
        void UnInit();

        Computer^ computer;
        UpdateVisitor^ updateVisitor{};

    private:
        static MonitorGlobal^ m_instance{};
    };
}


================================================
FILE: OpenHardwareMonitorApi/ReadMe.txt
================================================
========================================================================
    DYNAMIC LINK LIBRARY : OpenHardwareMonitorApi Project Overview
========================================================================

AppWizard has created this OpenHardwareMonitorApi DLL for you.  

This file contains a summary of what you will find in each of the files that
make up your OpenHardwareMonitorApi application.

OpenHardwareMonitorApi.vcxproj
    This is the main project file for VC++ projects generated using an Application Wizard. 
    It contains information about the version of Visual C++ that generated the file, and 
    information about the platforms, configurations, and project features selected with the
    Application Wizard.

OpenHardwareMonitorApi.vcxproj.filters
    This is the filters file for VC++ projects generated using an Application Wizard. 
    It contains information about the association between the files in your project 
    and the filters. This association is used in the IDE to show grouping of files with
    similar extensions under a specific node (for e.g. ".cpp" files are associated with the
    "Source Files" filter).

OpenHardwareMonitorApi.cpp
    This is the main DLL source file.

OpenHardwareMonitorApi.h
    This file contains a class declaration.

AssemblyInfo.cpp
	Contains custom attributes for modifying assembly metadata.

/////////////////////////////////////////////////////////////////////////////
Other notes:

AppWizard uses "TODO:" to indicate parts of the source code you
should add to or customize.

/////////////////////////////////////////////////////////////////////////////


================================================
FILE: OpenHardwareMonitorApi/Stdafx.cpp
================================================
// stdafx.cpp : ֻ׼ļԴļ
// OpenHardwareMonitorApi.pch ΪԤͷ
// stdafx.obj ԤϢ

#include "stdafx.h"


================================================
FILE: OpenHardwareMonitorApi/Stdafx.h
================================================
// stdafx.h : ׼ϵͳļİļ
// Ǿʹõĵ
// ضĿİļ

#pragma once




================================================
FILE: OpenHardwareMonitorApi/UpdateVisitor.cpp
================================================
#include "stdafx.h"
#include "UpdateVisitor.h"

namespace OpenHardwareMonitorApi
{
    void UpdateVisitor::VisitComputer(IComputer ^ computer)
    {
        computer->Traverse(this);
    }

    void UpdateVisitor::VisitHardware(IHardware ^ hardware)
    {
        hardware->Update();
        for each (IHardware^ subHardware in hardware->SubHardware)
        {
            subHardware->Accept(this);
        }
    }

    void UpdateVisitor::VisitSensor(ISensor ^ sensor)
    {
    }

    void UpdateVisitor::VisitParameter(IParameter ^ parameter)
    {
    }

}


================================================
FILE: OpenHardwareMonitorApi/UpdateVisitor.h
================================================
#pragma once

using namespace LibreHardwareMonitor::Hardware;

namespace OpenHardwareMonitorApi
{
    public ref class UpdateVisitor : IVisitor
    {
    public:
        virtual void VisitComputer(IComputer^ computer);
        virtual void VisitHardware(IHardware^ hardware);
        virtual void VisitSensor(ISensor^ sensor);
        virtual void VisitParameter(IParameter^ parameter);
    };

}


================================================
FILE: OpenHardwareMonitorApi/resource.h
================================================
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by app.rc


================================================
FILE: PluginDemo/CustomDrawItem.cpp
================================================
#include "pch.h"
#include "CustomDrawItem.h"
#include "DataManager.h"

const wchar_t* CCustomDrawItem::GetItemName() const
{
    return CDataManager::Instance().StringRes(IDS_CUSTOM_DRAW_ITEM);
}

const wchar_t* CCustomDrawItem::GetItemId() const
{
    return L"4Tc21hGS";
}

const wchar_t* CCustomDrawItem::GetItemLableText() const
{
    return L"";
}

const wchar_t* CCustomDrawItem::GetItemValueText() const
{
    return L"";
}

const wchar_t* CCustomDrawItem::GetItemValueSampleText() const
{
    return L"";
}

bool CCustomDrawItem::IsCustomDraw() const
{
    return true;
}

int CCustomDrawItem::GetItemWidth() const
{
    return 50;
}

static void DrawLine(CDC* pDC, CPoint point1, CPoint point2, COLORREF color)
{
    CPen aPen, * pOldPen;
    aPen.CreatePen(PS_SOLID, 1, color);
    pOldPen = pDC->SelectObject(&aPen);
    pDC->MoveTo(point1);
    pDC->LineTo(point2);
    pDC->SelectObject(pOldPen);
}

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));
    //设置颜色
    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) };
    //显示时、分、秒的矩形区域
    CRect rect1{ rect }, rect2{ rect }, rect3{ rect };
    rect1.bottom = rect.top + rect.Height() / 3;
    rect2 = rect1;
    rect2.MoveToY(rect1.bottom);
    rect3.top = rect2.bottom;
    rect1.DeflateRect(1, 1);
    rect2.DeflateRect(1, 1);
    rect3.DeflateRect(1, 1);
    //根据当前时间计算矩形的宽度
    SYSTEMTIME& time{ CDataManager::Instance().m_system_time };
    int hour_width{ static_cast<int>((time.wHour + time.wMinute / 60.0) * w / 24) };
    int min_width{ static_cast<int>((time.wMinute + time.wSecond / 60.0) * w / 60) };
    int sec_width{ time.wSecond * w / 60 };
    rect1.right = rect1.left + hour_width;
    rect2.right = rect2.left + min_width;
    rect3.right = rect3.left + sec_width;
    //填充矩形
    pDC->FillSolidRect(rect1, color1);
    pDC->FillSolidRect(rect2, color2);
    pDC->FillSolidRect(rect3, color3);
    //绘制刻度
    COLORREF color_scale{ dark_mode ? RGB(225, 225, 225) : RGB(45, 45, 45) };
    for (int i{}; i < 24; i++)
    {
        int x_pos{ i * w / 24 + rect1.left };
        DrawLine(pDC, CPoint(x_pos, rect1.top), CPoint(x_pos, i % 6 == 0 ? rect1.bottom
Download .txt
gitextract_ygmqo6_g/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── BugReport_en.yaml
│   │   ├── BugReport_zh.yaml
│   │   ├── FeatureRequest_en.yaml
│   │   ├── FeatureRequest_zh.yaml
│   │   └── config.yml
│   └── workflows/
│       └── main.yml
├── .gitignore
├── Help.md
├── Help_en-us.md
├── LICENSE
├── LICENSE_CN
├── OpenHardwareMonitorApi/
│   ├── LibreHardwareMonitorLib.xml
│   ├── OpenHardwareMonitorApi.vcxproj
│   ├── OpenHardwareMonitorApi.vcxproj.filters
│   ├── OpenHardwareMonitorImp.cpp
│   ├── OpenHardwareMonitorImp.h
│   ├── ReadMe.txt
│   ├── Stdafx.cpp
│   ├── Stdafx.h
│   ├── UpdateVisitor.cpp
│   ├── UpdateVisitor.h
│   ├── app.rc
│   └── resource.h
├── PluginDemo/
│   ├── CustomDrawItem.cpp
│   ├── CustomDrawItem.h
│   ├── DataManager.cpp
│   ├── DataManager.h
│   ├── OptionsDlg.cpp
│   ├── OptionsDlg.h
│   ├── PluginDemo.cpp
│   ├── PluginDemo.h
│   ├── PluginDemo.rc
│   ├── PluginDemo.vcxproj
│   ├── PluginDemo.vcxproj.filters
│   ├── PluginSystemDate.cpp
│   ├── PluginSystemDate.h
│   ├── PluginSystemTime.cpp
│   ├── PluginSystemTime.h
│   ├── framework.h
│   ├── pch.cpp
│   ├── pch.h
│   └── resource.h
├── README.md
├── README_en-us.md
├── TrafficMonitor/
│   ├── AboutDlg.cpp
│   ├── AboutDlg.h
│   ├── AdapterCommon.cpp
│   ├── AdapterCommon.h
│   ├── AppAlreadyRuningDlg.cpp
│   ├── AppAlreadyRuningDlg.h
│   ├── BaseDialog.cpp
│   ├── BaseDialog.h
│   ├── CAutoAdaptSettingsDlg.cpp
│   ├── CAutoAdaptSettingsDlg.h
│   ├── CMFCColorDialogEx.cpp
│   ├── CMFCColorDialogEx.h
│   ├── CSkinPreviewView.cpp
│   ├── CSkinPreviewView.h
│   ├── CTabCtrlEx.cpp
│   ├── CTabCtrlEx.h
│   ├── CVariant.cpp
│   ├── CVariant.h
│   ├── CalendarHelper.cpp
│   ├── CalendarHelper.h
│   ├── ClassicalTaskbarDlg.cpp
│   ├── ClassicalTaskbarDlg.h
│   ├── ColorSettingListCtrl.cpp
│   ├── ColorSettingListCtrl.h
│   ├── ColorStatic.cpp
│   ├── ColorStatic.h
│   ├── ComboBox2.cpp
│   ├── ComboBox2.h
│   ├── Common.cpp
│   ├── Common.h
│   ├── CommonData.cpp
│   ├── CommonData.h
│   ├── D2D1Support.cpp
│   ├── D2D1Support.h
│   ├── D3D10Support1.cpp
│   ├── D3D10Support1.h
│   ├── DCompositionSupport.cpp
│   ├── DCompositionSupport.h
│   ├── DisplayItem.cpp
│   ├── DisplayItem.h
│   ├── DisplayTextSettingDlg.cpp
│   ├── DisplayTextSettingDlg.h
│   ├── DllFunctions.cpp
│   ├── DllFunctions.h
│   ├── DrawCommon.cpp
│   ├── DrawCommon.h
│   ├── DrawCommonEx.cpp
│   ├── DrawCommonEx.h
│   ├── DrawCommonFactory.cpp
│   ├── DrawCommonFactory.h
│   ├── DrawTextManager.cpp
│   ├── DrawTextManager.h
│   ├── Dxgi1Support2.cpp
│   ├── Dxgi1Support2.h
│   ├── FileDialogEx.cpp
│   ├── FileDialogEx.h
│   ├── FilePathHelper.cpp
│   ├── FilePathHelper.h
│   ├── GeneralSettingsDlg.cpp
│   ├── GeneralSettingsDlg.h
│   ├── HResultException.cpp
│   ├── HResultException.h
│   ├── HighResolutionTimer.h
│   ├── HistoryTrafficCalendarDlg.cpp
│   ├── HistoryTrafficCalendarDlg.h
│   ├── HistoryTrafficDlg.cpp
│   ├── HistoryTrafficDlg.h
│   ├── HistoryTrafficFile.cpp
│   ├── HistoryTrafficFile.h
│   ├── HistoryTrafficListCtrl.cpp
│   ├── HistoryTrafficListCtrl.h
│   ├── HistoryTrafficListDlg.cpp
│   ├── HistoryTrafficListDlg.h
│   ├── IDrawCommon.h
│   ├── IconSelectDlg.cpp
│   ├── IconSelectDlg.h
│   ├── Image2DEffect.cpp
│   ├── Image2DEffect.h
│   ├── IniHelper.cpp
│   ├── IniHelper.h
│   ├── LinkStatic.cpp
│   ├── LinkStatic.h
│   ├── ListCtrlEx.cpp
│   ├── ListCtrlEx.h
│   ├── MainWndColorDlg.cpp
│   ├── MainWndColorDlg.h
│   ├── MainWndSettingsDlg.cpp
│   ├── MainWndSettingsDlg.h
│   ├── MessageDlg.cpp
│   ├── MessageDlg.h
│   ├── NetworkInfoDlg.cpp
│   ├── NetworkInfoDlg.h
│   ├── Nullable.hpp
│   ├── OptionsDlg.cpp
│   ├── OptionsDlg.h
│   ├── PdhHardwareQuery/
│   │   ├── CPUUsage.cpp
│   │   ├── CPUUsage.h
│   │   ├── CpuFreq.cpp
│   │   ├── CpuFreq.h
│   │   ├── DiskUsage.cpp
│   │   ├── DiskUsage.h
│   │   ├── GpuUsage.cpp
│   │   ├── GpuUsage.h
│   │   ├── PdhQuery.cpp
│   │   └── PdhQuery.h
│   ├── PictureStatic.cpp
│   ├── PictureStatic.h
│   ├── PluginInfoDlg.cpp
│   ├── PluginInfoDlg.h
│   ├── PluginManager.cpp
│   ├── PluginManager.h
│   ├── PluginManagerDlg.cpp
│   ├── PluginManagerDlg.h
│   ├── PluginUpdateHelper.cpp
│   ├── PluginUpdateHelper.h
│   ├── ReadMe.txt
│   ├── RenderAPISupport.h
│   ├── SelectConnectionsDlg.cpp
│   ├── SelectConnectionsDlg.h
│   ├── SetItemOrderDlg.cpp
│   ├── SetItemOrderDlg.h
│   ├── SettingsHelper.cpp
│   ├── SettingsHelper.h
│   ├── SimpleXML.cpp
│   ├── SimpleXML.h
│   ├── SkinAutoAdaptSettingDlg.cpp
│   ├── SkinAutoAdaptSettingDlg.h
│   ├── SkinDlg.cpp
│   ├── SkinDlg.h
│   ├── SkinFile.cpp
│   ├── SkinFile.h
│   ├── SkinManager.cpp
│   ├── SkinManager.h
│   ├── SpinEdit.cpp
│   ├── SpinEdit.h
│   ├── StaticEx.cpp
│   ├── StaticEx.h
│   ├── StrTable.cpp
│   ├── StrTable.h
│   ├── SupportedRenderEnums.cpp
│   ├── SupportedRenderEnums.h
│   ├── TabDlg.cpp
│   ├── TabDlg.h
│   ├── TaskBarDlg.cpp
│   ├── TaskBarDlg.h
│   ├── TaskBarDlgDrawCommon.cpp
│   ├── TaskBarDlgDrawCommon.h
│   ├── TaskBarSettingsDlg.cpp
│   ├── TaskBarSettingsDlg.h
│   ├── TaskbarColorDlg.cpp
│   ├── TaskbarColorDlg.h
│   ├── TaskbarDefaultStyle.cpp
│   ├── TaskbarDefaultStyle.h
│   ├── TaskbarHelper.cpp
│   ├── TaskbarHelper.h
│   ├── TaskbarItemOrderHelper.cpp
│   ├── TaskbarItemOrderHelper.h
│   ├── Test.cpp
│   ├── Test.h
│   ├── TinyXml2Helper.cpp
│   ├── TinyXml2Helper.h
│   ├── TrafficMonitor.cpp
│   ├── TrafficMonitor.h
│   ├── TrafficMonitor.rc
│   ├── TrafficMonitor.vcxproj
│   ├── TrafficMonitor.vcxproj.filters
│   ├── TrafficMonitorDlg.cpp
│   ├── TrafficMonitorDlg.h
│   ├── UpdateHelper.cpp
│   ├── UpdateHelper.h
│   ├── WIC.cpp
│   ├── WIC.h
│   ├── Win11TaskbarDlg.cpp
│   ├── Win11TaskbarDlg.h
│   ├── Win11TaskbarSettingDlg.cpp
│   ├── Win11TaskbarSettingDlg.h
│   ├── WinVersionHelper.cpp
│   ├── WinVersionHelper.h
│   ├── WindowsSettingHelper.cpp
│   ├── WindowsSettingHelper.h
│   ├── WindowsWebExperienceDetector.cpp
│   ├── WindowsWebExperienceDetector.h
│   ├── WineTaskbarDlg.cpp
│   ├── WineTaskbarDlg.h
│   ├── auto_start_helper.cpp
│   ├── auto_start_helper.h
│   ├── crashtool.cpp
│   ├── crashtool.h
│   ├── language/
│   │   ├── English.ini
│   │   ├── German.ini
│   │   ├── Hebrew.ini
│   │   ├── Hungarian.ini
│   │   ├── Italian.ini
│   │   ├── Polish.ini
│   │   ├── Portuguese_Brazilian.ini
│   │   ├── Russian.ini
│   │   ├── Simplified_Chinese.ini
│   │   ├── Traditional_Chinese.ini
│   │   └── Turkish.ini
│   ├── language.h
│   ├── print_compile_time.bat
│   ├── res/
│   │   ├── Acknowledgement.txt
│   │   ├── Acknowledgement_en.txt
│   │   └── TrafficMonitor.rc2
│   ├── resource.h
│   ├── skins/
│   │   ├── 0默认皮肤/
│   │   │   └── skin.ini
│   │   ├── xml_test/
│   │   │   └── skin.xml
│   │   ├── 皮肤01/
│   │   │   └── skin.ini
│   │   ├── 皮肤02/
│   │   │   └── skin.ini
│   │   ├── 皮肤03/
│   │   │   └── skin.ini
│   │   ├── 皮肤04/
│   │   │   └── skin.ini
│   │   ├── 皮肤05/
│   │   │   └── skin.ini
│   │   ├── 皮肤06/
│   │   │   └── skin.ini
│   │   ├── 皮肤07/
│   │   │   └── skin.ini
│   │   ├── 皮肤08/
│   │   │   └── skin.ini
│   │   ├── 皮肤09/
│   │   │   └── skin.ini
│   │   ├── 皮肤10/
│   │   │   └── skin.ini
│   │   ├── 皮肤10(竖排)/
│   │   │   └── skin.ini
│   │   ├── 皮肤11/
│   │   │   └── skin.ini
│   │   └── 默认皮肤2/
│   │       └── skin.ini
│   ├── stdafx.cpp
│   ├── stdafx.h
│   ├── targetver.h
│   └── tinyxml2/
│       ├── tinyxml2.cpp
│       └── tinyxml2.h
├── TrafficMonitor.sln
├── UpdateLog/
│   ├── update_log.md
│   ├── update_log_en-us.md
│   └── update_log_zh-tw.md
├── include/
│   ├── OpenHardwareMonitor/
│   │   ├── OpenHardwareMonitorApi.h
│   │   └── OpenHardwareMonitorGlobal.h
│   └── PluginInterface.h
├── version.info
├── version_utf8.info
└── 皮肤制作教程.md
Download .txt
SYMBOL INDEX (749 symbols across 179 files)

FILE: OpenHardwareMonitorApi/OpenHardwareMonitorImp.cpp
  type OpenHardwareMonitorApi (line 8) | namespace OpenHardwareMonitorApi
    function CreateInstance (line 29) | std::shared_ptr<IOpenHardwareMonitor> CreateInstance()
    function GetErrorMessage (line 44) | std::wstring GetErrorMessage()

FILE: OpenHardwareMonitorApi/OpenHardwareMonitorImp.h
  function namespace (line 12) | namespace OpenHardwareMonitorApi {

FILE: OpenHardwareMonitorApi/UpdateVisitor.cpp
  type OpenHardwareMonitorApi (line 4) | namespace OpenHardwareMonitorApi

FILE: OpenHardwareMonitorApi/UpdateVisitor.h
  function namespace (line 5) | namespace OpenHardwareMonitorApi

FILE: PluginDemo/CustomDrawItem.cpp
  function wchar_t (line 5) | const wchar_t* CCustomDrawItem::GetItemName() const
  function wchar_t (line 10) | const wchar_t* CCustomDrawItem::GetItemId() const
  function wchar_t (line 15) | const wchar_t* CCustomDrawItem::GetItemLableText() const
  function wchar_t (line 20) | const wchar_t* CCustomDrawItem::GetItemValueText() const
  function wchar_t (line 25) | const wchar_t* CCustomDrawItem::GetItemValueSampleText() const
  function DrawLine (line 40) | static void DrawLine(CDC* pDC, CPoint point1, CPoint point2, COLORREF co...

FILE: PluginDemo/CustomDrawItem.h
  function class (line 4) | class CCustomDrawItem : public IPluginItem

FILE: PluginDemo/DataManager.cpp
  function CDataManager (line 15) | CDataManager& CDataManager::Instance()
  function WritePrivateProfileInt (line 40) | static void WritePrivateProfileInt(const wchar_t* app_name, const wchar_...
  function CString (line 53) | const CString& CDataManager::StringRes(UINT id)

FILE: PluginDemo/DataManager.h
  type SettingData (line 7) | struct SettingData
  function class (line 13) | class CDataManager

FILE: PluginDemo/OptionsDlg.cpp
  function BOOL (line 38) | BOOL COptionsDlg::OnInitDialog()

FILE: PluginDemo/OptionsDlg.h
  function class (line 6) | class COptionsDlg : public CDialog

FILE: PluginDemo/PluginDemo.cpp
  function CPluginDemo (line 12) | CPluginDemo& CPluginDemo::Instance()
  function IPluginItem (line 17) | IPluginItem* CPluginDemo::GetItem(int index)
  function wchar_t (line 49) | const wchar_t* CPluginDemo::GetInfo(PluginInfoIndex index)
  function ITMPlugin (line 112) | ITMPlugin* TMPluginGetInstance()

FILE: PluginDemo/PluginDemo.h
  function class (line 7) | class CPluginDemo : public ITMPlugin

FILE: PluginDemo/PluginSystemDate.cpp
  function wchar_t (line 10) | const wchar_t* CPluginSystemDate::GetItemName() const
  function wchar_t (line 15) | const wchar_t* CPluginSystemDate::GetItemId() const
  function wchar_t (line 20) | const wchar_t* CPluginSystemDate::GetItemLableText() const
  function wchar_t (line 25) | const wchar_t* CPluginSystemDate::GetItemValueText() const
  function wchar_t (line 30) | const wchar_t* CPluginSystemDate::GetItemValueSampleText() const

FILE: PluginDemo/PluginSystemDate.h
  function class (line 4) | class CPluginSystemDate : public IPluginItem

FILE: PluginDemo/PluginSystemTime.cpp
  function wchar_t (line 10) | const wchar_t* CPluginSystemTime::GetItemName() const
  function wchar_t (line 15) | const wchar_t* CPluginSystemTime::GetItemId() const
  function wchar_t (line 20) | const wchar_t* CPluginSystemTime::GetItemLableText() const
  function wchar_t (line 25) | const wchar_t* CPluginSystemTime::GetItemValueText() const
  function wchar_t (line 30) | const wchar_t* CPluginSystemTime::GetItemValueSampleText() const

FILE: TrafficMonitor/AboutDlg.cpp
  function CString (line 34) | CString CAboutDlg::GetDonateList()
  function CString (line 39) | CString CAboutDlg::GetDialogName() const
  function CRect (line 57) | CRect CAboutDlg::CalculatePicRect()
  function BOOL (line 70) | BOOL CAboutDlg::OnInitDialog()
  function BOOL (line 172) | BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
  function afx_msg (line 187) | afx_msg LRESULT CAboutDlg::OnLinkClicked(WPARAM wParam, LPARAM lParam)
  function BOOL (line 226) | BOOL CAboutDlg::OnEraseBkgnd(CDC* pDC)
  function HBRUSH (line 257) | HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

FILE: TrafficMonitor/AboutDlg.h
  function class (line 7) | class CAboutDlg : public CBaseDialog

FILE: TrafficMonitor/AdapterCommon.h
  type NetWorkConection (line 5) | struct NetWorkConection
  function class (line 17) | class CAdapterCommon

FILE: TrafficMonitor/AppAlreadyRuningDlg.cpp
  function CString (line 29) | CString CAppAlreadyRuningDlg::GetDialogName() const
  function BOOL (line 46) | BOOL CAppAlreadyRuningDlg::OnInitDialog()

FILE: TrafficMonitor/AppAlreadyRuningDlg.h
  function class (line 6) | class CAppAlreadyRuningDlg : public CBaseDialog

FILE: TrafficMonitor/BaseDialog.cpp
  function HWND (line 52) | HWND CBaseDialog::GetUniqueHandel(LPCTSTR dlg_name)
  function CRect (line 142) | CRect CBaseDialog::GetTextExtent(const CString& text)
  type itemInfo (line 161) | struct itemInfo
  function CRect (line 263) | CRect CBaseDialog::GetControlRect(CWnd* pCtrl)
  function CRect (line 275) | CRect CBaseDialog::GetControlRect(UINT id)
  function BOOL (line 305) | BOOL CBaseDialog::OnInitDialog()
  function INT_PTR (line 433) | INT_PTR CBaseDialog::DoModal()
  function BOOL (line 446) | BOOL CBaseDialog::OnEraseBkgnd(CDC* pDC)
  function HBRUSH (line 461) | HBRUSH CBaseDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

FILE: TrafficMonitor/BaseDialog.h
  function CSize (line 38) | CSize m_min_size{}
  function m_remember_dlg_size (line 43) | bool m_remember_dlg_size{ true };                   //是否记住窗口大小(当此标志为true...

FILE: TrafficMonitor/CAutoAdaptSettingsDlg.cpp
  function CString (line 50) | CString CAutoAdaptSettingsDlg::GetDialogName() const
  function BOOL (line 74) | BOOL CAutoAdaptSettingsDlg::OnInitDialog()
  function BOOL (line 105) | BOOL CAutoAdaptSettingsDlg::PreTranslateMessage(MSG* pMsg)

FILE: TrafficMonitor/CAutoAdaptSettingsDlg.h
  function class (line 6) | class CAutoAdaptSettingsDlg : public CBaseDialog

FILE: TrafficMonitor/CMFCColorDialogEx.cpp
  function BOOL (line 31) | BOOL CMFCColorDialogEx::OnInitDialog()

FILE: TrafficMonitor/CMFCColorDialogEx.h
  function class (line 6) | class CMFCColorDialogEx : public CMFCColorDialog

FILE: TrafficMonitor/CSkinPreviewView.h
  function class (line 9) | class CSkinPreviewView : public CScrollView

FILE: TrafficMonitor/CTabCtrlEx.cpp
  function CWnd (line 55) | CWnd* CTabCtrlEx::GetCurrentTab()

FILE: TrafficMonitor/CTabCtrlEx.h
  function class (line 6) | class CTabCtrlEx : public CTabCtrl

FILE: TrafficMonitor/CVariant.cpp
  function CString (line 45) | CString CVariant::ToString() const

FILE: TrafficMonitor/CVariant.h
  function class (line 2) | class CVariant

FILE: TrafficMonitor/CalendarHelper.h
  type DayTraffic (line 5) | struct DayTraffic
  function class (line 19) | class CCalendarHelper

FILE: TrafficMonitor/ClassicalTaskbarDlg.cpp
  function HWND (line 99) | HWND CClassicalTaskbarDlg::GetParentHwnd()

FILE: TrafficMonitor/ClassicalTaskbarDlg.h
  function class (line 3) | class CClassicalTaskbarDlg :

FILE: TrafficMonitor/ColorSettingListCtrl.cpp
  function COLORREF (line 21) | COLORREF CColorSettingListCtrl::GetItemColor(int row, int col)

FILE: TrafficMonitor/ColorSettingListCtrl.h
  function class (line 4) | class CColorSettingListCtrl :

FILE: TrafficMonitor/ColorStatic.cpp
  function BOOL (line 155) | BOOL CColorStatic::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)

FILE: TrafficMonitor/ColorStatic.h
  function m_link_cursor (line 24) | bool m_link_cursor{ false };	//是否启用超链接形状的光标

FILE: TrafficMonitor/ComboBox2.cpp
  function BOOL (line 37) | BOOL CComboBox2::PreTranslateMessage(MSG* pMsg)

FILE: TrafficMonitor/ComboBox2.h
  function class (line 6) | class CComboBox2 : public CComboBox

FILE: TrafficMonitor/Common.cpp
  function wstring (line 15) | wstring CCommon::StrToUnicode(const char* str, bool utf8)
  function string (line 28) | string CCommon::UnicodeToStr(const wchar_t* wstr, bool utf8)
  function wstring (line 41) | wstring CCommon::AsciiToUnicode(const string& str)
  function string (line 50) | string CCommon::AsciiToStr(const std::wstring& wstr)
  function _StringNormalize (line 60) | static void _StringNormalize(T& str)
  function _StringSplit (line 91) | static void _StringSplit(const T& str, wchar_t div_ch, vector<T>& result...
  function _StringSplit (line 121) | static void _StringSplit(const T& str, const T& div_str, vector<T>& resu...
  function _StringTransform (line 151) | static bool _StringTransform(T& str, bool upper)
  function CString (line 223) | CString CCommon::DataSizeToString(unsigned long long size, const PublicS...
  function CString (line 331) | CString CCommon::DataSizeToString(unsigned long long size, bool with_space)
  function CString (line 349) | CString CCommon::TemperatureToString(float temperature, const PublicSett...
  function CString (line 362) | CString CCommon::UsageToString(int usage, const PublicSettingData& cfg)
  function CString (line 378) | CString CCommon::FreqToString(float freq, const PublicSettingData& cfg)
  function CString (line 404) | CString CCommon::KBytesToString(unsigned __int64 kb_size)
  function __int64 (line 418) | __int64 CCommon::CompareFileTime2(FILETIME time1, FILETIME time2)
  function BOOL (line 449) | BOOL CCommon::CreateFileShortcut(LPCTSTR lpszLnkFileDir, LPCTSTR lpszFil...
  function wstring (line 549) | wstring CCommon::GetStartUpPath()
  function SYSTEMTIME (line 619) | SYSTEMTIME CCommon::CompareSystemTime(SYSTEMTIME a, SYSTEMTIME b)
  function ULONGLONG (line 648) | ULONGLONG CCommon::GetCurrentTimeSinceEpochMilliseconds()
  function wstring (line 666) | wstring CCommon::GetModuleDir()
  function wstring (line 677) | wstring CCommon::GetSystemDir()
  function wstring (line 684) | wstring CCommon::GetTemplateDir()
  function wstring (line 695) | wstring CCommon::GetAppDataConfigDir()
  function wstring (line 781) | wstring CCommon::GetJsonValueSimple(const wstring& json_str, const wstri...
  function CString (line 932) | CString CCommon::LoadText(const wchar_t* id, LPCTSTR back_str)
  function CString (line 940) | CString CCommon::LoadText(LPCTSTR front_str, const wchar_t* id, LPCTSTR ...
  function CString (line 950) | CString CCommon::StringFormat(LPCTSTR format_str, const std::initializer...
  function CString (line 966) | CString CCommon::LoadTextFormat(const wchar_t* id, const std::initialize...
  function CString (line 972) | CString CCommon::IntToString(__int64 n, bool thousand_separation, bool i...
  function _StringSimilarDegree_LD (line 1073) | static double _StringSimilarDegree_LD(const T& srcString, const T& match...
  function CString (line 1192) | CString CCommon::GetTextResource(UINT id, int code_type)
  function CString (line 1219) | CString CCommon::GetLastCompileTime()
  function HICON (line 1227) | HICON CCommon::LoadIconResource(UINT id, int size)
  function TranslateMenuItems (line 1248) | static void TranslateMenuItems(CMenu& menu)
  function COLORREF (line 1328) | COLORREF CCommon::GetWindowsThemeColor()
  function CString (line 1345) | CString CCommon::GetErrorMessage(DWORD error_code)

FILE: TrafficMonitor/Common.h
  function class (line 7) | class CCommon
  function GetArrayLength (line 272) | constexpr std::size_t GetArrayLength(const T (&)[N]) noexcept

FILE: TrafficMonitor/CommonData.cpp
  function wstring (line 58) | wstring& DispStrings::Get(CommonDisplayItem item)
  function wstring (line 63) | const wstring& DispStrings::GetConst(CommonDisplayItem item) const
  function SkinSettingData (line 182) | SkinSettingData MainWndSettingData::ToSkinSettingData() const
  function COLORREF (line 267) | COLORREF TaskBarSettingData::GetUsageGraphColor() const

FILE: TrafficMonitor/CommonData.h
  type Date (line 6) | struct Date
  function month (line 9) | int month{}
  function day (line 10) | int day{}
  type HistoryTraffic (line 23) | struct HistoryTraffic
  function up_kBytes (line 26) | unsigned __int64 up_kBytes{}
  function down_kBytes (line 27) | unsigned __int64 down_kBytes{}
  function mixed (line 28) | bool mixed{ true };     //如果不区分上传和下载流量,则为true
  function SpeedUnit (line 42) | enum class SpeedUnit
  type class (line 148) | enum class
  type StringSet (line 157) | struct StringSet
  type MainConfigData (line 172) | struct MainConfigData
  function m_notify_icon_selected (line 194) | int m_notify_icon_selected{}
  function HistoryTrafficViewType (line 199) | HistoryTrafficViewType m_view_type{}
  function m_sunday_first (line 200) | bool m_sunday_first{ true };            //是否将周日作为一周的第一天
  type class (line 206) | enum class
  type SkinSettingData (line 214) | struct SkinSettingData
  function IsEmpty (line 221) | bool IsEmpty() const;
  function m_mouse_penetrate (line 253) | bool m_mouse_penetrate{ false };    //鼠标穿透
  type TaskBarSettingData (line 274) | struct TaskBarSettingData
  function dark_default_style (line 286) | int dark_default_style{ 0 }
  function auto_save_taskbar_color_settings_to_preset (line 289) | bool auto_save_taskbar_color_settings_to_preset{}
  function IsTaskbarTransparent (line 290) | bool IsTaskbarTransparent() const;
  function digits_number (line 300) | int digits_number{ 4 }
  function item_space (line 308) | int item_space{}
  function vertical_margin (line 309) | int vertical_margin{}
  function window_offset_top (line 310) | int window_offset_top{}
  function window_offset_left (line 311) | int window_offset_left{}
  function taskbar_left_space_win11 (line 317) | int taskbar_left_space_win11{}
  function taskbar_right_space_win11 (line 318) | int taskbar_right_space_win11{}
  function netspeed_figure_max_value_unit (line 322) | int netspeed_figure_max_value_unit{}
  function DWORD (line 328) | DWORD update_layered_window_error_code{0}
  function is_windows_web_experience_detected (line 331) | bool is_windows_web_experience_detected{ false }; //是否检测到Windows Web Exp...
  type GeneralSettingData (line 335) | struct GeneralSettingData
  function update_source (line 338) | int update_source{}
  function traffic_tip_unit (line 344) | int traffic_tip_unit{}
  type NotifyTipSettings (line 346) | struct NotifyTipSettings        //超过某个值时弹出提示的设置
  type CpuUsageAcquireMethod (line 364) | enum CpuUsageAcquireMethod
  function CpuUsageAcquireMethod (line 370) | CpuUsageAcquireMethod cpu_usage_acquire_method{}
  function monitor_time_span (line 373) | int monitor_time_span{ 1000 };    //监控的时间间隔
  function class (line 399) | class CFlagLocker

FILE: TrafficMonitor/D2D1Support.cpp
  function ID2D1Factory (line 14) | ID2D1Factory* CD2D1Support::GetFactory()
  function ID2D1Factory1 (line 41) | ID2D1Factory1* CD2D1Support1::GetFactory()
  function IDWriteFactory (line 93) | IDWriteFactory* CDWriteSupport::GetFactory()

FILE: TrafficMonitor/D2D1Support.h
  function D2D1_FACTORY_OPTIONS (line 23) | constexpr static D2D1_FACTORY_OPTIONS CREATION_OPTIONS{D2D1_DEBUG_LEVEL_...
  function class (line 48) | class CD2D1Support1
  function class (line 55) | class CDWriteSupport

FILE: TrafficMonitor/D3D10Support1.cpp
  function UINT (line 309) | UINT CShader::GetFlags1() const noexcept
  function UINT (line 322) | UINT CShader::GetFlags2() const noexcept
  function HRESULT (line 360) | HRESULT CD3D10DrawCallWaiter::Wait() const noexcept

FILE: TrafficMonitor/D3D10Support1.h
  type Data (line 22) | struct Data
  function UINT (line 29) | UINT m_flags{0}
  function UINT (line 31) | UINT m_sdk_version{D3D10_1_SDK_VERSION};
  type ShaderMacro (line 98) | struct ShaderMacro
  function mutable (line 112) | mutable std::vector<D3D_SHADER_MACRO> m_shader_macros{0}
  function ID3DInclude (line 113) | ID3DInclude* m_p_include{}
  function UINT (line 114) | UINT m_flags1{}
  function UINT (line 115) | UINT m_flags2{}
  function mutable (line 118) | mutable Microsoft::WRL::ComPtr<ID3DBlob> m_p_cached_byte_code{}

FILE: TrafficMonitor/DCompositionSupport.h
  function class (line 12) | class CDCompositionDevice

FILE: TrafficMonitor/DisplayItem.cpp
  function DisplayItem (line 46) | DisplayItem CommonDisplayItem::ItemType() const
  function IPluginItem (line 51) | IPluginItem* CommonDisplayItem::PluginItem() const
  function CString (line 56) | CString CommonDisplayItem::GetItemName() const
  function wchar_t (line 156) | const wchar_t* CommonDisplayItem::GetItemIniKeyName() const
  function CString (line 185) | CString CommonDisplayItem::GetItemValueText(bool is_main_window) const
  function CString (line 278) | CString CommonDisplayItem::GetItemValueSampleText(bool is_main_window) c...

FILE: TrafficMonitor/DisplayItem.h
  type DisplayItem (line 5) | enum DisplayItem
  function std (line 23) | const std::set<DisplayItem> AllDisplayItems

FILE: TrafficMonitor/DisplayTextSettingDlg.cpp
  function CString (line 32) | CString CDisplayTextSettingDlg::GetDialogName() const
  function BOOL (line 49) | BOOL CDisplayTextSettingDlg::OnInitDialog()
  function CommonDisplayItem (line 103) | CommonDisplayItem CDisplayTextSettingDlg::GetDisplayItem(int row)

FILE: TrafficMonitor/DisplayTextSettingDlg.h
  function m_item_selected (line 27) | int m_item_selected{ -1 };

FILE: TrafficMonitor/DllFunctions.cpp
  function HRESULT (line 23) | HRESULT CDllFunctions::GetDpiForMonitor(HMONITOR hmonitor, MONITOR_DPI_T...

FILE: TrafficMonitor/DllFunctions.h
  function R (line 94) | R operator()(Args... args) const
  function class (line 106) | class CDllFunctions

FILE: TrafficMonitor/DrawCommon.cpp
  function UINT (line 223) | UINT DrawCommonHelper::ProccessTextFormat(CRect rect, CSize text_length,...

FILE: TrafficMonitor/DrawCommon.h
  function virtual (line 18) | virtual CDC* GetDC() override { return m_pDC; }
  function CWnd (line 56) | CWnd* m_pMainWnd{}
  function CFont (line 57) | CFont* m_pfont{}
  function COLORREF (line 58) | COLORREF m_back_color{}
  function CDC (line 90) | CDC* GetMemDC()
  function namespace (line 103) | namespace DrawCommonHelper

FILE: TrafficMonitor/DrawCommonEx.cpp
  function CDC (line 105) | CDC* CDrawCommonEx::GetDC()
  function COLORREF (line 130) | COLORREF CGdiPlusHelper::GdiplusColorToCOLORREF(Gdiplus::Color color)
  function CRect (line 135) | CRect CGdiPlusHelper::GdiplusRectToCRect(Gdiplus::RectF rect)

FILE: TrafficMonitor/DrawCommonEx.h
  function class (line 6) | class CDrawCommonEx : public IDrawCommon
  function class (line 39) | class CGdiPlusHelper

FILE: TrafficMonitor/DrawCommonFactory.cpp
  function GetInterfaceFromAllInvolvedDrawCommonObjects (line 4) | auto GetInterfaceFromAllInvolvedDrawCommonObjects(

FILE: TrafficMonitor/DrawCommonFactory.h
  function const (line 12) | void operator()(pointer p_stack_object) const noexcept
  type InvolvedDrawCommonStorages (line 33) | struct InvolvedDrawCommonStorages
  function DrawCommonUnionStorage (line 36) | DrawCommonUnionStorage m_draw_common_union_storage{}
  type AllInvolvedDrawCommonObjectsStorage (line 43) | struct AllInvolvedDrawCommonObjectsStorage
  function UniqueIDrawBuffer (line 47) | UniqueIDrawBuffer m_unique_draw_buffer{}
  function UniqueIDrawCommon (line 48) | UniqueIDrawCommon m_unique_draw_common{}

FILE: TrafficMonitor/DrawTextManager.h
  function class (line 6) | class EnableWriteMemoryGuard
  function class (line 39) | class User32DrawTextManager
  function noexcept (line 187) | static auto GetFunction() noexcept
  function noexcept (line 209) | static auto GetFunction() noexcept

FILE: TrafficMonitor/Dxgi1Support2.cpp
  function IDXGIFactory2 (line 50) | IDXGIFactory2* CDxgi1Support2::GetFactory()

FILE: TrafficMonitor/Dxgi1Support2.h
  function CDxgi1Support2 (line 52) | auto GetStorage()

FILE: TrafficMonitor/FileDialogEx.h
  function class (line 3) | class CFileDialogEx {

FILE: TrafficMonitor/FilePathHelper.cpp
  function wstring (line 15) | wstring CFilePathHelper::GetFileExtension(bool upper, bool width_dot) const
  function wstring (line 26) | wstring CFilePathHelper::GetFileName() const
  function wstring (line 35) | wstring CFilePathHelper::GetFileNameWithoutExtension() const
  function wstring (line 45) | wstring CFilePathHelper::GetFolderName() const
  function wstring (line 59) | wstring CFilePathHelper::GetDir() const
  function wstring (line 70) | wstring CFilePathHelper::GetParentDir() const
  function wstring (line 82) | const wstring& CFilePathHelper::ReplaceFileExtension(const wchar_t * new...
  function wstring (line 107) | wstring CFilePathHelper::GetFilePathWithoutExtension() const

FILE: TrafficMonitor/FilePathHelper.h
  function class (line 2) | class CFilePathHelper

FILE: TrafficMonitor/GeneralSettingsDlg.cpp
  function BOOL (line 246) | BOOL CGeneralSettingsDlg::OnInitDialog()
  function BOOL (line 548) | BOOL CGeneralSettingsDlg::PreTranslateMessage(MSG* pMsg)
  function afx_msg (line 574) | afx_msg LRESULT CGeneralSettingsDlg::OnSpinEditPosChanged(WPARAM wParam,...

FILE: TrafficMonitor/GeneralSettingsDlg.h
  function class (line 8) | class CGeneralSettingsDlg : public CTabDlg

FILE: TrafficMonitor/HResultException.cpp
  type FunctionChecker (line 5) | namespace FunctionChecker
    type Details (line 7) | namespace Details
      function StrategicCheck (line 10) | bool StrategicCheck(LPCTSTR p_library_name, Strategy strategy)
  function ThrowIfFailed (line 43) | void ThrowIfFailed(HRESULT hr, const char* p_message)
  function LogHResultException (line 71) | void LogHResultException(CHResultException& ex)

FILE: TrafficMonitor/HResultException.h
  function namespace (line 20) | namespace FunctionChecker

FILE: TrafficMonitor/HighResolutionTimer.h
  function class (line 4) | class CHighResolutionTimer

FILE: TrafficMonitor/HistoryTrafficCalendarDlg.cpp
  function CString (line 105) | CString CHistoryTrafficCalendarDlg::GetWeekdayString(int index)
  function BOOL (line 152) | BOOL CHistoryTrafficCalendarDlg::OnInitDialog()
  function BOOL (line 428) | BOOL CHistoryTrafficCalendarDlg::PreTranslateMessage(MSG* pMsg)
  function BOOL (line 486) | BOOL CHistoryTrafficCalendarDlg::OnMouseWheel(UINT nFlags, short zDelta,...

FILE: TrafficMonitor/HistoryTrafficDlg.cpp
  function CString (line 25) | CString CHistoryTrafficDlg::GetDialogName() const
  function BOOL (line 61) | BOOL CHistoryTrafficDlg::OnInitDialog()
  function BOOL (line 94) | BOOL CHistoryTrafficDlg::PreTranslateMessage(MSG* pMsg)

FILE: TrafficMonitor/HistoryTrafficDlg.h
  function class (line 10) | class CHistoryTrafficDlg : public CBaseDialog

FILE: TrafficMonitor/HistoryTrafficFile.h
  function class (line 3) | class CHistoryTrafficFile

FILE: TrafficMonitor/HistoryTrafficListCtrl.h
  function class (line 4) | class CHistoryTrafficListCtrl :
  function SetDrawItemRangeRow (line 13) | void SetDrawItemRangeRow(int row) { m_draw_item_range_row = row; }
  function SetDrawItemRangMargin (line 15) | void SetDrawItemRangMargin(int margin) { m_margin = margin; }
  type ItemData (line 19) | struct ItemData
  function m_draw_item_range (line 24) | bool m_draw_item_range{ false };		//ǷҪijһеԪлƱʾֵСľ

FILE: TrafficMonitor/HistoryTrafficListDlg.cpp
  function BOOL (line 226) | BOOL CHistoryTrafficListDlg::OnInitDialog()
  function BOOL (line 269) | BOOL CHistoryTrafficListDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRES...

FILE: TrafficMonitor/IDrawCommon.h
  function class (line 4) | class IDrawBuffer
  type class (line 14) | enum class
  function Alignment (line 22) | enum class Alignment
  function RenderType (line 61) | enum class RenderType

FILE: TrafficMonitor/IconSelectDlg.cpp
  function BOOL (line 68) | BOOL CIconSelectDlg::OnInitDialog()
  function afx_msg (line 115) | afx_msg LRESULT CIconSelectDlg::OnControlRepaint(WPARAM wParam, LPARAM l...
  function CString (line 134) | CString CIconSelectDlg::GetDialogName() const

FILE: TrafficMonitor/IconSelectDlg.h
  function class (line 8) | class CIconSelectDlg : public CBaseDialog

FILE: TrafficMonitor/Image2DEffect.cpp
  type D3DQuadrangle (line 5) | namespace D3DQuadrangle
    function CShader (line 11) | const CShader& GetVsShader()
  function UINT (line 331) | UINT CImage2DEffect::GetOutputWidth() const noexcept
  function UINT (line 336) | UINT CImage2DEffect::GetOutputHeight() const noexcept

FILE: TrafficMonitor/Image2DEffect.h
  function namespace (line 6) | namespace D3DQuadrangle
  type Image2DVertex (line 60) | struct Image2DVertex
  function UINT (line 95) | UINT m_output_width{}
  function UINT (line 96) | UINT m_output_height{}

FILE: TrafficMonitor/IniHelper.cpp
  function wstring (line 80) | wstring CIniHelper::GetString(const wchar_t * AppName, const wchar_t * K...
  function wstring (line 418) | wstring CIniHelper::MergeStringList(const vector<wstring>& values)

FILE: TrafficMonitor/IniHelper.h
  function class (line 7) | class CIniHelper

FILE: TrafficMonitor/LinkStatic.cpp
  function CString (line 32) | CString CLinkStatic::GetURL() const
  function BOOL (line 108) | BOOL CLinkStatic::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)

FILE: TrafficMonitor/LinkStatic.h
  function class (line 14) | class CLinkStatic : public CStatic
  function m_bHot (line 29) | bool m_bHot{ false };			//当鼠标指向超链接时,则为true

FILE: TrafficMonitor/ListCtrlEx.cpp
  function BOOL (line 85) | BOOL CListCtrlEx::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
  function afx_msg (line 117) | afx_msg LRESULT CListCtrlEx::OnTabletQuerysystemgesturestatus(WPARAM wPa...
  function BOOL (line 123) | BOOL CListCtrlEx::PreTranslateMessage(MSG* pMsg)

FILE: TrafficMonitor/ListCtrlEx.h
  function class (line 7) | class CListCtrlEx :

FILE: TrafficMonitor/MainWndColorDlg.cpp
  function CString (line 25) | CString CMainWndColorDlg::GetDialogName() const
  function BOOL (line 45) | BOOL CMainWndColorDlg::OnInitDialog()

FILE: TrafficMonitor/MainWndColorDlg.h
  function class (line 9) | class CMainWndColorDlg : public CBaseDialog

FILE: TrafficMonitor/MainWndSettingsDlg.cpp
  function BOOL (line 177) | BOOL CMainWndSettingsDlg::OnInitDialog()
  function BOOL (line 418) | BOOL CMainWndSettingsDlg::PreTranslateMessage(MSG* pMsg)
  function afx_msg (line 457) | afx_msg LRESULT CMainWndSettingsDlg::OnStaticClicked(WPARAM wParam, LPAR...

FILE: TrafficMonitor/MainWndSettingsDlg.h
  function class (line 11) | class CMainWndSettingsDlg : public CTabDlg

FILE: TrafficMonitor/MessageDlg.cpp
  function BOOL (line 93) | BOOL CMessageDlg::OnInitDialog()

FILE: TrafficMonitor/MessageDlg.h
  function class (line 7) | class CMessageDlg : public CBaseDialog

FILE: TrafficMonitor/NetworkInfoDlg.cpp
  function MIB_IFROW (line 139) | MIB_IFROW& CNetworkInfoDlg::GetConnectIfTable(int connection_index)
  function NetWorkConection (line 151) | NetWorkConection CNetworkInfoDlg::GetConnection(int connection_index)
  function UINT (line 159) | UINT CNetworkInfoDlg::GetInternetIPThreadFunc(LPVOID lpParam)
  function CString (line 206) | CString CNetworkInfoDlg::GetDialogName() const
  function BOOL (line 233) | BOOL CNetworkInfoDlg::OnInitDialog()
  function BOOL (line 366) | BOOL CNetworkInfoDlg::PreTranslateMessage(MSG* pMsg)
  function BOOL (line 399) | BOOL CNetworkInfoDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

FILE: TrafficMonitor/NetworkInfoDlg.h
  function class (line 10) | class CNetworkInfoDlg : public CBaseDialog

FILE: TrafficMonitor/Nullable.hpp
  class AlignedStorage (line 9) | class AlignedStorage
    method AlignedStorage (line 15) | AlignedStorage() = default;
    method T (line 17) | T& Get() noexcept
    method T (line 21) | const T& Get() const noexcept
  type NullableDefaultDeleter (line 38) | struct NullableDefaultDeleter
  class CNullable (line 52) | class CNullable
    method EmplaceAt (line 57) | static void EmplaceAt(RawType* p_object, Args&&... args)
    method CNullable (line 63) | CNullable(Deleter deleter = {})
    method CNullable (line 72) | CNullable(const CNullable& other)
    method CNullable (line 80) | CNullable& operator=(const CNullable& other)
    method CNullable (line 90) | CNullable(CNullable&& other) noexcept
    method CNullable (line 98) | CNullable& operator=(CNullable&& other) noexcept
    method Construct (line 110) | void Construct(Args&&... args)
    method T (line 122) | const T& GetUnsafe() const noexcept
    method T (line 126) | T& GetUnsafe() noexcept
    method T (line 130) | const T& Get() const noexcept
    method T (line 135) | T& Get() noexcept
    method HasValue (line 140) | bool HasValue() const noexcept
    method DestroySelf (line 150) | void DestroySelf()
    method Check (line 155) | void Check() const
    class CallNullObjectError (line 163) | class CallNullObjectError : public std::runtime_error
      method CallNullObjectError (line 166) | CallNullObjectError()
    class StorageAndEboDeleter (line 171) | class StorageAndEboDeleter : public Deleter
      method StorageAndEboDeleter (line 177) | explicit StorageAndEboDeleter(Deleter deleter)
      method StorageAndEboDeleter (line 180) | StorageAndEboDeleter(const StorageAndEboDeleter&) = delete;
      method StorageAndEboDeleter (line 181) | StorageAndEboDeleter& operator=(const StorageAndEboDeleter&) = delete;
      method T (line 183) | const T& GetUnsafe() const noexcept
      method T (line 187) | T& GetUnsafe() noexcept
      method T (line 191) | const T* GetPointerUnsafe() const noexcept
      method T (line 195) | T* GetPointerUnsafe() noexcept
  function MakeNullableObject (line 204) | auto MakeNullableObject(Deleter deleter)
  class CLazyConstructable (line 217) | class CLazyConstructable
    method CLazyConstructable (line 220) | CLazyConstructable() = default;
    method T (line 222) | T& Get()
  class CLazyConstructableWithInitializer (line 240) | class CLazyConstructableWithInitializer
  class CLazyConstructableWithInitializer<T, Deleter, Container<InitArgs...>> (line 243) | class CLazyConstructableWithInitializer<T, Deleter, Container<InitArgs...>>
    method ConstructHelper (line 250) | void ConstructHelper(Tuple&& args, std::index_sequence<Indexs...>)
    method CLazyConstructableWithInitializer (line 256) | CLazyConstructableWithInitializer(ArgsInitFunction init_function)
    method T (line 261) | T& Get()
    method HasValue (line 276) | bool HasValue() const noexcept

FILE: TrafficMonitor/OptionsDlg.cpp
  function CString (line 24) | CString COptionsDlg::GetDialogName() const
  function BOOL (line 45) | BOOL COptionsDlg::OnInitDialog()

FILE: TrafficMonitor/PdhHardwareQuery/CPUUsage.h
  function class (line 6) | class CPdhCPUUsage : public CPdhQuery
  function class (line 20) | class CCPUUsage

FILE: TrafficMonitor/PdhHardwareQuery/CpuFreq.cpp
  type _PROCESSOR_POWER_INFORMATION (line 10) | struct _PROCESSOR_POWER_INFORMATION {

FILE: TrafficMonitor/PdhHardwareQuery/CpuFreq.h
  function class (line 6) | class CPdhCpuFreq : public CPdhQuery

FILE: TrafficMonitor/PdhHardwareQuery/DiskUsage.h
  function class (line 4) | class CPdhDiskUsage : public CPdhQuery

FILE: TrafficMonitor/PdhHardwareQuery/GpuUsage.h
  function class (line 5) | class CPdhGPUUsage : public CPdhQuery

FILE: TrafficMonitor/PdhHardwareQuery/PdhQuery.h
  function class (line 5) | class CPdhQuery

FILE: TrafficMonitor/PictureStatic.h
  function class (line 9) | class CPictureStatic : public CStatic

FILE: TrafficMonitor/PluginInfoDlg.cpp
  function BOOL (line 86) | BOOL CPluginInfoDlg::OnInitDialog()
  function CString (line 121) | CString CPluginInfoDlg::GetDialogName() const
  function BOOL (line 170) | BOOL CPluginInfoDlg::PreTranslateMessage(MSG* pMsg)
  function BOOL (line 190) | BOOL CPluginInfoDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
  function CString (line 205) | CString CPluginInfoDlg::GetRowName(int row_index)

FILE: TrafficMonitor/PluginInfoDlg.h
  function class (line 7) | class CPluginInfoDlg : public CBaseDialog

FILE: TrafficMonitor/PluginManager.cpp
  function wstring (line 27) | static wstring WcharArrayToWString(const wchar_t* str)
  function IPluginItem (line 147) | IPluginItem* CPluginManager::GetItemById(const std::wstring& item_id)
  function IPluginItem (line 157) | IPluginItem* CPluginManager::GetItemByIndex(int index)
  function ITMPlugin (line 174) | ITMPlugin* CPluginManager::GetPluginByItem(IPluginItem* pItem)
  function CopyData (line 243) | void inline CopyData(void* from, T* to)
  function GetCLocale (line 248) | auto inline GetCLocale() noexcept
  function UpperDllName (line 262) | std::string UpperDllName(const char* dll_name, std::size_t expected_length)
  function UpperDllName (line 273) | std::string UpperDllName(const char* dll_name)
  class DllName (line 289) | class DllName
    class FunctionNameImpl (line 292) | class FunctionNameImpl
      method FunctionNameImpl (line 305) | FunctionNameImpl(const std::string& function_name, Handler on_functi...
      method OnFunctionFind (line 311) | void OnFunctionFind(void** pp_found_fuction, void* p_args) const
      method NameString (line 316) | auto NameString() const noexcept
    method DllName (line 334) | DllName(const char* dll_name, std::size_t expected_length, std::initia...
    method NameString (line 356) | auto NameString() const noexcept
    method MatchFunctionPointer (line 362) | auto MatchFunctionPointer(void* found_pointer) const noexcept
  class DllMap (line 376) | class DllMap
    method DllMap (line 382) | DllMap(std::initializer_list<DllName> dll_names)
    method MatchDllName (line 395) | auto MatchDllName(const char* any_case_string) const

FILE: TrafficMonitor/PluginManager.h
  type ITMPlugin (line 7) | typedef ITMPlugin* (*pfTMPluginGetInstance)();
  function class (line 10) | class CPluginManager

FILE: TrafficMonitor/PluginManagerDlg.cpp
  function CString (line 60) | CString CPluginManagerDlg::GetDialogName() const
  function BOOL (line 97) | BOOL CPluginManagerDlg::OnInitDialog()
  function afx_msg (line 335) | afx_msg LRESULT CPluginManagerDlg::OnLinkClicked(WPARAM wParam, LPARAM l...
  function BOOL (line 350) | BOOL CPluginManagerDlg::OnCommand(WPARAM wParam, LPARAM lParam)

FILE: TrafficMonitor/PluginManagerDlg.h
  function class (line 8) | class CPluginManagerDlg : public CBaseDialog

FILE: TrafficMonitor/PluginUpdateHelper.cpp
  function VersionFromString (line 7) | static void VersionFromString(const std::string& version_str, std::vecto...
  function PluginVersion (line 113) | const PluginVersion& CPluginUpdateHelper::GetPluginLatestVersions(const ...

FILE: TrafficMonitor/PluginUpdateHelper.h
  function class (line 3) | class PluginVersion
  function class (line 24) | class CPluginUpdateHelper

FILE: TrafficMonitor/RenderAPISupport.h
  function m_sp_storage (line 103) | CTrackableDevice(const CTrackableDevice&)
  type Storage (line 150) | struct Storage

FILE: TrafficMonitor/SelectConnectionsDlg.cpp
  function CString (line 34) | CString CSelectConnectionsDlg::GetDialogName() const
  function BOOL (line 47) | BOOL CSelectConnectionsDlg::OnInitDialog()

FILE: TrafficMonitor/SelectConnectionsDlg.h
  function class (line 7) | class CSelectConnectionsDlg : public CBaseDialog

FILE: TrafficMonitor/SetItemOrderDlg.cpp
  function DisplayItemSet (line 39) | DisplayItemSet CSetItemOrderDlg::GetDisplayItem() const
  function StringSet (line 49) | const StringSet& CSetItemOrderDlg::GetPluginDisplayItem() const
  function BOOL (line 73) | BOOL CSetItemOrderDlg::OnInitDialog()
  function CString (line 188) | CString CSetItemOrderDlg::GetDialogName() const

FILE: TrafficMonitor/SetItemOrderDlg.h
  function class (line 6) | class CSetItemOrderDlg : public CBaseDialog

FILE: TrafficMonitor/SettingsHelper.h
  function class (line 5) | class CSettingsHelper : public CIniHelper

FILE: TrafficMonitor/SimpleXML.cpp
  function wstring (line 46) | wstring CSimpleXML::GetNode(const wchar_t * node, const wchar_t * parent...
  function wstring (line 52) | wstring CSimpleXML::GetNode(const wchar_t * node) const
  function wstring (line 57) | wstring CSimpleXML::_GetNode(const wchar_t * node, const wstring & content)

FILE: TrafficMonitor/SimpleXML.h
  function class (line 5) | class CSimpleXML

FILE: TrafficMonitor/SkinAutoAdaptSettingDlg.cpp
  function CString (line 32) | CString CSkinAutoAdaptSettingDlg::GetDialogName() const
  function BOOL (line 56) | BOOL CSkinAutoAdaptSettingDlg::OnInitDialog()

FILE: TrafficMonitor/SkinAutoAdaptSettingDlg.h
  function class (line 7) | class CSkinAutoAdaptSettingDlg : public CBaseDialog

FILE: TrafficMonitor/SkinDlg.cpp
  function CString (line 26) | CString CSkinDlg::GetDialogName() const
  function CRect (line 91) | CRect CSkinDlg::CalculateViewRect()
  function BOOL (line 114) | BOOL CSkinDlg::OnInitDialog()
  function afx_msg (line 176) | afx_msg LRESULT CSkinDlg::OnLinkClicked(WPARAM wParam, LPARAM lParam)

FILE: TrafficMonitor/SkinDlg.h
  function class (line 11) | class CSkinDlg : public CBaseDialog

FILE: TrafficMonitor/SkinFile.cpp
  function LayoutItemFromXmlNode (line 23) | static CSkinFile::LayoutItem LayoutItemFromXmlNode(tinyxml2::XMLElement*...
  function string (line 708) | string CSkinFile::GetDisplayItemXmlNodeName(DisplayItem display_item)

FILE: TrafficMonitor/SkinFile.h
  function class (line 7) | class CSkinFile
  type LayoutInfo (line 76) | struct LayoutInfo
  function no_label (line 79) | bool no_label{}
  type PreviewInfo (line 85) | struct PreviewInfo
  function width (line 92) | int width{}
  function height (line 93) | int height{}
  type DrawStr (line 129) | struct DrawStr
  function m_is_png (line 153) | bool m_is_png{}
  function m_alpha (line 156) | int m_alpha{ 255 };     //不透明度,仅当背景为png时有效

FILE: TrafficMonitor/SkinManager.cpp
  function CSkinManager (line 60) | CSkinManager& CSkinManager::Instance()

FILE: TrafficMonitor/SkinManager.h
  function class (line 5) | class CSkinManager

FILE: TrafficMonitor/SpinEdit.cpp
  function BOOL (line 86) | BOOL CSpinEdit::PreTranslateMessage(MSG* pMsg)
  function afx_msg (line 103) | afx_msg LRESULT CSpinEdit::OnTabletQuerysystemgesturestatus(WPARAM wPara...

FILE: TrafficMonitor/SpinEdit.h
  function class (line 8) | class CSpinEdit : public CEdit

FILE: TrafficMonitor/StaticEx.cpp
  function CString (line 34) | CString CStaticEx::GetString() const
  function LRESULT (line 40) | LRESULT CStaticEx::DefWindowProc(UINT message, WPARAM wParam, LPARAM lPa...

FILE: TrafficMonitor/StaticEx.h
  function class (line 8) | class CStaticEx :

FILE: TrafficMonitor/StrTable.cpp
  function LanguageInfoFromIni (line 14) | static void LanguageInfoFromIni(CStrTable::LanguageInfo& language_info, ...
  function BOOL (line 24) | static BOOL CALLBACK EnumResLangProc(HMODULE hModule, LPCTSTR lpType, LP...
  function wstring (line 110) | const wstring& CStrTable::LoadText(const wstring& key) const
  function wstring (line 116) | wstring CStrTable::LoadTextFormat(const wstring& key, const std::initial...
  function wstring (line 122) | const wstring& CStrTable::LoadMenuText(const wstring& key) const
  function wstring (line 128) | const wstring& CStrTable::LoadText(const wstring& key, const wstring& se...
  function wstring (line 171) | const wstring& CStrTable::LoadText(const wstring& key, const std::map<st...
  function wstring (line 181) | wstring CStrTable::LoadTextFormat(const wstring& key, const std::map<std...

FILE: TrafficMonitor/StrTable.h
  function class (line 6) | class CStrTable

FILE: TrafficMonitor/SupportedRenderEnums.h
  function class (line 5) | class CSupportedRenderEnums

FILE: TrafficMonitor/TabDlg.cpp
  function BOOL (line 18) | BOOL CTabDlg::PreTranslateMessage(MSG* pMsg)
  function BOOL (line 40) | BOOL CTabDlg::OnInitDialog()
  function CWnd (line 55) | CWnd* CTabDlg::GetParentWindow()
  function BOOL (line 205) | BOOL CTabDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

FILE: TrafficMonitor/TabDlg.h
  function class (line 5) | class CTabDlg : public CBaseDialog

FILE: TrafficMonitor/TaskBarDlg.cpp
  function CRect (line 625) | const CRect& CTaskBarDlg::GetRectForDpiCheck() const
  function UINT (line 630) | UINT CTaskBarDlg::GetDPI() const
  function UINT (line 640) | UINT CTaskBarDlg::DPI(UINT pixel) const
  function LONG (line 650) | LONG CTaskBarDlg::DPI(LONG pixel) const
  function HWND (line 670) | HWND CTaskBarDlg::FindTaskbarHandle(bool& is_scendary_display)
  function CString (line 698) | CString CTaskBarDlg::GetMouseTipsInfo()
  function BOOL (line 976) | BOOL CTaskBarDlg::OnInitDialog()
  function BOOL (line 1155) | BOOL CTaskBarDlg::PreTranslateMessage(MSG* pMsg)
  function BOOL (line 1255) | BOOL CTaskBarDlg::OnCommand(WPARAM wParam, LPARAM lParam)
  function afx_msg (line 1453) | afx_msg LRESULT CTaskBarDlg::OnExitmenuloop(WPARAM wParam, LPARAM lParam)
  function afx_msg (line 1460) | afx_msg LRESULT CTaskBarDlg::OnTabletQuerysystemgesturestatus(WPARAM wPa...
  function BOOL (line 1466) | BOOL CTaskBarDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

FILE: TrafficMonitor/TaskBarDlg.h
  function class (line 19) | class CTaskBarDlg : public CDialogEx
  type ItemWidth (line 110) | struct ItemWidth
  function value_width (line 113) | int value_width{}
  function CommonDisplayItem (line 126) | struct ItemWidthInfo : public CommonDisplayItem
  function m_error_code (line 147) | int m_error_code{}
  function m_is_width_changed (line 150) | bool m_is_width_changed{ false };

FILE: TrafficMonitor/TaskBarDlgDrawCommon.cpp
  type ReturnValueVerifier (line 15) | struct ReturnValueVerifier
    method Verify (line 17) | static bool Verify(T value) noexcept
    method Verify (line 29) | static bool Verify(T value, Cleaner&& cleaner) noexcept(noexcept(clean...
    method Verify (line 42) | static bool Verify(T value, Cleaner&& cleaner, Func&& do_before_clean)
  function LogWin32ApiErrorMessage (line 64) | void LogWin32ApiErrorMessage(DWORD error_code) noexcept
  function HDC (line 154) | HDC DrawCommonHelper::Get1x1AlphaEqual1DC()
  class CD2D1BitmapCache (line 707) | class CD2D1BitmapCache
  class CD2D1BitmapCache (line 1091) | class CD2D1BitmapCache
  type TaskBarDlgUser32DrawTextHook (line 1150) | namespace TaskBarDlgUser32DrawTextHook
    type Details (line 1152) | namespace Details
      function GetArgb32BitmapInfo (line 1154) | auto GetArgb32BitmapInfo(CRect rect) noexcept
      function GetArgb32BitmapInfo (line 1162) | auto GetArgb32BitmapInfo(LONG width, LONG height) noexcept
      function ReplacedDrawTextCommon (line 1178) | int ReplacedDrawTextCommon(const CDrawTextReplacedFunction<DrawTextF...
    class EnableAllReplaceFunctionGuard (line 1390) | class EnableAllReplaceFunctionGuard

FILE: TrafficMonitor/TaskBarDlgDrawCommon.h
  function namespace (line 21) | namespace DrawCommonHelper
  function CompareEqOr (line 43) | constexpr static bool CompareEqOr(const HRESULT input)
  function class (line 85) | class DefaultD2DDrawCommonExceptionHandler
  function class (line 126) | class CTaskBarDlgDrawCommonSupport
  function m_is_p_device1_recreated (line 196) | bool m_is_p_device1_recreated{false};
  function class (line 216) | class CDWriteHelper
  function CDWriteHelper (line 236) | CDWriteHelper m_dwrite_helper{}
  function DWORD (line 238) | DWORD m_update_layered_window_error_code{0}
  function GetRawPsDotLikeStyle (line 258) | auto GetTextFormat() noexcept
  type Cache (line 676) | struct Cache
  type HeapData (line 683) | struct HeapData
  function CD2D1DeviceContextWindowSupport (line 764) | CD2D1DeviceContextWindowSupport* m_p_d2d1_device_context_support{nullptr};
  function COLORREF (line 780) | COLORREF m_text_color{}
  function IDrawBuffer (line 829) | auto GetD3D10Device1RecreateRequester()
  function class (line 867) | class CTaskBarDlgDrawBufferUseDComposition : public IDrawBuffer

FILE: TrafficMonitor/TaskBarSettingsDlg.cpp
  function BOOL (line 281) | BOOL CTaskBarSettingsDlg::OnInitDialog()
  function BOOL (line 515) | BOOL CTaskBarSettingsDlg::PreTranslateMessage(MSG* pMsg)
  function afx_msg (line 600) | afx_msg LRESULT CTaskBarSettingsDlg::OnStaticClicked(WPARAM wParam, LPAR...
  function BOOL (line 883) | BOOL CTaskBarSettingsDlg::OnCommand(WPARAM wParam, LPARAM lParam)

FILE: TrafficMonitor/TaskBarSettingsDlg.h
  function class (line 11) | class CTaskBarSettingsDlg : public CTabDlg

FILE: TrafficMonitor/TaskbarColorDlg.cpp
  function CString (line 24) | CString CTaskbarColorDlg::GetDialogName() const
  function BOOL (line 44) | BOOL CTaskbarColorDlg::OnInitDialog()

FILE: TrafficMonitor/TaskbarColorDlg.h
  function class (line 9) | class CTaskbarColorDlg : public CBaseDialog

FILE: TrafficMonitor/TaskbarDefaultStyle.h
  function class (line 8) | class CTaskbarDefaultStyle

FILE: TrafficMonitor/TaskbarHelper.cpp
  type MonitorInfo (line 6) | struct MonitorInfo
  type TaskbarInfo (line 13) | struct TaskbarInfo
  function BOOL (line 23) | static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, ...
  function BOOL (line 36) | static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
  function CompareTaskbarByMonitorOrder (line 54) | static bool CompareTaskbarByMonitorOrder(const TaskbarInfo& a, const Tas...

FILE: TrafficMonitor/TaskbarHelper.h
  function class (line 3) | class CTaskbarHelper

FILE: TrafficMonitor/TaskbarItemOrderHelper.cpp
  function CString (line 81) | CString CTaskbarItemOrderHelper::GetItemDisplayName(CommonDisplayItem item)

FILE: TrafficMonitor/TaskbarItemOrderHelper.h
  function class (line 4) | class CTaskbarItemOrderHelper

FILE: TrafficMonitor/Test.cpp
  function TestHttpQequest (line 11) | static void TestHttpQequest()
  function TestGetLicense (line 18) | static void TestGetLicense()
  function TestSkin (line 33) | static void TestSkin()
  function TestCrash (line 40) | static void TestCrash()
  function TestPlugin (line 48) | static void TestPlugin()
  function TestDate (line 56) | static void TestDate()
  function TestIni (line 66) | static void TestIni()
  function TestPluginVersion (line 74) | static void TestPluginVersion()

FILE: TrafficMonitor/Test.h
  function class (line 2) | class CTest

FILE: TrafficMonitor/TinyXml2Helper.h
  function class (line 6) | class CTinyXml2Helper

FILE: TrafficMonitor/TrafficMonitor.cpp
  function UINT (line 617) | UINT CTrafficMonitorApp::CheckUpdateThreadFunc(LPVOID lpParam)
  function UINT (line 631) | UINT CTrafficMonitorApp::InitOpenHardwareMonitorLibThreadFunc(LPVOID lpP...
  function CString (line 744) | CString CTrafficMonitorApp::GetSystemInfoString()
  function HICON (line 874) | HICON CTrafficMonitorApp::GetMenuIcon(UINT id)
  function BOOL (line 918) | BOOL CTrafficMonitorApp::InitInstance()
  function wchar_t (line 1396) | const wchar_t* CTrafficMonitorApp::GetVersion()
  function wchar_t (line 1422) | const wchar_t* CTrafficMonitorApp::GetMonitorValueString(MonitorItem ite...
  function wchar_t (line 1469) | const wchar_t* CTrafficMonitorApp::GetPluginConfigDir() const
  function wchar_t (line 1495) | const wchar_t* CTrafficMonitorApp::GetStringRes(const wchar_t* key, cons...

FILE: TrafficMonitor/TrafficMonitor.h
  function m_in_speed (line 48) | unsigned __int64 m_in_speed{}
  function m_out_speed (line 49) | unsigned __int64 m_out_speed{}
  function m_used_memory (line 52) | int m_used_memory{}
  function m_total_memory (line 53) | int m_total_memory{}
  function m_today_up_traffic (line 62) | unsigned __int64 m_today_up_traffic{}
  function m_today_down_traffic (line 63) | unsigned __int64 m_today_down_traffic{}
  function m_debug_log (line 77) | bool m_debug_log{}
  function m_taksbar_transparent_color_enable (line 78) | bool m_taksbar_transparent_color_enable{}
  function m_last_light_mode (line 79) | bool m_last_light_mode{}
  function m_show_mouse_panetrate_tip (line 80) | bool m_show_mouse_panetrate_tip{}
  function m_show_dot_net_notinstalled_tip (line 81) | bool m_show_dot_net_notinstalled_tip{}
  function SetDPI (line 125) | void SetDPI(int dpi) { m_dpi = dpi; }
  function GetThemeColor (line 172) | virtual unsigned int GetThemeColor() const override;
  function ULONG_PTR (line 185) | ULONG_PTR m_gdiplusToken{}
  function COLORREF (line 188) | COLORREF m_theme_color{}

FILE: TrafficMonitor/TrafficMonitorDlg.cpp
  function CTaskBarDlg (line 53) | CTaskBarDlg* CTrafficMonitorDlg::GetTaskbarWindow() const
  function CTrafficMonitorDlg (line 61) | CTrafficMonitorDlg* CTrafficMonitorDlg::Instance()
  function CString (line 133) | CString CTrafficMonitorDlg::GetMouseTipsInfo()
  function POINT (line 279) | POINT CTrafficMonitorDlg::CalculateWindowMoveOffset(CRect rect, bool scr...
  function MIB_IFROW (line 487) | MIB_IFROW CTrafficMonitorDlg::GetConnectIfTable(int connection_index)
  function NetWorkConection (line 498) | NetWorkConection CTrafficMonitorDlg::GetConnection(int connection_index)
  function BOOL (line 1038) | BOOL CTrafficMonitorDlg::OnInitDialog()
  function HCURSOR (line 1156) | HCURSOR CTrafficMonitorDlg::OnQueryDragIcon()
  function GetMonitorTimerCount (line 1162) | static int GetMonitorTimerCount(int second)
  function UINT (line 1543) | UINT CTrafficMonitorDlg::MonitorThreadCallback(LPVOID dwUser)
  function BOOL (line 2169) | BOOL CTrafficMonitorDlg::OnCommand(WPARAM wParam, LPARAM lParam)
  function BOOL (line 2278) | BOOL CTrafficMonitorDlg::PreTranslateMessage(MSG* pMsg)
  function afx_msg (line 2333) | afx_msg LRESULT CTrafficMonitorDlg::OnNotifyIcon(WPARAM wParam, LPARAM l...
  function LRESULT (line 2553) | LRESULT CTrafficMonitorDlg::OnTaskBarCreated(WPARAM wParam, LPARAM lParam)
  function afx_msg (line 2687) | afx_msg LRESULT CTrafficMonitorDlg::OnExitmenuloop(WPARAM wParam, LPARAM...
  function afx_msg (line 2731) | afx_msg LRESULT CTrafficMonitorDlg::OnTaskbarMenuPopedUp(WPARAM wParam, ...
  function BOOL (line 2764) | BOOL CTrafficMonitorDlg::OnQueryEndSession()
  function afx_msg (line 2793) | afx_msg LRESULT CTrafficMonitorDlg::OnDpichanged(WPARAM wParam, LPARAM l...
  function afx_msg (line 2834) | afx_msg LRESULT CTrafficMonitorDlg::OnTaskbarWndClosed(WPARAM wParam, LP...
  function afx_msg (line 2848) | afx_msg LRESULT CTrafficMonitorDlg::OnMonitorInfoUpdated(WPARAM wParam, ...
  function LRESULT (line 2866) | LRESULT CTrafficMonitorDlg::OnDisplaychange(WPARAM wParam, LPARAM lParam)
  function LRESULT (line 2890) | LRESULT CTrafficMonitorDlg::OnReopenTaksbarWnd(WPARAM wParam, LPARAM lPa...
  function afx_msg (line 2904) | afx_msg LRESULT CTrafficMonitorDlg::OnSettingsApplied(WPARAM wParam, LPA...
  function afx_msg (line 2960) | afx_msg LRESULT CTrafficMonitorDlg::OnTabletQuerysystemgesturestatus(WPA...
  function UINT (line 3039) | UINT CTrafficMonitorDlg::OnPowerBroadcast(UINT nPowerEvent, LPARAM nEven...

FILE: TrafficMonitor/TrafficMonitorDlg.h
  function CTaskBarDlg (line 58) | CTaskBarDlg* m_tBarDlg{}
  function DWORD (line 62) | DWORD m_dwSize{}
  function m_connection_selected (line 63) | int m_connection_selected{ 0 }
  function m_in_bytes (line 64) | unsigned __int64 m_in_bytes{}
  function m_out_bytes (line 65) | unsigned __int64 m_out_bytes{}
  function m_last_in_bytes (line 66) | unsigned __int64 m_last_in_bytes{}
  function m_last_out_bytes (line 67) | unsigned __int64 m_last_out_bytes{}
  function m_get_disk_usage_by_pdh (line 74) | bool m_get_disk_usage_by_pdh{}
  function m_first_start (line 76) | bool m_first_start{ true };     //初始时为true,在定时器第一次启动后置为flase
  function m_timer_cnt (line 108) | unsigned int m_timer_cnt{}
  function m_taskbar_timer_cnt (line 109) | unsigned int m_taskbar_timer_cnt{0}
  function m_monitor_time_cnt (line 110) | unsigned int m_monitor_time_cnt{}
  function m_zero_speed_cnt (line 111) | int m_zero_speed_cnt{}
  function m_insert_to_taskbar_cnt (line 112) | int m_insert_to_taskbar_cnt{}
  function m_skin_selected (line 117) | int m_skin_selected{}
  function m_is_thread_exit (line 135) | bool m_is_thread_exit{ false }; //线程退出标志

FILE: TrafficMonitor/UpdateHelper.h
  function class (line 2) | class CUpdateHelper

FILE: TrafficMonitor/WIC.cpp
  function HRESULT (line 46) | HRESULT CMenuIcon::AddIconToMenuItem(HMENU hmenu, int iMenuItem, BOOL fB...
  function HRESULT (line 67) | HRESULT CMenuIcon::AddBitmapToMenuItem(HMENU hmenu, int iItem, BOOL fByP...
  function HRESULT (line 94) | HRESULT CMenuIcon::Create32BitHBITMAP(HDC hdc, const SIZE * psize, void ...
  function HRESULT (line 113) | HRESULT CMenuIcon::GetBitmapByIcon(HICON hicon, HBITMAP& hbmp)

FILE: TrafficMonitor/WIC.h
  function class (line 7) | class CWICFactory
  function class (line 23) | class CMenuIcon

FILE: TrafficMonitor/Win11TaskbarDlg.cpp
  function HWND (line 100) | HWND CWin11TaskbarDlg::GetParentHwnd()

FILE: TrafficMonitor/Win11TaskbarDlg.h
  function class (line 3) | class CWin11TaskbarDlg :

FILE: TrafficMonitor/Win11TaskbarSettingDlg.cpp
  function CString (line 35) | CString CWin11TaskbarSettingDlg::GetDialogName() const
  function BOOL (line 75) | BOOL CWin11TaskbarSettingDlg::OnInitDialog()

FILE: TrafficMonitor/Win11TaskbarSettingDlg.h
  function class (line 8) | class CWin11TaskbarSettingDlg : public CBaseDialog

FILE: TrafficMonitor/WinVersionHelper.h
  function class (line 2) | class CWinVersionHelper

FILE: TrafficMonitor/WindowsSettingHelper.cpp
  function LONG (line 68) | LONG CWindowsSettingHelper::GetDWORDRegKeyData(HKEY hKey, const wstring&...

FILE: TrafficMonitor/WindowsSettingHelper.h
  function class (line 2) | class CWindowsSettingHelper

FILE: TrafficMonitor/WindowsWebExperienceDetector.h
  function class (line 3) | class WindowsWebExperienceDetector

FILE: TrafficMonitor/WineTaskbarDlg.cpp
  function HWND (line 31) | HWND CWineTaskbarDlg::GetParentHwnd()

FILE: TrafficMonitor/WineTaskbarDlg.h
  function class (line 3) | class CWineTaskbarDlg :

FILE: TrafficMonitor/auto_start_helper.cpp
  function create_auto_start_task_for_this_user (line 36) | bool create_auto_start_task_for_this_user(bool runElevated)
  function delete_auto_start_task_for_this_user (line 264) | bool delete_auto_start_task_for_this_user()
  function is_auto_start_task_active_for_this_user (line 329) | bool is_auto_start_task_active_for_this_user(std::wstring* path)

FILE: TrafficMonitor/crashtool.cpp
  class CCrashReport (line 14) | class CCrashReport
    method CCrashReport (line 17) | CCrashReport()
    method CreateMiniDump (line 24) | void CreateMiniDump(EXCEPTION_POINTERS* pEP)
    method GetModulePath (line 52) | std::wstring GetModulePath(DWORD64 address)
    method GetStackTrace (line 68) | std::wstring GetStackTrace(EXCEPTION_POINTERS* pExceptionInfo)
    method ShowCrashInfo (line 143) | void ShowCrashInfo(EXCEPTION_POINTERS* pEP)
    method GetAppPath (line 171) | void GetAppPath()
  type CRASHREPORT (line 200) | namespace CRASHREPORT
    function LONG (line 202) | static LONG WINAPI __UnhandledExceptionFilter(PEXCEPTION_POINTERS pEP)
    function StartCrashReport (line 211) | void StartCrashReport()

FILE: TrafficMonitor/crashtool.h
  function namespace (line 3) | namespace CRASHREPORT

FILE: TrafficMonitor/tinyxml2/tinyxml2.cpp
  function TIXML_SNPRINTF (line 44) | static inline int TIXML_SNPRINTF( char* buffer, size_t size, const char*...
  function TIXML_VSNPRINTF (line 53) | static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char...
  function TIXML_VSCPRINTF (line 71) | static inline int TIXML_VSCPRINTF( const char* format, va_list va )
  function TIXML_VSCPRINTF (line 94) | static inline int TIXML_VSCPRINTF( const char* format, va_list va )
  type tinyxml2 (line 133) | namespace tinyxml2
    type Entity (line 136) | struct Entity {
    function XMLNode (line 817) | XMLNode* XMLNode::DeepClone(XMLDocument* target) const
    function XMLNode (line 877) | XMLNode* XMLNode::InsertEndChild( XMLNode* addThis )
    function XMLNode (line 907) | XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis )
    function XMLNode (line 938) | XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addTh...
    function XMLElement (line 976) | const XMLElement* XMLNode::FirstChildElement( const char* name ) const
    function XMLElement (line 988) | const XMLElement* XMLNode::LastChildElement( const char* name ) const
    function XMLElement (line 1000) | const XMLElement* XMLNode::NextSiblingElement( const char* name ) const
    function XMLElement (line 1012) | const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) ...
    function XMLElement (line 1167) | const XMLElement* XMLNode::ToElementWithName( const char* name ) const
    function XMLNode (line 1210) | XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const
    function XMLNode (line 1259) | XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const
    function XMLNode (line 1308) | XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const
    function XMLNode (line 1356) | XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const
    function XMLError (line 1426) | XMLError XMLAttribute::QueryIntValue( int* value ) const
    function XMLError (line 1435) | XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const
    function XMLError (line 1444) | XMLError XMLAttribute::QueryInt64Value(int64_t* value) const
    function XMLError (line 1453) | XMLError XMLAttribute::QueryUnsigned64Value(uint64_t* value) const
    function XMLError (line 1462) | XMLError XMLAttribute::QueryBoolValue( bool* value ) const
    function XMLError (line 1471) | XMLError XMLAttribute::QueryFloatValue( float* value ) const
    function XMLError (line 1480) | XMLError XMLAttribute::QueryDoubleValue( double* value ) const
    function XMLAttribute (line 1566) | const XMLAttribute* XMLElement::FindAttribute( const char* name ) const
    function XMLError (line 1712) | XMLError XMLElement::QueryIntText( int* ival ) const
    function XMLError (line 1725) | XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const
    function XMLError (line 1738) | XMLError XMLElement::QueryInt64Text(int64_t* ival) const
    function XMLError (line 1751) | XMLError XMLElement::QueryUnsigned64Text(uint64_t* ival) const
    function XMLError (line 1764) | XMLError XMLElement::QueryBoolText( bool* bval ) const
    function XMLError (line 1777) | XMLError XMLElement::QueryDoubleText( double* dval ) const
    function XMLError (line 1790) | XMLError XMLElement::QueryFloatText( float* fval ) const
    function XMLAttribute (line 1852) | XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name )
    function XMLAttribute (line 1968) | XMLAttribute* XMLElement::CreateAttribute()
    function XMLElement (line 1979) | XMLElement* XMLElement::InsertNewChildElement(const char* name)
    function XMLComment (line 1985) | XMLComment* XMLElement::InsertNewComment(const char* comment)
    function XMLText (line 1991) | XMLText* XMLElement::InsertNewText(const char* text)
    function XMLDeclaration (line 1997) | XMLDeclaration* XMLElement::InsertNewDeclaration(const char* text)
    function XMLUnknown (line 2003) | XMLUnknown* XMLElement::InsertNewUnknown(const char* text)
    function XMLNode (line 2044) | XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const
    function XMLElement (line 2211) | XMLElement* XMLDocument::NewElement( const char* name )
    function XMLComment (line 2219) | XMLComment* XMLDocument::NewComment( const char* str )
    function XMLText (line 2227) | XMLText* XMLDocument::NewText( const char* str )
    function XMLDeclaration (line 2235) | XMLDeclaration* XMLDocument::NewDeclaration( const char* str )
    function XMLUnknown (line 2243) | XMLUnknown* XMLDocument::NewUnknown( const char* str )
    function FILE (line 2250) | static FILE* callfopen( const char* filepath, const char* mode )
    function XMLError (line 2284) | XMLError XMLDocument::LoadFile( const char* filename )
    function XMLError (line 2303) | XMLError XMLDocument::LoadFile( FILE* fp )
    function XMLError (line 2357) | XMLError XMLDocument::SaveFile( const char* filename, bool compact )
    function XMLError (line 2376) | XMLError XMLDocument::SaveFile( FILE* fp, bool compact )
    function XMLError (line 2387) | XMLError XMLDocument::Parse( const char* p, size_t len )

FILE: TrafficMonitor/tinyxml2/tinyxml2.h
  function namespace (line 116) | namespace tinyxml2
  function class (line 673) | class TINYXML2_LIB XMLNode
  function XMLDocument (line 685) | XMLDocument* GetDocument()				{
  function virtual (line 691) | virtual XMLElement*		ToElement()		{
  function virtual (line 695) | virtual XMLText*		ToText()		{
  function virtual (line 699) | virtual XMLComment*		ToComment()		{
  function virtual (line 703) | virtual XMLDocument*	ToDocument()	{
  function virtual (line 707) | virtual XMLDeclaration*	ToDeclaration()	{
  function virtual (line 711) | virtual XMLUnknown*		ToUnknown()		{
  function virtual (line 715) | virtual const XMLElement*		ToElement() const		{
  function virtual (line 718) | virtual const XMLText*			ToText() const			{
  function virtual (line 721) | virtual const XMLComment*		ToComment() const		{
  function virtual (line 724) | virtual const XMLDocument*		ToDocument() const		{
  function virtual (line 727) | virtual const XMLDeclaration*	ToDeclaration() const	{
  function virtual (line 730) | virtual const XMLUnknown*		ToUnknown() const		{
  function XMLNode (line 754) | const XMLNode*	Parent() const			{
  function XMLNode (line 758) | XMLNode* Parent()						{
  function XMLNode (line 768) | const XMLNode*  FirstChild() const		{
  function XMLNode (line 772) | XMLNode*		FirstChild()			{
  function XMLNode (line 786) | const XMLNode*	LastChild() const						{
  function XMLNode (line 790) | XMLNode*		LastChild()								{
  function XMLNode (line 804) | const XMLNode*	PreviousSibling() const					{
  function XMLNode (line 808) | XMLNode*	PreviousSibling()							{
  function XMLNode (line 820) | const XMLNode*	NextSibling() const						{
  function XMLNode (line 824) | XMLNode*	NextSibling()								{
  function XMLNode (line 844) | XMLNode* LinkEndChild( XMLNode* addThis )	{
  function SetUserData (line 938) | void SetUserData(void* userData)	{ _userData = userData; }
  function virtual (line 996) | virtual XMLText* ToText()			{
  function virtual (line 999) | virtual const XMLText* ToText() const	{
  function SetCData (line 1004) | void SetCData( bool isCData )			{
  function virtual (line 1017) | virtual ~XMLText()												{}
  function virtual (line 1037) | virtual const XMLComment* ToComment() const		{
  function virtual (line 1076) | virtual const XMLDeclaration* ToDeclaration() const		{
  function virtual (line 1111) | virtual const XMLUnknown* ToUnknown() const		{
  function class (line 1139) | class TINYXML2_LIB XMLAttribute
  type Whitespace (line 1704) | enum Whitespace {
  function virtual (line 1730) | virtual XMLDocument* ToDocument()				{
  function virtual (line 1734) | virtual const XMLDocument* ToDocument() const	{
  function SetBOM (line 1802) | void SetBOM( bool useBOM ) {
  function XMLElement (line 1809) | XMLElement* RootElement()				{
  function XMLElement (line 1812) | const XMLElement* RootElement() const	{
  function ClearError (line 1876) | void ClearError() {
  function PrintError (line 1897) | void PrintError() const;
  function virtual (line 1926) | virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const	{
  function class (line 1965) | class DepthTracker {
  function class (line 2052) | class TINYXML2_LIB XMLHandle
  function XMLHandle (line 2079) | XMLHandle LastChild()													{
  function XMLHandle (line 2087) | XMLHandle PreviousSibling()												{
  function XMLHandle (line 2095) | XMLHandle NextSibling()													{
  function XMLNode (line 2104) | XMLNode* ToNode()							{
  function XMLElement (line 2108) | XMLElement* ToElement() 					{
  function XMLText (line 2112) | XMLText* ToText() 							{
  function XMLUnknown (line 2116) | XMLUnknown* ToUnknown() 					{
  function XMLDeclaration (line 2120) | XMLDeclaration* ToDeclaration() 			{
  function class (line 2133) | class TINYXML2_LIB XMLConstHandle
  function XMLNode (line 2174) | const XMLNode* ToNode() const				{
  function XMLElement (line 2177) | const XMLElement* ToElement() const			{
  function XMLText (line 2180) | const XMLText* ToText() const				{
  function XMLUnknown (line 2183) | const XMLUnknown* ToUnknown() const			{
  function XMLDeclaration (line 2186) | const XMLDeclaration* ToDeclaration() const	{
  function virtual (line 2247) | virtual ~XMLPrinter()	{}
  function virtual (line 2290) | virtual bool VisitExit( const XMLDocument& /*doc*/ )			{
  function Write (line 2338) | inline void Write(const char* data) { Write(data, strlen(data)); }

FILE: include/OpenHardwareMonitor/OpenHardwareMonitorApi.h
  function namespace (line 7) | namespace OpenHardwareMonitorApi

FILE: include/PluginInterface.h
  function class (line 9) | class IPluginItem
  function class (line 158) | class ITMPlugin
  function virtual (line 236) | virtual void OnMonitorInfo(const MonitorInfo& monitor_info) {}
  function virtual (line 241) | virtual const wchar_t* GetTooltipInfo() { return L""; }
  type ExtendedInfoIndex (line 243) | enum ExtendedInfoIndex
  function virtual (line 276) | virtual void OnExtenedInfo(ExtendedInfoIndex index, const wchar_t* data) {}
  function virtual (line 281) | virtual void* GetPluginIcon() { return nullptr; }
  function virtual (line 287) | virtual int GetCommandCount() { return 0; }
  function virtual (line 294) | virtual const wchar_t* GetCommandName(int command_index) { return nullpt...
  function virtual (line 301) | virtual void* GetCommandIcon(int command_index) { return nullptr; }
  function virtual (line 309) | virtual void OnPluginCommand(int command_index, void* hWnd, void* para) {}
  function virtual (line 316) | virtual int IsCommandChecked(int command_index) { return false; }
  function virtual (line 323) | virtual void OnInitialize(ITrafficMonitor* pApp) {}
  function class (line 329) | class ITrafficMonitor
Condensed preview — 279 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,044K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/BugReport_en.yaml",
    "chars": 1395,
    "preview": "name: Bug Report\ndescription: File a bug report\nbody:\n  - type: checkboxes\n    attributes: \n      label: Prerequisites\n "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/BugReport_zh.yaml",
    "chars": 1019,
    "preview": "name: Bug反馈\ndescription: 提交Bug反馈\nbody:\n  - type: checkboxes\n    attributes: \n      label: 前置条件\n      options:\n        - "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/FeatureRequest_en.yaml",
    "chars": 1100,
    "preview": "name: Feature Request\ndescription: File a feature request\nbody:\n  - type: checkboxes\n    attributes: \n      label: Prere"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/FeatureRequest_zh.yaml",
    "chars": 780,
    "preview": "name: 功能请求\ndescription: 请求一个新功能\nbody:\n  - type: checkboxes\n    attributes: \n      label: 前置条件\n      options:\n        - l"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 28,
    "preview": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 3660,
    "preview": "name: Release CI\non: push\njobs:\n\n  x64_build:\n    runs-on: windows-latest\n\n    steps:\n    - uses: actions/checkout@v3\n  "
  },
  {
    "path": ".gitignore",
    "chars": 5070,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "Help.md",
    "chars": 8058,
    "preview": "**简体中文 | [English](./Help_en-us.md)**\n\n## TrafficMonitor 常见问题\n这里是关于TrafficMonitor常见问题的页面,如果你想查看关于TrafficMonitor的各项功能和使用方"
  },
  {
    "path": "Help_en-us.md",
    "chars": 17142,
    "preview": "**[简体中文](./Help.md) | English**\n\n# TrafficMonitor Frequently Asked Questions\nThis is the page about the Frequently Asked"
  },
  {
    "path": "LICENSE",
    "chars": 2605,
    "preview": "Copyright (c) <2019> <copyright zhongyang219>\n\n\"Anti 996\" License Version 1.0 (Draft)\n\nPermission is hereby granted to a"
  },
  {
    "path": "LICENSE_CN",
    "chars": 725,
    "preview": "版权所有(c)<2019> <copyright zhongyang219>\n\n反996许可证版本1.0\n\n在符合下列条件的情况下,特此免费向任何得到本授权作品的副本(包括源代码、文件和/或相关内容,以\n下统称为“授权作品”)的个人和法人实"
  },
  {
    "path": "OpenHardwareMonitorApi/LibreHardwareMonitorLib.xml",
    "chars": 119666,
    "preview": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>LibreHardwareMonitorLib</name>\n    </assembly>\n    <members>\n  "
  },
  {
    "path": "OpenHardwareMonitorApi/OpenHardwareMonitorApi.vcxproj",
    "chars": 11644,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "OpenHardwareMonitorApi/OpenHardwareMonitorApi.vcxproj.filters",
    "chars": 1890,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "OpenHardwareMonitorApi/OpenHardwareMonitorImp.cpp",
    "chars": 13590,
    "preview": "// 这是主 DLL 文件。\n\n#include \"stdafx.h\"\n\n#include \"OpenHardwareMonitorImp.h\"\n#include <vector>\n\nnamespace OpenHardwareMonit"
  },
  {
    "path": "OpenHardwareMonitorApi/OpenHardwareMonitorImp.h",
    "chars": 3119,
    "preview": "// OpenHardwareMonitorApi.h\n\n#pragma once\n#include <string>\n#include \"OpenHardwareMonitor/OpenHardwareMonitorApi.h\"\n#in"
  },
  {
    "path": "OpenHardwareMonitorApi/ReadMe.txt",
    "chars": 1635,
    "preview": "========================================================================\n    DYNAMIC LINK LIBRARY : OpenHardwareMonitorA"
  },
  {
    "path": "OpenHardwareMonitorApi/Stdafx.cpp",
    "chars": 94,
    "preview": "// stdafx.cpp : ֻ׼ļԴļ\n// OpenHardwareMonitorApi.pch ΪԤͷ\n// stdafx.obj ԤϢ\n\n#include \"stdafx.h\"\n"
  },
  {
    "path": "OpenHardwareMonitorApi/Stdafx.h",
    "chars": 53,
    "preview": "// stdafx.h : ׼ϵͳļİļ\n// Ǿʹõĵ\n// ضĿİļ\n\n#pragma once\n\n\n"
  },
  {
    "path": "OpenHardwareMonitorApi/UpdateVisitor.cpp",
    "chars": 563,
    "preview": "#include \"stdafx.h\"\n#include \"UpdateVisitor.h\"\n\nnamespace OpenHardwareMonitorApi\n{\n    void UpdateVisitor::VisitCompute"
  },
  {
    "path": "OpenHardwareMonitorApi/UpdateVisitor.h",
    "chars": 398,
    "preview": "#pragma once\n\nusing namespace LibreHardwareMonitor::Hardware;\n\nnamespace OpenHardwareMonitorApi\n{\n    public ref class "
  },
  {
    "path": "OpenHardwareMonitorApi/resource.h",
    "chars": 88,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by app.rc\n"
  },
  {
    "path": "PluginDemo/CustomDrawItem.cpp",
    "chars": 2504,
    "preview": "#include \"pch.h\"\n#include \"CustomDrawItem.h\"\n#include \"DataManager.h\"\n\nconst wchar_t* CCustomDrawItem::GetItemName() co"
  },
  {
    "path": "PluginDemo/CustomDrawItem.h",
    "chars": 607,
    "preview": "#pragma once\n#include \"PluginInterface.h\"\n\nclass CCustomDrawItem : public IPluginItem\n{\n    // 通过 IPluginItem 继承\n    vi"
  },
  {
    "path": "PluginDemo/DataManager.cpp",
    "chars": 1888,
    "preview": "#include \"pch.h\"\n#include \"DataManager.h\"\n\nCDataManager CDataManager::m_instance;\n\nCDataManager::CDataManager()\n{\n}\n\nCD"
  },
  {
    "path": "PluginDemo/DataManager.h",
    "chars": 684,
    "preview": "#pragma once\n#include <string>\n#include <map>\n\n#define g_data CDataManager::Instance()\n\nstruct SettingData\n{\n    bool s"
  },
  {
    "path": "PluginDemo/OptionsDlg.cpp",
    "chars": 1078,
    "preview": "// OptionsDlg.cpp: 实现文件\n//\n\n#include \"pch.h\"\n#include \"PluginDemo.h\"\n#include \"OptionsDlg.h\"\n#include \"afxdialogex.h\"\n\n"
  },
  {
    "path": "PluginDemo/OptionsDlg.h",
    "chars": 507,
    "preview": "#pragma once\n#include \"DataManager.h\"\n\n// COptionsDlg 对话框\n\nclass COptionsDlg : public CDialog\n{\n\tDECLARE_DYNAMIC(COptio"
  },
  {
    "path": "PluginDemo/PluginDemo.cpp",
    "chars": 2858,
    "preview": "#include \"pch.h\"\n#include \"PluginDemo.h\"\n#include \"DataManager.h\"\n#include \"OptionsDlg.h\"\n\nCPluginDemo CPluginDemo::m_i"
  },
  {
    "path": "PluginDemo/PluginDemo.h",
    "chars": 972,
    "preview": "#pragma once\n#include \"PluginInterface.h\"\n#include \"PluginSystemDate.h\"\n#include \"PluginSystemTime.h\"\n#include \"CustomD"
  },
  {
    "path": "PluginDemo/PluginDemo.rc",
    "chars": 5336,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "PluginDemo/PluginDemo.vcxproj",
    "chars": 14095,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
  },
  {
    "path": "PluginDemo/PluginDemo.vcxproj.filters",
    "chars": 2451,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "PluginDemo/PluginSystemDate.cpp",
    "chars": 670,
    "preview": "#include \"pch.h\"\n#include <wchar.h>\n#include \"PluginSystemDate.h\"\n#include \"DataManager.h\"\n\nCPluginSystemDate::CPluginS"
  },
  {
    "path": "PluginDemo/PluginSystemDate.h",
    "chars": 467,
    "preview": "#pragma once\n#include \"PluginInterface.h\"\n\nclass CPluginSystemDate : public IPluginItem\n{\npublic:\n    CPluginSystemDate"
  },
  {
    "path": "PluginDemo/PluginSystemTime.cpp",
    "chars": 999,
    "preview": "#include \"pch.h\"\n#include <wchar.h>\n#include \"PluginSystemTime.h\"\n#include \"DataManager.h\"\n\nCPluginSystemTime::CPluginS"
  },
  {
    "path": "PluginDemo/PluginSystemTime.h",
    "chars": 597,
    "preview": "#pragma once\n#include \"PluginInterface.h\"\n\nclass CPluginSystemTime : public IPluginItem\n{\npublic:\n    CPluginSystemTime"
  },
  {
    "path": "PluginDemo/framework.h",
    "chars": 939,
    "preview": "#pragma once\n\n#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容\n//// Windows 头文件\n//#include <windows.h"
  },
  {
    "path": "PluginDemo/pch.cpp",
    "chars": 75,
    "preview": "// pch.cpp: 与预编译标头对应的源文件\n\n#include \"pch.h\"\n\n// 当使用预编译的头时,需要使用此源文件,编译才能成功。\n"
  },
  {
    "path": "PluginDemo/pch.h",
    "chars": 276,
    "preview": "// pch.h: 这是预编译标头文件。\n// 下方列出的文件仅编译一次,提高了将来生成的生成性能。\n// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。\n// 但是,如果此处列出的文件中的任何一个在生成之间"
  },
  {
    "path": "PluginDemo/resource.h",
    "chars": 774,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ 生成的包含文件。\n// 供 PluginDemo.rc 使用\n//\n#define IDD_DIALOG1                    "
  },
  {
    "path": "README.md",
    "chars": 5275,
    "preview": "**简体中文 | [English](./README_en-us.md)**\n\n[![Badge](https://img.shields.io/badge/link-996.icu-%23FF4D5B.svg?style=flat-sq"
  },
  {
    "path": "README_en-us.md",
    "chars": 10745,
    "preview": "**[简体中文](./README.md) | English**\n\n[![Badge](https://img.shields.io/badge/link-996.icu-%23FF4D5B.svg?style=flat-square)]"
  },
  {
    "path": "TrafficMonitor/AboutDlg.cpp",
    "chars": 9856,
    "preview": "#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"AboutDlg.h\"\n#include \"MessageDlg.h\"\n#include \"DrawCommon.h\"\n\n"
  },
  {
    "path": "TrafficMonitor/AboutDlg.h",
    "chars": 1439,
    "preview": "#pragma once\n#include \"LinkStatic.h\"\n#include \"BaseDialog.h\"\n\n// 用于应用程序“关于”菜单项的 CAboutDlg 对话框\n\nclass CAboutDlg : public"
  },
  {
    "path": "TrafficMonitor/AdapterCommon.cpp",
    "chars": 4890,
    "preview": "#include \"stdafx.h\"\n#include \"AdapterCommon.h\"\n\n\nCAdapterCommon::CAdapterCommon()\n{\n}\n\n\nCAdapterCommon::~CAdapterCommon"
  },
  {
    "path": "TrafficMonitor/AdapterCommon.h",
    "chars": 1047,
    "preview": "#pragma once\n#include \"Common.h\"\n\n//һϢ\nstruct NetWorkConection\n{\n\tint index{};\t\t\t//MIB_IFTABLEе\n\tstring description;\t\t//"
  },
  {
    "path": "TrafficMonitor/AppAlreadyRuningDlg.cpp",
    "chars": 1959,
    "preview": "// AppAlreadyRuningDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"AppAlreadyRuningDlg.h\"\n#"
  },
  {
    "path": "TrafficMonitor/AppAlreadyRuningDlg.h",
    "chars": 859,
    "preview": "#pragma once\n#include \"BaseDialog.h\"\n\n// CAppAlreadyRuningDlg 对话框\n\nclass CAppAlreadyRuningDlg : public CBaseDialog\n{\n  "
  },
  {
    "path": "TrafficMonitor/BaseDialog.cpp",
    "chars": 13835,
    "preview": "// BaseDialog.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"BaseDialog.h\"\n#include \"afxdialogex.h\"\n#include \"IniHelper.h"
  },
  {
    "path": "TrafficMonitor/BaseDialog.h",
    "chars": 3686,
    "preview": "#pragma once\n#include <functional>\n\n// CBaseDialog 对话框\n//用于实现记住对话框大小\n//并将窗口初始大小设置为最小大小\n\nclass CBaseDialog : public CDia"
  },
  {
    "path": "TrafficMonitor/CAutoAdaptSettingsDlg.cpp",
    "chars": 3075,
    "preview": "// CAutoAdaptSettingsDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"CAutoAdaptSettingsDlg."
  },
  {
    "path": "TrafficMonitor/CAutoAdaptSettingsDlg.h",
    "chars": 965,
    "preview": "#pragma once\n#include \"BaseDialog.h\"\n\n// CAutoAdaptSettingsDlg 对话框\n\nclass CAutoAdaptSettingsDlg : public CBaseDialog\n{\n"
  },
  {
    "path": "TrafficMonitor/CMFCColorDialogEx.cpp",
    "chars": 1224,
    "preview": "// CMFCColorDialogEx.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"CMFCColorDialogEx.h\"\n#include \"Common.h\"\n#include \"Tra"
  },
  {
    "path": "TrafficMonitor/CMFCColorDialogEx.h",
    "chars": 393,
    "preview": "#pragma once\n\n\n// CMFCColorDialogEx\n\nclass CMFCColorDialogEx : public CMFCColorDialog\n{\n\t//DECLARE_DYNAMIC(CMFCColorDia"
  },
  {
    "path": "TrafficMonitor/CSkinPreviewView.cpp",
    "chars": 2330,
    "preview": "// CSkinPreviewView.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"CSkinPreviewView.h\"\n\n\n// CS"
  },
  {
    "path": "TrafficMonitor/CSkinPreviewView.h",
    "chars": 792,
    "preview": "#pragma once\n#include \"DrawCommon.h\"\n#include \"SkinFile.h\"\n\n\n// CSkinPreviewView 视图\n\n\nclass CSkinPreviewView : public C"
  },
  {
    "path": "TrafficMonitor/CTabCtrlEx.cpp",
    "chars": 2248,
    "preview": "// CTabCtrlEx.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"CTabCtrlEx.h\"\n\n\n// CTabCtrlEx\n\nIMPLEMENT_DYNAMIC(CTabCtrlEx, "
  },
  {
    "path": "TrafficMonitor/CTabCtrlEx.h",
    "chars": 592,
    "preview": "#pragma once\n\n\n// CTabCtrlEx\n\nclass CTabCtrlEx : public CTabCtrl\n{\n\tDECLARE_DYNAMIC(CTabCtrlEx)\n\npublic:\n\tCTabCtrlEx();\n"
  },
  {
    "path": "TrafficMonitor/CVariant.cpp",
    "chars": 1047,
    "preview": "#include \"stdafx.h\"\n#include \"CVariant.h\"\n\n\nCVariant::CVariant(int value)\n{\n\tm_value_int = value;\n\tm_type = eType::INT;\n"
  },
  {
    "path": "TrafficMonitor/CVariant.h",
    "chars": 392,
    "preview": "#pragma once\nclass CVariant\n{\npublic:\n\tCVariant(int value);\n\tCVariant(size_t value);\n\tCVariant(double value);\n\tCVariant("
  },
  {
    "path": "TrafficMonitor/CalendarHelper.cpp",
    "chars": 1310,
    "preview": "#include \"stdafx.h\"\n#include \"CalendarHelper.h\"\n\n\nCCalendarHelper::CCalendarHelper()\n{\n}\n\n\nCCalendarHelper::~CCalendarHe"
  },
  {
    "path": "TrafficMonitor/CalendarHelper.h",
    "chars": 649,
    "preview": "#pragma once\n#define CALENDAR_WIDTH 7\n#define CALENDAR_HEIGHT 6\n\nstruct DayTraffic\n{\n\tint day;\n\t__int64 up_traffic;\n\t__i"
  },
  {
    "path": "TrafficMonitor/ClassicalTaskbarDlg.cpp",
    "chars": 4372,
    "preview": "#include \"stdafx.h\"\n#include \"ClassicalTaskbarDlg.h\"\n\nvoid CClassicalTaskbarDlg::AdjustTaskbarWndPos(bool force_adjust)"
  },
  {
    "path": "TrafficMonitor/ClassicalTaskbarDlg.h",
    "chars": 784,
    "preview": "#pragma once\n#include \"TaskBarDlg.h\"\nclass CClassicalTaskbarDlg :\n    public CTaskBarDlg\n{\npublic:\n\nprivate:\n    // 通过 "
  },
  {
    "path": "TrafficMonitor/ColorSettingListCtrl.cpp",
    "chars": 3480,
    "preview": "#include \"stdafx.h\"\n#include \"ColorSettingListCtrl.h\"\n\nIMPLEMENT_DYNAMIC(CColorSettingListCtrl, CListCtrl)\n\nCColorSetti"
  },
  {
    "path": "TrafficMonitor/ColorSettingListCtrl.h",
    "chars": 580,
    "preview": "#pragma once\n#include \"afxcmn.h\"\n#include \"DrawCommon.h\"\nclass CColorSettingListCtrl :\n\tpublic CListCtrl\n{\nDECLARE_DYNAM"
  },
  {
    "path": "TrafficMonitor/ColorStatic.cpp",
    "chars": 4566,
    "preview": "// ColorStatic.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"ColorStatic.h\"\n#include \"DrawCo"
  },
  {
    "path": "TrafficMonitor/ColorStatic.h",
    "chars": 1021,
    "preview": "// CColorStatic\n//派生自CStatic,用于显示颜色的Static控件\n#pragma once\n#define WM_STATIC_CLICKED (WM_USER + 1001)\n\nclass CColorStati"
  },
  {
    "path": "TrafficMonitor/ComboBox2.cpp",
    "chars": 779,
    "preview": "// ComboBox2.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"ComboBox2.h\"\n\n\n// CComboBox2\n\nIMPLEMENT_DYNAMIC(CComboBox2, CC"
  },
  {
    "path": "TrafficMonitor/ComboBox2.h",
    "chars": 351,
    "preview": "#pragma once\n\n\n// CComboBox2\n\nclass CComboBox2 : public CComboBox\n{\n\tDECLARE_DYNAMIC(CComboBox2)\n\npublic:\n\tCComboBox2()"
  },
  {
    "path": "TrafficMonitor/Common.cpp",
    "chars": 38723,
    "preview": "#include \"stdafx.h\"\n#include \"Common.h\"\n#include \"TrafficMonitor.h\"\n\n\nCCommon::CCommon()\n{\n}\n\n\nCCommon::~CCommon()\n{\n}\n"
  },
  {
    "path": "TrafficMonitor/Common.h",
    "chars": 10925,
    "preview": "#pragma once\n#include \"CommonData.h\"\n#include \"CVariant.h\"\n#include <set>\n#include <functional>\n\nclass CCommon\n{\npublic"
  },
  {
    "path": "TrafficMonitor/CommonData.cpp",
    "chars": 7742,
    "preview": "#include \"stdafx.h\"\n#include \"CommonData.h\"\n#include \"Common.h\"\n#include \"CalendarHelper.h\"\n#include \"TrafficMonitor.h\""
  },
  {
    "path": "TrafficMonitor/CommonData.h",
    "chars": 12543,
    "preview": "//此文件包含全局结构体、枚举类型的定义\n#pragma once\n#include \"stdafx.h\"\n#include \"TaskbarItemOrderHelper.h\"\n\nstruct Date\n{\n    int year{}"
  },
  {
    "path": "TrafficMonitor/D2D1Support.cpp",
    "chars": 3225,
    "preview": "#include \"stdafx.h\"\n#include \"D2D1Support.h\"\n#include \"Common.h\"\n\n#pragma comment(lib, \"D2d1.lib\")\n#pragma comment(lib,"
  },
  {
    "path": "TrafficMonitor/D2D1Support.h",
    "chars": 1313,
    "preview": "#pragma once\n#include <d2d1_1.h>\n#include <dwrite.h>\n#include \"HResultException.h\"\n#include \"RenderAPISupport.h\"\n\nclass"
  },
  {
    "path": "TrafficMonitor/D3D10Support1.cpp",
    "chars": 9694,
    "preview": "#include \"stdafx.h\"\n#include <algorithm>\n#include <memory>\n#include <tuple>\n#include <chrono>\n#include \"D3D10Support1.h"
  },
  {
    "path": "TrafficMonitor/D3D10Support1.h",
    "chars": 4919,
    "preview": "#pragma once\n#include <cstdint>\n#include <functional>\n#include <vector>\n#include <memory>\n#include <mutex>\n#include <d3"
  },
  {
    "path": "TrafficMonitor/DCompositionSupport.cpp",
    "chars": 938,
    "preview": "#include \"stdafx.h\"\n#include \"DCompositionSupport.h\"\n#include \"Common.h\"\n#include \"DllFunctions.h\"\n\nvoid CDCompositionD"
  },
  {
    "path": "TrafficMonitor/DCompositionSupport.h",
    "chars": 848,
    "preview": "#pragma once\n#include <wrl/client.h>\n#include <dcomp.h>\n#include \"HResultException.h\"\n#include \"RenderAPISupport.h\"\n\ncl"
  },
  {
    "path": "TrafficMonitor/DisplayItem.cpp",
    "chars": 14263,
    "preview": "#include \"stdafx.h\"\n#include \"DisplayItem.h\"\n#include \"Common.h\"\n#include \"TrafficMonitor.h\"\n\nCommonDisplayItem::Common"
  },
  {
    "path": "TrafficMonitor/DisplayItem.h",
    "chars": 2080,
    "preview": "#pragma once\n#include \"PluginInterface.h\"\n\n//内置的显示的项目\nenum DisplayItem\n{\n    TDI_UP,\n    TDI_DOWN,\n    TDI_CPU,\n    TDI"
  },
  {
    "path": "TrafficMonitor/DisplayTextSettingDlg.cpp",
    "chars": 6661,
    "preview": "// DisplayTextSettingDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"DisplayTextSettingDlg."
  },
  {
    "path": "TrafficMonitor/DisplayTextSettingDlg.h",
    "chars": 1203,
    "preview": "#pragma once\n#include \"BaseDialog.h\"\n#include \"CommonData.h\"\n#include \"ListCtrlEx.h\"\n\n// CDisplayTextSettingDlg 对话框\n\ncl"
  },
  {
    "path": "TrafficMonitor/DllFunctions.cpp",
    "chars": 1241,
    "preview": "#include \"stdafx.h\"\n#include \"DllFunctions.h\"\n\nCDllFunctions::CDllFunctions()\n{\n    // shellscalingapi\n    m_shcore_mod"
  },
  {
    "path": "TrafficMonitor/DllFunctions.h",
    "chars": 3087,
    "preview": "#pragma once\n#include <shellscalingapi.h> // 包含::GetDpiForMonitor\n#include <d3dcompiler.h> // 包含D3DCompile\n#include <dc"
  },
  {
    "path": "TrafficMonitor/DrawCommon.cpp",
    "chars": 11713,
    "preview": "#include \"stdafx.h\"\n#include \"DrawCommon.h\"\n#include \"TrafficMonitor.h\"\n\nCDrawCommon::CDrawCommon()\n{\n}\n\nCDrawCommon::~"
  },
  {
    "path": "TrafficMonitor/DrawCommon.h",
    "chars": 4642,
    "preview": "//封装的绘图类\n#pragma once\n#include \"IDrawCommon.h\"\n#include \"D2D1Support.h\"\n#include \"CommonData.h\"\n#include \"Nullable.hpp\""
  },
  {
    "path": "TrafficMonitor/DrawCommonEx.cpp",
    "chars": 4354,
    "preview": "#include \"stdafx.h\"\n#include \"DrawCommonEx.h\"\n#include \"DrawCommon.h\"\n\nCDrawCommonEx::CDrawCommonEx(CDC* pDC)\n{\n    Crea"
  },
  {
    "path": "TrafficMonitor/DrawCommonEx.h",
    "chars": 1687,
    "preview": "#pragma once\n#include \"IDrawCommon.h\"\n#include <gdiplus.h>\n\n//ʹGDI+Ļͼ\nclass CDrawCommonEx : public IDrawCommon\n{\npublic:"
  },
  {
    "path": "TrafficMonitor/DrawCommonFactory.cpp",
    "chars": 1478,
    "preview": "#include \"stdafx.h\"\n#include \"DrawCommonFactory.h\"\n\nauto GetInterfaceFromAllInvolvedDrawCommonObjects(\n    AllInvolvedD"
  },
  {
    "path": "TrafficMonitor/DrawCommonFactory.h",
    "chars": 2457,
    "preview": "#pragma once\n#include \"stdafx.h\"\n#include <memory>\n#include \"IDrawCommon.h\"\n#include \"DrawCommon.h\"\n#include \"TaskBarDl"
  },
  {
    "path": "TrafficMonitor/DrawTextManager.cpp",
    "chars": 2271,
    "preview": "#include \"stdafx.h\"\n#include \"DrawTextManager.h\"\n#include <memoryapi.h>\n\nEnableWriteMemoryGuard::~EnableWriteMemoryGuar"
  },
  {
    "path": "TrafficMonitor/DrawTextManager.h",
    "chars": 7402,
    "preview": "#pragma once\n#include <Windows.h>\n#include <type_traits>\n#include <functional>\n\nclass EnableWriteMemoryGuard\n{\nprivate:"
  },
  {
    "path": "TrafficMonitor/Dxgi1Support2.cpp",
    "chars": 2286,
    "preview": "#include \"stdafx.h\"\n#include \"Dxgi1Support2.h\"\n#include \"Common.h\"\n#include \"DllFunctions.h\"\n\nvoid CDxgiSwapChain1::Rec"
  },
  {
    "path": "TrafficMonitor/Dxgi1Support2.h",
    "chars": 1638,
    "preview": "#pragma once\n#include <dxgi1_3.h>\n#include \"HResultException.h\"\n#include \"RenderAPISupport.h\"\n\n#pragma comment(lib, \"DX"
  },
  {
    "path": "TrafficMonitor/FileDialogEx.cpp",
    "chars": 2888,
    "preview": "#include \"stdafx.h\"\n#include \"FileDialogEx.h\"\n#include <sstream>\n\nCFileDialogEx::CFileDialogEx(BOOL bOpenFileDialog, LP"
  },
  {
    "path": "TrafficMonitor/FileDialogEx.h",
    "chars": 659,
    "preview": "#pragma once\n\nclass CFileDialogEx {\npublic:\n    CFileDialogEx(BOOL bOpenFileDialog, LPCWSTR lpszDefExt = NULL, LPCWSTR "
  },
  {
    "path": "TrafficMonitor/FilePathHelper.cpp",
    "chars": 2897,
    "preview": "#include \"stdafx.h\"\n#include \"FilePathHelper.h\"\n#include \"Common.h\"\n\n\nCFilePathHelper::CFilePathHelper(const wstring & "
  },
  {
    "path": "TrafficMonitor/FilePathHelper.h",
    "chars": 832,
    "preview": "#pragma once\nclass CFilePathHelper\n{\npublic:\n\tCFilePathHelper(const wstring& file_path);\n\tCFilePathHelper(){}\n\t~CFilePa"
  },
  {
    "path": "TrafficMonitor/GeneralSettingsDlg.cpp",
    "chars": 28756,
    "preview": "// GeneralSettingsDlg.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"TrafficMo"
  },
  {
    "path": "TrafficMonitor/GeneralSettingsDlg.h",
    "chars": 3755,
    "preview": "#pragma once\n#include \"TabDlg.h\"\n#include \"SpinEdit.h\"\n#include \"ComboBox2.h\"\n\n// CGeneralSettingsDlg dialog\n\nclass CGe"
  },
  {
    "path": "TrafficMonitor/HResultException.cpp",
    "chars": 2578,
    "preview": "#include \"stdafx.h\"\n#include \"HResultException.h\"\n#include \"TrafficMonitor.h\"\n\nnamespace FunctionChecker\n{\n    namespac"
  },
  {
    "path": "TrafficMonitor/HResultException.h",
    "chars": 1603,
    "preview": "#pragma once\n#include <stdexcept>\n#include <wrl/client.h>\n\n#define TRAFFICMONITOR_STR_IMPL(x) #x\n#define TRAFFICMONITOR"
  },
  {
    "path": "TrafficMonitor/HighResolutionTimer.h",
    "chars": 1418,
    "preview": "#include <MMSYSTEM.H>\n#pragma comment(lib, \"WINMM.LIB\")\n\nclass CHighResolutionTimer\n{\n    typedef void(*TIMERCALLBACK)("
  },
  {
    "path": "TrafficMonitor/HistoryTrafficCalendarDlg.cpp",
    "chars": 17810,
    "preview": "// HistoryTrafficCalendarDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"HistoryTrafficCale"
  },
  {
    "path": "TrafficMonitor/HistoryTrafficDlg.cpp",
    "chars": 3441,
    "preview": "// HistoryTrafficDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"HistoryTrafficDlg.h\"\n#inc"
  },
  {
    "path": "TrafficMonitor/HistoryTrafficDlg.h",
    "chars": 1100,
    "preview": "#pragma once\n#include \"afxcmn.h\"\n#include \"Common.h\"\n#include \"HistoryTrafficListDlg.h\"\n#include \"HistoryTrafficCalenda"
  },
  {
    "path": "TrafficMonitor/HistoryTrafficFile.cpp",
    "chars": 5083,
    "preview": "#include \"stdafx.h\"\n#include \"HistoryTrafficFile.h\"\n#include \"Common.h\"\n\nCHistoryTrafficFile::CHistoryTrafficFile(const "
  },
  {
    "path": "TrafficMonitor/HistoryTrafficFile.h",
    "chars": 950,
    "preview": "#pragma once\n#include \"CommonData.h\"\nclass CHistoryTrafficFile\n{\npublic:\n\tCHistoryTrafficFile(const wstring& file_path);"
  },
  {
    "path": "TrafficMonitor/HistoryTrafficListCtrl.cpp",
    "chars": 3007,
    "preview": "#include \"stdafx.h\"\n#include \"HistoryTrafficListCtrl.h\"\n\nIMPLEMENT_DYNAMIC(CHistoryTrafficListCtrl, CListCtrl)\n\nCHistor"
  },
  {
    "path": "TrafficMonitor/HistoryTrafficListCtrl.h",
    "chars": 1043,
    "preview": "#pragma once\n#include \"afxcmn.h\"\n#include \"DrawCommon.h\"\nclass CHistoryTrafficListCtrl :\n\tpublic CListCtrl\n{\nDECLARE_DYN"
  },
  {
    "path": "TrafficMonitor/HistoryTrafficListDlg.cpp",
    "chars": 11977,
    "preview": "// HistoryTrafficList.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"HistoryTrafficListDlg.h\"\n"
  },
  {
    "path": "TrafficMonitor/IDrawCommon.h",
    "chars": 2556,
    "preview": "#pragma once\n#include \"CommonData.h\"\n\nclass IDrawBuffer\n{\npublic:\n    virtual ~IDrawBuffer() = default;\n};\n\nclass IDraw"
  },
  {
    "path": "TrafficMonitor/IconSelectDlg.cpp",
    "chars": 4576,
    "preview": "// IconSelectDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"IconSelectDlg.h\"\n#include \"af"
  },
  {
    "path": "TrafficMonitor/IconSelectDlg.h",
    "chars": 1352,
    "preview": "#pragma once\n#include \"afxwin.h\"\n#include \"PictureStatic.h\"\n#include \"BaseDialog.h\"\n\n// CIconSelectDlg 对话框\n\nclass CIcon"
  },
  {
    "path": "TrafficMonitor/Image2DEffect.cpp",
    "chars": 14963,
    "preview": "#include \"stdafx.h\"\n#include \"Image2DEffect.h\"\n#include \"Common.h\"\n\nnamespace D3DQuadrangle\n{\n    const std::array<std:"
  },
  {
    "path": "TrafficMonitor/Image2DEffect.h",
    "chars": 5739,
    "preview": "#pragma once\n#include <cstddef>\n#include <array>\n#include \"D3D10Support1.h\"\n\nnamespace D3DQuadrangle\n{\n    extern const"
  },
  {
    "path": "TrafficMonitor/IniHelper.cpp",
    "chars": 13173,
    "preview": "#include \"stdafx.h\"\n#include \"IniHelper.h\"\n#include \"Common.h\"\n\nCIniHelper::CIniHelper(const wstring& file_path, bool f"
  },
  {
    "path": "TrafficMonitor/IniHelper.h",
    "chars": 2724,
    "preview": "//ini读写类\n//使用时将ini文件路径通过构造函数参数传递\n//在向ini文件写入数据时,需要在最后调用Save()函数以将更改保存到文件\n//默认以UTF8_BOM编码保存,如果要以ANSI保存,请调用SetSaveAsUTF8("
  },
  {
    "path": "TrafficMonitor/LinkStatic.cpp",
    "chars": 2991,
    "preview": "// CLinkStatic.cpp: 实现文件\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"LinkStatic.h\"\n\n\n// CLinkStatic\n\nIMP"
  },
  {
    "path": "TrafficMonitor/LinkStatic.h",
    "chars": 1189,
    "preview": "/*继承于CStatic类,用作超链接:\n调用SetURL函数设置超链接;\n调用SetLinkIsURL函数设置点击控件后是打开超链接还是响应命令\n如果调用SetLinkIsURL(false),则点击控件后会向父窗口发送一个WM_LIN"
  },
  {
    "path": "TrafficMonitor/ListCtrlEx.cpp",
    "chars": 3159,
    "preview": "#include \"stdafx.h\"\n#include \"ListCtrlEx.h\"\n\nIMPLEMENT_DYNAMIC(CListCtrlEx, CListCtrl)\n\nCListCtrlEx::CListCtrlEx()\n{\n}\n"
  },
  {
    "path": "TrafficMonitor/ListCtrlEx.h",
    "chars": 1120,
    "preview": "#pragma once\n#include \"afxcmn.h\"\n#include \"DrawCommon.h\"\n#include <set>\n\n#define IDC_ITEM_EDITBOX 1991\nclass CListCtrlE"
  },
  {
    "path": "TrafficMonitor/MainWndColorDlg.cpp",
    "chars": 2869,
    "preview": "// MainWndColorDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"MainWndColorDlg.h\"\n#include"
  },
  {
    "path": "TrafficMonitor/MainWndColorDlg.h",
    "chars": 903,
    "preview": "#pragma once\n#include \"ColorStatic.h\"\n#include \"afxwin.h\"\n#include \"ColorSettingListCtrl.h\"\n#include \"BaseDialog.h\"\n\n//"
  },
  {
    "path": "TrafficMonitor/MainWndSettingsDlg.cpp",
    "chars": 21176,
    "preview": "// MainWndSettingsDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"MainWndSettingsDlg.h\"\n#i"
  },
  {
    "path": "TrafficMonitor/MainWndSettingsDlg.h",
    "chars": 2648,
    "preview": "#pragma once\n#include \"ColorStatic.h\"\n#include \"afxwin.h\"\n#include \"SpinEdit.h\"\n#include \"TabDlg.h\"\n#include \"MainWndCo"
  },
  {
    "path": "TrafficMonitor/MessageDlg.cpp",
    "chars": 4521,
    "preview": "// HelpDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"MessageDlg.h\"\n#include \"DrawCommon."
  },
  {
    "path": "TrafficMonitor/MessageDlg.h",
    "chars": 1393,
    "preview": "#pragma once\n#include \"afxwin.h\"\n#include \"BaseDialog.h\"\n\n// CMessageDlg 对话框\n\nclass CMessageDlg : public CBaseDialog\n{\n"
  },
  {
    "path": "TrafficMonitor/NetworkInfoDlg.cpp",
    "chars": 15192,
    "preview": "// CNetworkInfoDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"NetworkInfoDlg.h\"\n#include "
  },
  {
    "path": "TrafficMonitor/NetworkInfoDlg.h",
    "chars": 1992,
    "preview": "#pragma once\n#include\"Common.h\"\n#include \"afxcmn.h\"\n#include \"AdapterCommon.h\"\n#include \"BaseDialog.h\"\n#include \"ListCt"
  },
  {
    "path": "TrafficMonitor/Nullable.hpp",
    "chars": 7304,
    "preview": "#pragma once\n#include <cstddef>\n#include <functional>\n#include <type_traits>\n#include <stdexcept>\n#include <tuple>\n\ntem"
  },
  {
    "path": "TrafficMonitor/OptionsDlg.cpp",
    "chars": 3482,
    "preview": "// OptionsDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"OptionsDlg.h\"\n#include \"afxdialo"
  },
  {
    "path": "TrafficMonitor/OptionsDlg.h",
    "chars": 1107,
    "preview": "#pragma once\n#include \"MainWndSettingsDlg.h\"\n#include \"TaskBarSettingsDlg.h\"\n#include \"GeneralSettingsDlg.h\"\n#include \""
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/CPUUsage.cpp",
    "chars": 2652,
    "preview": "#include \"stdafx.h\"\n#include \"CPUUsage.h\"\n#include \"Common.h\"\n#include \"TrafficMonitor.h\"\n#include <powerbase.h>\n#inclu"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/CPUUsage.h",
    "chars": 755,
    "preview": "#pragma once\n#include <Pdh.h>\n#include <PdhMsg.h>\n#include \"PdhQuery.h\"\n\nclass CPdhCPUUsage : public CPdhQuery\n{\npublic"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/CpuFreq.cpp",
    "chars": 1264,
    "preview": "#include \"stdafx.h\"\n#include \"CpuFreq.h\"\n#include <powerbase.h>\n#include <sysinfoapi.h>\n\n\n/////////////////////////////"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/CpuFreq.h",
    "chars": 286,
    "preview": "#pragma once\n#include <Pdh.h>\n#include <PdhMsg.h>\n#include \"PdhQuery.h\"\n\nclass CPdhCpuFreq : public CPdhQuery\n{\npublic:"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/DiskUsage.cpp",
    "chars": 1863,
    "preview": "#include \"stdafx.h\"\n#include \"DiskUsage.h\"\n#include <algorithm>\n#include <cmath>\n\nCPdhDiskUsage::CPdhDiskUsage()\n    : "
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/DiskUsage.h",
    "chars": 778,
    "preview": "#pragma once\n#include \"PdhQuery.h\"\n\nclass CPdhDiskUsage : public CPdhQuery\n{\npublic:\n    CPdhDiskUsage();\n    ~CPdhDisk"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/GpuUsage.cpp",
    "chars": 1568,
    "preview": "#include \"stdafx.h\"\n#include \"GpuUsage.h\"\n\n////////////////////////////////////////////////////////////////////////////"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/GpuUsage.h",
    "chars": 288,
    "preview": "#pragma once\n#include \"PdhQuery.h\"\n\n// GPU利用率监控类\nclass CPdhGPUUsage : public CPdhQuery\n{\npublic:\n    CPdhGPUUsage();\n  "
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/PdhQuery.cpp",
    "chars": 2846,
    "preview": "#include \"stdafx.h\"\n#include \"PdhQuery.h\"\n\nCPdhQuery::CPdhQuery(LPCTSTR _fullCounterPath)\n    : fullCounterPath(_fullCou"
  },
  {
    "path": "TrafficMonitor/PdhHardwareQuery/PdhQuery.h",
    "chars": 505,
    "preview": "#pragma once\n#include <Pdh.h>\n#include <PdhMsg.h>\n\nclass CPdhQuery\n{\npublic:\n    CPdhQuery(LPCTSTR _fullCounterPath);\n "
  },
  {
    "path": "TrafficMonitor/PictureStatic.cpp",
    "chars": 1404,
    "preview": "#include \"stdafx.h\"\n#include \"PictureStatic.h\"\n\n\nCPictureStatic::CPictureStatic()\n{\n}\n\n\nCPictureStatic::~CPictureStatic("
  },
  {
    "path": "TrafficMonitor/PictureStatic.h",
    "chars": 439,
    "preview": "/*һʾͼƬľ̬ؼ\nҪʱSetPicture()þ̬ͼƬ\nؼػʱ򸸴ڷWM_CONTROL_REPAINTϢ\nͨwParamݵǰؼCWndָ룬ͨlParamCDCָ\n*/\n#pragma once\n#define WM_CONTROL_REP"
  },
  {
    "path": "TrafficMonitor/PluginInfoDlg.cpp",
    "chars": 7347,
    "preview": "// PluginInfoDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"PluginInfoDlg.h\"\n#include \"Fil"
  },
  {
    "path": "TrafficMonitor/PluginInfoDlg.h",
    "chars": 1403,
    "preview": "#pragma once\n#include \"BaseDialog.h\"\n#include \"ListCtrlEx.h\"\n\n// CPluginInfoDlg 对话框\n\nclass CPluginInfoDlg : public CBas"
  },
  {
    "path": "TrafficMonitor/PluginManager.cpp",
    "chars": 13906,
    "preview": "#include \"stdafx.h\"\n#include <Windows.h>\n#include <cstddef>\n#include <functional>\n#include <unordered_map>\n#include <lo"
  },
  {
    "path": "TrafficMonitor/PluginManager.h",
    "chars": 2150,
    "preview": "#pragma once\n#include \"PluginInterface.h\"\n#include <map>\n#include \"TaskbarItemOrderHelper.h\"\n#include <functional>\n\ntyp"
  },
  {
    "path": "TrafficMonitor/PluginManagerDlg.cpp",
    "chars": 13443,
    "preview": "// PluginManagerDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"PluginManagerDlg.h\"\n#includ"
  },
  {
    "path": "TrafficMonitor/PluginManagerDlg.h",
    "chars": 1721,
    "preview": "#pragma once\n#include \"BaseDialog.h\"\n#include \"LinkStatic.h\"\n#include \"ListCtrlEx.h\"\n\n// CPluginManagerDlg 对话框\n\nclass C"
  },
  {
    "path": "TrafficMonitor/PluginUpdateHelper.cpp",
    "chars": 3463,
    "preview": "#include \"stdafx.h\"\n#include \"PluginUpdateHelper.h\"\n#include \"Common.h\"\n#include \"TrafficMonitor.h\"\n#include \"TinyXml2H"
  },
  {
    "path": "TrafficMonitor/PluginUpdateHelper.h",
    "chars": 761,
    "preview": "#pragma once\n\nclass PluginVersion\n{\npublic:\n    PluginVersion();\n    PluginVersion(const std::wstring& version);\n    Pl"
  },
  {
    "path": "TrafficMonitor/ReadMe.txt",
    "chars": 2225,
    "preview": "================================================================================\n    MICROSOFT 基础类库 : TrafficMonitor 项目"
  },
  {
    "path": "TrafficMonitor/RenderAPISupport.h",
    "chars": 9209,
    "preview": "#pragma once\n#include <utility>\n#include <type_traits>\n#include <memory>\n#include <unordered_set>\n\n#define TRAFFICMONIT"
  },
  {
    "path": "TrafficMonitor/SelectConnectionsDlg.cpp",
    "chars": 2440,
    "preview": "// SelectConnectionsDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"SelectConnectionsDlg.h\""
  },
  {
    "path": "TrafficMonitor/SelectConnectionsDlg.h",
    "chars": 834,
    "preview": "#pragma once\n#include \"CommonData.h\"\n#include \"BaseDialog.h\"\n\n// CSelectConnectionsDlg 对话框\n\nclass CSelectConnectionsDlg"
  },
  {
    "path": "TrafficMonitor/SetItemOrderDlg.cpp",
    "chars": 6089,
    "preview": "// SetItemOrderDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"SetItemOrderDlg.h\"\n#include "
  },
  {
    "path": "TrafficMonitor/SetItemOrderDlg.h",
    "chars": 1664,
    "preview": "#pragma once\n#include \"BaseDialog.h\"\n\n// CSetItemOrderDlg 对话框\n\nclass CSetItemOrderDlg : public CBaseDialog\n{\n    DECLAR"
  },
  {
    "path": "TrafficMonitor/SettingsHelper.cpp",
    "chars": 5990,
    "preview": "#include \"stdafx.h\"\n#include \"SettingsHelper.h\"\n#include \"TrafficMonitor.h\"\n\nCSettingsHelper::CSettingsHelper()\n    : C"
  },
  {
    "path": "TrafficMonitor/SettingsHelper.h",
    "chars": 1863,
    "preview": "#pragma once\n#include \"IniHelper.h\"\n#include \"CommonData.h\"\n\nclass CSettingsHelper : public CIniHelper\n{\npublic:\n    CS"
  },
  {
    "path": "TrafficMonitor/SimpleXML.cpp",
    "chars": 1587,
    "preview": "#include \"stdafx.h\"\n#include \"SimpleXML.h\"\n\n\nCSimpleXML::CSimpleXML(const wstring & xml_path)\n{\n\tifstream file_stream{ x"
  },
  {
    "path": "TrafficMonitor/SimpleXML.h",
    "chars": 454,
    "preview": "//һ׵XML\n#pragma once\n#include \"Common.h\"\n\nclass CSimpleXML\n{\npublic:\n\tCSimpleXML(const wstring& xml_path);\n\tCSimpleXML()"
  },
  {
    "path": "TrafficMonitor/SkinAutoAdaptSettingDlg.cpp",
    "chars": 2187,
    "preview": "// SkinAutoAdaptSettingDlg.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"afxdialogex.h\"\n#incl"
  },
  {
    "path": "TrafficMonitor/SkinAutoAdaptSettingDlg.h",
    "chars": 928,
    "preview": "#pragma once\n#include \"afxdialogex.h\"\n#include \"BaseDialog.h\"\n\n// CSkinAutoAdaptSettingDlg 对话框\n\nclass CSkinAutoAdaptSet"
  },
  {
    "path": "TrafficMonitor/SkinDlg.cpp",
    "chars": 7099,
    "preview": "// SkinDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"SkinDlg.h\"\n#include \"afxdialogex.h\""
  },
  {
    "path": "TrafficMonitor/SkinDlg.h",
    "chars": 1494,
    "preview": "#pragma once\n#include \"afxwin.h\"\n#include\"StaticEx.h\"\n#include \"PictureStatic.h\"\n#include \"CSkinPreviewView.h\"\n#include"
  },
  {
    "path": "TrafficMonitor/SkinFile.cpp",
    "chars": 33361,
    "preview": "#include \"stdafx.h\"\n#include \"SkinFile.h\"\n#include \"Common.h\"\n#include \"FilePathHelper.h\"\n#include \"TrafficMonitor.h\"\n#"
  },
  {
    "path": "TrafficMonitor/SkinFile.h",
    "chars": 4151,
    "preview": "#pragma once\n#include \"CommonData.h\"\n#include \"TinyXml2Helper.h\"\n#include \"DrawCommon.h\"\n#include <gdiplus.h>\n\nclass CS"
  },
  {
    "path": "TrafficMonitor/SkinManager.cpp",
    "chars": 6377,
    "preview": "#include \"stdafx.h\"\n#include \"SkinManager.h\"\n#include \"Common.h\"\n#include \"TrafficMonitor.h\"\n#include \"SettingsHelper.h"
  },
  {
    "path": "TrafficMonitor/SkinManager.h",
    "chars": 970,
    "preview": "#pragma once\n#include \"CommonData.h\"\n#include \"SkinFile.h\"\n\nclass CSkinManager\n{\npublic:\n    void Init();\n    static CS"
  },
  {
    "path": "TrafficMonitor/SpinEdit.cpp",
    "chars": 3314,
    "preview": "// SpinEdit.cpp: 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"SpinEdit.h\"\n\n#define SPIN_ID 3100\n// CSpinEdit\n\nIMPLEMENT_DYNAM"
  },
  {
    "path": "TrafficMonitor/SpinEdit.h",
    "chars": 1158,
    "preview": "#pragma once\n// 这是一个带微调按钮的Edit控件,在CEdit右侧附加一个微调按钮,请预留空间\n// CSpinEdit\n\n//微调按钮点击消息。WPARAM: CSpinButtonCtrl的指针,LPARAM: LPN"
  },
  {
    "path": "TrafficMonitor/StaticEx.cpp",
    "chars": 1871,
    "preview": "#include \"stdafx.h\"\n#include \"StaticEx.h\"\n\n\nCStaticEx::CStaticEx()\n{\n}\n\n\nCStaticEx::~CStaticEx()\n{\n}\n\nvoid CStaticEx::Se"
  },
  {
    "path": "TrafficMonitor/StaticEx.h",
    "chars": 878,
    "preview": "/*\nCStatic࣬ɫıؼ\nSetTextColorıɫ\nҪʱSetWindowTextExÿؼı\n*/\n#pragma once\n#include \"afxwin.h\"\nclass CStaticEx :\n\tpublic CStatic"
  },
  {
    "path": "TrafficMonitor/StrTable.cpp",
    "chars": 6476,
    "preview": "#include \"stdafx.h\"\n#include \"StrTable.h\"\n#include \"Common.h\"\n#include \"IniHelper.h\"\n#include \"TrafficMonitor.h\"\nCStrTa"
  },
  {
    "path": "TrafficMonitor/StrTable.h",
    "chars": 1970,
    "preview": "#pragma once\n#include \"CVariant.h\"\n#include <map>\nclass CIniHelper;\n\nclass CStrTable\n{\npublic:\n    CStrTable();\n    ~CS"
  },
  {
    "path": "TrafficMonitor/SupportedRenderEnums.cpp",
    "chars": 1883,
    "preview": "#include \"stdafx.h\"\n#include \"SupportedRenderEnums.h\"\n#include \"TaskBarDlgDrawCommon.h\"\n\nCSupportedRenderEnums::CSuppor"
  },
  {
    "path": "TrafficMonitor/SupportedRenderEnums.h",
    "chars": 1044,
    "preview": "#pragma once\n#include <bitset>\n#include \"IDrawCommon.h\"\n\nclass CSupportedRenderEnums\n{\nprivate:\n    std::bitset<3> m_en"
  },
  {
    "path": "TrafficMonitor/TabDlg.cpp",
    "chars": 6919,
    "preview": "#include \"stdafx.h\"\n#include \"TabDlg.h\"\n#include \"TrafficMonitor.h\"\n\nIMPLEMENT_DYNAMIC(CTabDlg, CBaseDialog)\n\nCTabDlg::"
  },
  {
    "path": "TrafficMonitor/TabDlg.h",
    "chars": 1462,
    "preview": "//这是用于Tab标签中的子对话框类\n#pragma once\n#include \"BaseDialog.h\"\n\nclass CTabDlg : public CBaseDialog\n{\n    DECLARE_DYNAMIC(CTabD"
  },
  {
    "path": "TrafficMonitor/TaskBarDlg.cpp",
    "chars": 54106,
    "preview": "// TaskBarDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"TaskBarDlg.h\"\n#include \"afxdialo"
  },
  {
    "path": "TrafficMonitor/TaskBarDlg.h",
    "chars": 8014,
    "preview": "#pragma once\n#include \"Common.h\"\n#include \"afxwin.h\"\n#include \"DrawCommon.h\"\n#include \"TaskBarDlgDrawCommon.h\"\n#include"
  },
  {
    "path": "TrafficMonitor/TaskBarDlgDrawCommon.cpp",
    "chars": 74331,
    "preview": "#include \"stdafx.h\"\n#include <unordered_map>\n#include \"TaskBarDlgDrawCommon.h\"\n#include \"D2D1Support.h\"\n#include \"Traff"
  },
  {
    "path": "TrafficMonitor/TaskBarDlgDrawCommon.h",
    "chars": 34009,
    "preview": "#pragma once\n#include <tuple>\n#include <unordered_map>\n#include <chrono>\n#include <mutex>\n#include <thread>\n#include <t"
  },
  {
    "path": "TrafficMonitor/TaskBarSettingsDlg.cpp",
    "chars": 36911,
    "preview": "// TaskBarSettingsDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"TaskBarSettingsDlg.h\"\n#i"
  },
  {
    "path": "TrafficMonitor/TaskBarSettingsDlg.h",
    "chars": 4483,
    "preview": "#pragma once\r\n#include \"ColorStatic.h\"\r\n#include \"afxwin.h\"\r\n#include \"SpinEdit.h\"\r\n#include \"TabDlg.h\"\r\n#include \"Task"
  },
  {
    "path": "TrafficMonitor/TaskbarColorDlg.cpp",
    "chars": 3204,
    "preview": "// TaskbarColorDlg.cpp : 实现文件\n//\n\n#include \"stdafx.h\"\n#include \"TrafficMonitor.h\"\n#include \"TaskbarColorDlg.h\"\n#include"
  },
  {
    "path": "TrafficMonitor/TaskbarColorDlg.h",
    "chars": 932,
    "preview": "#pragma once\n#include \"ColorStatic.h\"\n#include \"afxwin.h\"\n#include \"ColorSettingListCtrl.h\"\n#include \"BaseDialog.h\"\n\n//"
  },
  {
    "path": "TrafficMonitor/TaskbarDefaultStyle.cpp",
    "chars": 6107,
    "preview": "#include \"stdafx.h\"\n#include \"TaskbarDefaultStyle.h\"\n#include \"SettingsHelper.h\"\n#include \"TrafficMonitor.h\"\n#include \""
  },
  {
    "path": "TrafficMonitor/TaskbarDefaultStyle.h",
    "chars": 987,
    "preview": "#pragma once\n#include \"CommonData.h\"\n\n#define TASKBAR_DEFAULT_STYLE_NUM 4\n#define TASKBAR_DEFAULT_LIGHT_STYLE_INDEX 3\n#"
  },
  {
    "path": "TrafficMonitor/TaskbarHelper.cpp",
    "chars": 2759,
    "preview": "#include \"stdafx.h\"\n#include \"TaskbarHelper.h\"\n#include <algorithm>\n\n// 存储显示器信息\nstruct MonitorInfo\n{\n    HMONITOR hMoni"
  },
  {
    "path": "TrafficMonitor/TaskbarHelper.h",
    "chars": 292,
    "preview": "#pragma once\n#include <vector>\nclass CTaskbarHelper\n{\npublic:\n    //获取所有副显示器上的任务栏,并确保按显示器的顺序\n    static void GetAllSeco"
  },
  {
    "path": "TrafficMonitor/TaskbarItemOrderHelper.cpp",
    "chars": 3912,
    "preview": "#include \"stdafx.h\"\n#include \"TaskbarItemOrderHelper.h\"\n#include \"Common.h\"\n#include \"TrafficMonitor.h\"\n\n//////////////"
  },
  {
    "path": "TrafficMonitor/TaskbarItemOrderHelper.h",
    "chars": 870,
    "preview": "#pragma once\n#include \"DisplayItem.h\"\n\nclass CTaskbarItemOrderHelper\n{\npublic:\n    CTaskbarItemOrderHelper(bool display"
  },
  {
    "path": "TrafficMonitor/Test.cpp",
    "chars": 2557,
    "preview": "#include \"stdafx.h\"\n#include \"Test.h\"\n#include \"Common.h\"\n#include \"SkinFile.h\"\n#include \"TrafficMonitor.h\"\n#include \"I"
  },
  {
    "path": "TrafficMonitor/Test.h",
    "chars": 122,
    "preview": "#pragma once\nclass CTest\n{\npublic:\n    CTest();\n    ~CTest();\n\n    static void Test();\n    static void TestCommand();\n}"
  }
]

// ... and 79 more files (download for full content)

About this extraction

This page contains the full source code of the zhongyang219/TrafficMonitor GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 279 files (1.9 MB), approximately 552.5k tokens, and a symbol index with 749 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!