From b5531a1f6b6ee3beb448aa4305d806edcfbc1213 Mon Sep 17 00:00:00 2001 From: Seraphima Zykova Date: Mon, 13 Jun 2022 16:37:52 +0200 Subject: [PATCH] [FancyZones][Tool]Monitor id tool (#18589) * tool * log ccd and wmi/cimv2 * rename * spell * clean up * spellcheck --- .github/actions/spell-check/expect.txt | 16 + tools/MonitorReportTool/ErrorMessage.h | 26 + tools/MonitorReportTool/Logger.h | 45 ++ tools/MonitorReportTool/MonitorReportTool.cpp | 477 ++++++++++++++++++ tools/MonitorReportTool/MonitorReportTool.h | 3 + tools/MonitorReportTool/MonitorReportTool.ico | Bin 0 -> 55183 bytes tools/MonitorReportTool/MonitorReportTool.rc | Bin 0 -> 4548 bytes tools/MonitorReportTool/MonitorReportTool.sln | 31 ++ .../MonitorReportTool.vcxproj | 98 ++++ .../MonitorReportTool.vcxproj.filters | 55 ++ tools/MonitorReportTool/Resource.h | 24 + tools/MonitorReportTool/pch.cpp | 1 + tools/MonitorReportTool/pch.h | 3 + tools/MonitorReportTool/small.ico | Bin 0 -> 55183 bytes 14 files changed, 779 insertions(+) create mode 100644 tools/MonitorReportTool/ErrorMessage.h create mode 100644 tools/MonitorReportTool/Logger.h create mode 100644 tools/MonitorReportTool/MonitorReportTool.cpp create mode 100644 tools/MonitorReportTool/MonitorReportTool.h create mode 100644 tools/MonitorReportTool/MonitorReportTool.ico create mode 100644 tools/MonitorReportTool/MonitorReportTool.rc create mode 100644 tools/MonitorReportTool/MonitorReportTool.sln create mode 100644 tools/MonitorReportTool/MonitorReportTool.vcxproj create mode 100644 tools/MonitorReportTool/MonitorReportTool.vcxproj.filters create mode 100644 tools/MonitorReportTool/Resource.h create mode 100644 tools/MonitorReportTool/pch.cpp create mode 100644 tools/MonitorReportTool/pch.h create mode 100644 tools/MonitorReportTool/small.ico diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index a7abb54a5e..b6996abf82 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -117,6 +117,7 @@ aumid Aut Authenticode AUTHN +AUTHZ autogenerate autogenerated AUTOHIDE @@ -230,6 +231,7 @@ Chukotka Chuuk cielab ciexyz +cim CImage cinttypes cla @@ -292,6 +294,9 @@ companding Compat COMPOSITIONFULL comsupp +comsuppw +comsuppwd +comutil Concat concrt configs @@ -447,6 +452,7 @@ DISABLEASACTIONKEY dispid DISPIDAMBIENTDLCONTROL DISPLAYCHANGE +DISPLAYCONFIG displayname divyan DLACTIVEXCTLS @@ -510,6 +516,7 @@ dxgiformat dxguid ecount EData +Edid EDITKEYBOARD editkeyboardwindow editorconfig @@ -730,6 +737,7 @@ HKPD HKU HLOCAL HLSL +HMD hmenu hmodule hmonitor @@ -981,6 +989,7 @@ IValue IVector IView IVirtual +IWbem IWeb IWIC iwindow @@ -1124,6 +1133,7 @@ LPMINMAXINFO LPOSVERSIONINFOEXW lprc LPRECT +LPSAFEARRAY LPSTR lpsz lpt @@ -1613,6 +1623,7 @@ pwsh PWSTR pwsz pwtd +QDC qianlifeng qit QITAB @@ -2225,6 +2236,8 @@ VSTHRD VSTT vtable Vtbl +wbem +wbemuuid WBounds wca wcautil @@ -2315,6 +2328,8 @@ WKSG Wlkr wmain Wman +wmi +WMICIM WMKEYDOWN WMKEYUP wmp @@ -2338,6 +2353,7 @@ wpf wpr wprintf wprp +WQL wregex WResize writefile diff --git a/tools/MonitorReportTool/ErrorMessage.h b/tools/MonitorReportTool/ErrorMessage.h new file mode 100644 index 0000000000..9e6b572520 --- /dev/null +++ b/tools/MonitorReportTool/ErrorMessage.h @@ -0,0 +1,26 @@ +#pragma once + +#include +#include +#include +#include + +inline std::optional get_last_error_message(const DWORD dw) +{ + std::optional message; + try + { + const auto msg = std::system_category().message(dw); + message.emplace(begin(msg), end(msg)); + } + catch (...) + { + } + return message; +} + +inline std::wstring get_last_error_or_default(const DWORD dw) +{ + auto message = get_last_error_message(dw); + return message.has_value() ? message.value() : L""; +} diff --git a/tools/MonitorReportTool/Logger.h b/tools/MonitorReportTool/Logger.h new file mode 100644 index 0000000000..ff53cc6833 --- /dev/null +++ b/tools/MonitorReportTool/Logger.h @@ -0,0 +1,45 @@ +#pragma once + +#include +#include + +#include + +std::filesystem::path get_desktop_path() +{ + wchar_t* p; + if (S_OK != SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &p)) return ""; + + std::filesystem::path result = p; + CoTaskMemFree(p); + + return result; +} + +class Logger +{ +private: + inline static std::wofstream logger; + +public: + ~Logger() + { + logger.close(); + } + + static void init(std::string loggerName) + { + std::filesystem::path rootFolder(get_desktop_path()); + + auto logsPath = rootFolder; + logsPath.append(L"monitor_ids.txt"); + + logger.open(logsPath.string(), std::ios_base::out | std::ios_base::app); + } + + template + static void log(FormatString fmt, Args&&... args) + { + logger << std::vformat(fmt, std::make_wformat_args(args...)) << std::endl; + } +}; diff --git a/tools/MonitorReportTool/MonitorReportTool.cpp b/tools/MonitorReportTool/MonitorReportTool.cpp new file mode 100644 index 0000000000..6598173679 --- /dev/null +++ b/tools/MonitorReportTool/MonitorReportTool.cpp @@ -0,0 +1,477 @@ +#include "pch.h" +#include "MonitorReportTool.h" + +#include +#include +#include + +#include + +#include "ErrorMessage.h" +#include "Logger.h" + +namespace FancyZonesUtils +{ + template + std::vector> GetAllMonitorInfo() + { + using result_t = std::vector>; + result_t result; + + auto enumMonitors = [](HMONITOR monitor, HDC, LPRECT, LPARAM param) -> BOOL { + MONITORINFOEX mi; + mi.cbSize = sizeof(mi); + result_t& result = *reinterpret_cast(param); + if (GetMonitorInfo(monitor, &mi)) + { + result.push_back({ monitor, mi }); + } + + return TRUE; + }; + + EnumDisplayMonitors(NULL, NULL, enumMonitors, reinterpret_cast(&result)); + return result; + } +} + +void LogEnumDisplayMonitors() +{ + Logger::log(L" ---- EnumDisplayMonitors ---- "); + + auto allMonitors = FancyZonesUtils::GetAllMonitorInfo<&MONITORINFOEX::rcWork>(); + std::unordered_map displayDeviceIdxMap; + + for (auto& monitorData : allMonitors) + { + auto monitorInfo = monitorData.second; + + DISPLAY_DEVICE displayDevice{ .cb = sizeof(displayDevice) }; + std::wstring deviceId; + auto enumRes = EnumDisplayDevicesW(monitorInfo.szDevice, displayDeviceIdxMap[monitorInfo.szDevice], &displayDevice, EDD_GET_DEVICE_INTERFACE_NAME); + + if (enumRes == 0) + { + Logger::log(get_last_error_or_default(GetLastError())); + } + else + { + Logger::log(L"DeviceId: {}", std::wstring(displayDevice.DeviceID)); + Logger::log(L"DeviceKey: {}", std::wstring(displayDevice.DeviceKey)); + Logger::log(L"DeviceName: {}", std::wstring(displayDevice.DeviceName)); + Logger::log(L"DeviceString: {}", std::wstring(displayDevice.DeviceString)); + Logger::log(L""); + } + } + + Logger::log(L""); +} + +void LogWMIProp(IWbemClassObject* wbemClassObj, std::wstring_view prop) +{ + if (!wbemClassObj) + { + return; + } + + VARIANT vtProp{}; + + // Get the value of the Name property + auto hres = wbemClassObj->Get(prop.data(), 0, &vtProp, 0, 0); + if (FAILED(hres)) + { + Logger::log(L"Get {} Error code = {} ", prop, get_last_error_or_default(hres)); + return; + } + + switch (vtProp.vt) + { + case VT_I2: //short + { + Logger::log(L"{} : {}", prop, vtProp.iVal); + } + break; + case VT_I4: //int, long + { + Logger::log(L"{} : {}", prop, vtProp.lVal); + } + break; + case VT_BSTR: //BSTR + { + Logger::log(L"{} : {}", prop, vtProp.bstrVal); + } + break; + case VT_UI1: //BYTE (unsigned char) + { + Logger::log(L"{} : {}", prop, vtProp.bVal); + } + break; + case VT_ARRAY: // parray + case 8195: // also parray + { + std::u32string str(static_cast(vtProp.parray->pvData)); + std::wstring wstr; + for (const char32_t& c : str) + { + wstr += (wchar_t)c; + } + + Logger::log(L"{} : {}", prop, wstr); + } + break; + default: + { + Logger::log(L"{} : value is empty", prop); + } + break; + } + + VariantClear(&vtProp); +} + +void LogWMI() +{ + Logger::log(L" ---- WMI ---- "); + + HRESULT hres; + + // Initialize COM. + hres = CoInitializeEx(0, COINIT_MULTITHREADED); + if (FAILED(hres)) + { + Logger::log(L"Failed to initialize COM library. Error code = ", hres); + return; + } + + // Initialize + hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, + RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); + + if (FAILED(hres)) + { + Logger::log(L"Failed to initialize security. Error code = ", hres); + CoUninitialize(); + return; + } + + // Obtain the initial locator to Windows Management + // on a particular host computer. + IWbemLocator* pLocator = 0; + + hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLocator); + if (FAILED(hres)) + { + Logger::log(L"Failed to create IWbemLocator object. Error code = ", hres); + CoUninitialize(); + return; + } + + IWbemServices* pServices = 0; + hres = pLocator->ConnectServer(_bstr_t(L"ROOT\\WMI"), NULL, NULL, 0, NULL, 0, 0, &pServices); + + if (FAILED(hres)) + { + Logger::log(L"Could not connect WMI server. Error code = ", hres); + pLocator->Release(); + CoUninitialize(); + return; + } + + Logger::log(L"Connected to ROOT\\WMI WMI namespace"); + Logger::log(L""); + + + // Set the IWbemServices proxy so that impersonation + // of the user (client) occurs. + hres = CoSetProxyBlanket(pServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, + RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE); + + if (FAILED(hres)) + { + Logger::log(L"Could not set proxy blanket. Error code = ", hres); + pServices->Release(); + pLocator->Release(); + CoUninitialize(); + return; + } + + // Use the IWbemServices pointer to make requests of WMI. + // Make requests here: + IEnumWbemClassObject* pEnumerator = NULL; + + hres = pServices->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM WmiMonitorID"), + WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); + + if (FAILED(hres)) + { + Logger::log(L"Query for monitors failed. Error code = ", hres); + pServices->Release(); + pLocator->Release(); + CoUninitialize(); + return; + } + + IWbemClassObject* pClassObject; + ULONG uReturn = 0; + + while (pEnumerator) + { + hres = pEnumerator->Next(WBEM_INFINITE, 1, &pClassObject, &uReturn); + + if (0 == uReturn) + { + break; + } + + LPSAFEARRAY pFieldArray = NULL; + hres = pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS, NULL, &pFieldArray); + if (FAILED(hres)) + { + Logger::log(L"Failed to get field names. Error code = {}", get_last_error_or_default(hres)); + break; + } + + LogWMIProp(pClassObject, L"InstanceName"); + + LogWMIProp(pClassObject, L"YearOfManufacture"); + LogWMIProp(pClassObject, L"WeekOfManufacture"); + + LogWMIProp(pClassObject, L"UserFriendlyNameLength"); + LogWMIProp(pClassObject, L"UserFriendlyName"); + LogWMIProp(pClassObject, L"ManufacturerName"); + + LogWMIProp(pClassObject, L"SerialNumberID"); + LogWMIProp(pClassObject, L"ProductCodeID"); + + Logger::log(L""); + + pClassObject->Release(); + pClassObject = NULL; + } + + pServices->Release(); + pLocator->Release(); + pEnumerator->Release(); + + CoUninitialize(); +} + +void LogWMICIMV2() +{ + Logger::log(L" ---- WMI ---- "); + + HRESULT hres; + + hres = CoInitializeEx(0, COINIT_MULTITHREADED); + if (FAILED(hres)) + { + Logger::log(L"Failed to initialize COM library. Error code = ", hres); + return; + } + + hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, + RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); + + if (FAILED(hres)) + { + Logger::log(L"Failed to initialize security. Error code = ", hres); + CoUninitialize(); + return; + } + + // Obtain the initial locator to Windows Management + // on a particular host computer. + IWbemLocator* pLocator = 0; + + hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLocator); + if (FAILED(hres)) + { + Logger::log(L"Failed to create IWbemLocator object. Error code = ", hres); + CoUninitialize(); + return; + } + + IWbemServices* pServices = 0; + + // Connect to the root\cimv2 namespace with the + // current user and obtain pointer pSvc + // to make IWbemServices calls. + + hres = pLocator->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pServices); + + if (FAILED(hres)) + { + Logger::log(L"Could not connect WMI server. Error code = ", hres); + pLocator->Release(); + CoUninitialize(); + return; + } + + Logger::log(L"Connected to ROOT\\CIMV2 WMI namespace"); + Logger::log(L""); + + // Set the IWbemServices proxy so that impersonation + // of the user (client) occurs. + hres = CoSetProxyBlanket(pServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, + RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE); + + if (FAILED(hres)) + { + Logger::log(L"Could not set proxy blanket. Error code = ", hres); + pServices->Release(); + pLocator->Release(); + CoUninitialize(); + return; + } + + // Use the IWbemServices pointer to make requests of WMI. + // Make requests here: + IEnumWbemClassObject* pEnumerator = NULL; + hres = pServices->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_DesktopMonitor"), + WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); + + if (FAILED(hres)) + { + Logger::log(L"Query for monitors failed. Error code = ", hres); + pServices->Release(); + pLocator->Release(); + CoUninitialize(); + return; + } + + IWbemClassObject* pClassObject; + ULONG uReturn = 0; + + while (pEnumerator) + { + hres = pEnumerator->Next(WBEM_INFINITE, 1, &pClassObject, &uReturn); + + if (0 == uReturn) + { + break; + } + + LogWMIProp(pClassObject, L"DeviceID"); + LogWMIProp(pClassObject, L"Caption"); + LogWMIProp(pClassObject, L"Description"); + LogWMIProp(pClassObject, L"MonitorManufacturer"); + LogWMIProp(pClassObject, L"MonitorType"); + LogWMIProp(pClassObject, L"Name"); + LogWMIProp(pClassObject, L"PNPDeviceID"); + LogWMIProp(pClassObject, L"Status"); + + LogWMIProp(pClassObject, L"Availability"); + + Logger::log(L""); + + pClassObject->Release(); + pClassObject = NULL; + } + + pServices->Release(); + pLocator->Release(); + pEnumerator->Release(); + + CoUninitialize(); +} + +void LogCCD() +{ + Logger::log(L" ---- CCD ---- "); + + LONG result = ERROR_SUCCESS; + std::vector paths; + std::vector modes; + + do + { + UINT32 pathCount{}, modeCount{}; + auto sizesResult = GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS | QDC_INCLUDE_HMD | QDC_VIRTUAL_MODE_AWARE, &pathCount, &modeCount); + + if (sizesResult != ERROR_SUCCESS) + { + Logger::log(L"GetDisplayConfigBufferSizes error {}", get_last_error_or_default(sizesResult)); + return; + } + + paths.resize(pathCount); + paths.resize(modeCount); + + auto result = QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS | QDC_INCLUDE_HMD | QDC_VIRTUAL_MODE_AWARE, &pathCount, paths.data() + , &modeCount, modes.data(), nullptr); + + // The function may have returned fewer paths/modes than estimated + paths.resize(pathCount); + modes.resize(modeCount); + } while (result == ERROR_INSUFFICIENT_BUFFER); + + if (result != ERROR_SUCCESS) + { + Logger::log(L"QueryDisplayConfig error {}", get_last_error_or_default(result)); + return; + } + + // For each active path + for (auto& path : paths) + { + // Find the target (monitor) friendly name + DISPLAYCONFIG_TARGET_DEVICE_NAME targetName = {}; + targetName.header.adapterId = path.targetInfo.adapterId; + targetName.header.id = path.targetInfo.id; + targetName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME; + targetName.header.size = sizeof(targetName); + result = DisplayConfigGetDeviceInfo(&targetName.header); + + if (result != ERROR_SUCCESS) + { + Logger::log(L"DisplayConfigGetDeviceInfo error {}", get_last_error_or_default(result)); + } + + // Find the adapter device name + DISPLAYCONFIG_ADAPTER_NAME adapterName = {}; + adapterName.header.adapterId = path.targetInfo.adapterId; + adapterName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME; + adapterName.header.size = sizeof(adapterName); + + result = DisplayConfigGetDeviceInfo(&adapterName.header); + + if (result != ERROR_SUCCESS) + { + Logger::log(L"DisplayConfigGetDeviceInfo error {}", get_last_error_or_default(result)); + continue; + } + + Logger::log(L"Monitor: {} connected to adapter {}" + , (targetName.flags.friendlyNameFromEdid ? targetName.monitorFriendlyDeviceName : L"Unknown") + , adapterName.adapterDevicePath); + } +} + +void LogInfo() +{ + Logger::log(L"Timestamp: {}", std::chrono::system_clock::now()); + Logger::log(L""); + + LogEnumDisplayMonitors(); + LogWMICIMV2(); + LogWMI(); + LogCCD(); + + Logger::log(L"======================================="); + Logger::log(L""); +} + +int APIENTRY wWinMain(_In_ HINSTANCE hInstance, + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPWSTR lpCmdLine, + _In_ int nCmdShow) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + Logger::init("MonitorReportTool"); + + LogInfo(); + + return 0; +} diff --git a/tools/MonitorReportTool/MonitorReportTool.h b/tools/MonitorReportTool/MonitorReportTool.h new file mode 100644 index 0000000000..d00d47e788 --- /dev/null +++ b/tools/MonitorReportTool/MonitorReportTool.h @@ -0,0 +1,3 @@ +#pragma once + +#include "resource.h" diff --git a/tools/MonitorReportTool/MonitorReportTool.ico b/tools/MonitorReportTool/MonitorReportTool.ico new file mode 100644 index 0000000000000000000000000000000000000000..e82442c2643edd754a5dcece07d0a1ecb79c438b GIT binary patch literal 55183 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 literal 0 HcmV?d00001 diff --git a/tools/MonitorReportTool/MonitorReportTool.rc b/tools/MonitorReportTool/MonitorReportTool.rc new file mode 100644 index 0000000000000000000000000000000000000000..6fe6c12420432bcccab8025085d4089b33d74f00 GIT binary patch literal 4548 zcmd51@73u(tcDL-B@bXS0(U{Icrf5MG+d z9qf?uf`3b+pn=^cc6*p>8hM}O zEu`$~sYSEdTCCZ$v)LhDuMv4;)t$QXWc}13Hiw#l4i$`%%F4%T$#{42U906>v*I2U zeXWPAk*r_S1#JXQ2bwXySu>eKebh>Funx1b4pkec-*LTse&2zH**62H*L#L?;DTqtxbmev*X(CJ z5yckx;yme+Od_N02yz$!tTfb&wd7+$hEcb1UX$Y#`d#@Td#OBKXmt8W`Lw2s(E|Od zM*Fg#kk5+fU&-aFq*>_SOVgP+r}ZwhH2K=nYn$V0aa6pS_E0OEvpN?$=e!GFrS~^H zO^>DYKJrrDE$Yk?AIf}lV$?NR0^vc3}?@4%Xddu@Ozj*m; z8pZRIdk!y0gt%lJ+^To`@)fW9&EHHX2Y>7+ShLwJvX?y6?t&+2natOvoYRx|EDADv z7N2X$Y>(q&c9>non$2f6Z(4DRZyo(@TK?bvb?ug7A#B=EyLepM>%en|oSGoJ9@jDa E0sSo + + + 16.0 + Win32Proj + {0febafaf-cb77-41f0-8ef9-8e3ad4b4f842} + MonitorReportTool + 10.0.18362.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + true + + + false + + + $(SolutionDir)..\..\$(Platform)\$(Configuration)\$(ProjectName)\ + $(SolutionDir)..\..\$(Platform)\$(Configuration)\obj\$(ProjectName)\ + PowerToys.$(ProjectName) + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories) + + + Windows + true + dwmapi.lib;comsuppwd.lib;wbemuuid.lib;%(AdditionalDependencies) + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + dwmapi.lib;comsuppw.lib;wbemuuid.lib;%(AdditionalDependencies) + + + + + + + + + + + + + Create + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/MonitorReportTool/MonitorReportTool.vcxproj.filters b/tools/MonitorReportTool/MonitorReportTool.vcxproj.filters new file mode 100644 index 0000000000..9aad31715a --- /dev/null +++ b/tools/MonitorReportTool/MonitorReportTool.vcxproj.filters @@ -0,0 +1,55 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Header Files + + + + + Resource Files + + + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/tools/MonitorReportTool/Resource.h b/tools/MonitorReportTool/Resource.h new file mode 100644 index 0000000000..5955ede0c7 --- /dev/null +++ b/tools/MonitorReportTool/Resource.h @@ -0,0 +1,24 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by MonitorReportTool.rc + +#define IDR_MAINFRAME 128 +#define IDD_ABOUTBOX 103 +#define IDI_WINDOWSTYLESICON 107 +#define IDI_SMALLICON 108 +#define IDC_WINDOWSTYLES 109 +#ifndef IDC_STATIC +#define IDC_STATIC -1 +#endif +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NO_MFC 130 +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif diff --git a/tools/MonitorReportTool/pch.cpp b/tools/MonitorReportTool/pch.cpp new file mode 100644 index 0000000000..17305716aa --- /dev/null +++ b/tools/MonitorReportTool/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" \ No newline at end of file diff --git a/tools/MonitorReportTool/pch.h b/tools/MonitorReportTool/pch.h new file mode 100644 index 0000000000..3166a6ce10 --- /dev/null +++ b/tools/MonitorReportTool/pch.h @@ -0,0 +1,3 @@ +#pragma once + +#include \ No newline at end of file diff --git a/tools/MonitorReportTool/small.ico b/tools/MonitorReportTool/small.ico new file mode 100644 index 0000000000000000000000000000000000000000..e82442c2643edd754a5dcece07d0a1ecb79c438b GIT binary patch literal 55183 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 literal 0 HcmV?d00001