pch.h
  1  #pragma once
  2  #define NOMINMAX
  3  #define WIN32_LEAN_AND_MEAN
  4  
  5  #include <initguid.h>
  6  #include <windows.h>
  7  #include <Unknwn.h>
  8  #include <restrictederrorinfo.h>
  9  #include <hstring.h>
 10  #include <dxgi.h>
 11  #include <d3d11.h>
 12  #include <d3d11_4.h>
 13  #include <dxgi1_6.h>
 14  #include <dxgidebug.h>
 15  #include <d2d1_3.h>
 16  #include <dwrite.h>
 17  #include <dwmapi.h>
 18  #include <windows.graphics.directX.direct3d11.interop.h>
 19  #include <windows.graphics.capture.interop.h>
 20  #include <windows.graphics.capture.h>
 21  
 22  #include <thread>
 23  #include <functional>
 24  #include <cassert>
 25  #include <cinttypes>
 26  #include <iomanip>
 27  #include <limits>
 28  #include <sstream>
 29  #include <filesystem>
 30  #include <string_view>
 31  #include <chrono>
 32  #include <stdio.h>
 33  
 34  // Undefine GetCurrentTime macro to prevent
 35  // conflict with Storyboard::GetCurrentTime
 36  #undef GetCurrentTime
 37  
 38  #include <winrt/Windows.Foundation.h>
 39  #include <winrt/Windows.Foundation.Collections.h>
 40  #include <winrt/Windows.ApplicationModel.Activation.h>
 41  #include <winrt/Microsoft.UI.Composition.h>
 42  #include <winrt/Microsoft.UI.Xaml.h>
 43  #include <winrt/Microsoft.UI.Xaml.Controls.h>
 44  #include <winrt/Microsoft.UI.Xaml.Controls.Primitives.h>
 45  #include <winrt/Microsoft.UI.Xaml.Data.h>
 46  #include <winrt/Microsoft.UI.Xaml.Interop.h>
 47  #include <winrt/Microsoft.UI.Xaml.Markup.h>
 48  #include <winrt/Microsoft.UI.Xaml.Media.h>
 49  #include <winrt/Microsoft.UI.Xaml.Navigation.h>
 50  #include <winrt/Microsoft.UI.Xaml.Shapes.h>
 51  #include <winrt/Microsoft.UI.Dispatching.h>
 52  #include <winrt/Microsoft.Windows.ApplicationModel.Resources.h>
 53  #include <winrt/Windows.Graphics.DirectX.h>
 54  #include <winrt/Windows.Graphics.DirectX.Direct3d11.h>
 55  #include <winrt/Windows.Graphics.Capture.h>
 56  
 57  #include <inspectable.h>
 58  
 59  #include <wil/cppwinrt_helpers.h>
 60  #include <wil/resource.h>
 61  #include <wil/com.h>
 62  
 63  #include <common/logger/logger.h>
 64  #include <common/utils/winapi_error.h>
 65  
 66  namespace winrt
 67  {
 68      using namespace Windows::Foundation;
 69      using namespace Windows::Foundation::Numerics;
 70      using namespace Windows::Graphics;
 71      using namespace Windows::Graphics::Capture;
 72      using namespace Windows::Graphics::DirectX;
 73      using namespace Windows::Graphics::DirectX::Direct3D11;
 74      using namespace Microsoft::UI::Xaml;
 75      using namespace Microsoft::UI::Xaml::Controls;
 76      using namespace Microsoft::UI::Xaml::Navigation;
 77      using namespace Microsoft::Windows::ApplicationModel::Resources;
 78  }
 79  
 80  template<typename Func>
 81  [[nodiscard]] std::thread SpawnLoggedThread(const wchar_t* description, Func&& f)
 82  {
 83      return std::thread{ [f = std::move(f), description = std::wstring{ description }] {
 84          try
 85          {
 86              SetThreadDescription(GetCurrentThread(), description.c_str());
 87              f();
 88          }
 89          catch (const std::exception& ex)
 90          {
 91              Logger::error(L"{}:", description);
 92              Logger::error("{}", ex.what());
 93          }
 94          catch (winrt::hresult_error const& ex)
 95          {
 96              Logger::error(L"{}: {}", description, ex.message().c_str());
 97          }
 98          catch (...)
 99          {
100              Logger::error(L"{} unknown error: {}", description, get_last_error_or_default(GetLastError()));
101          }
102      } };
103  }
104  
105  #define WM_CURSOR_LEFT_MONITOR (WM_USER + 1)