Advertisement
Guest User

Untitled

a guest
May 4th, 2022
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.17 KB | None | 0 0
  1. #include "Nvidia.h"
  2. #include <comdef.h>
  3. #include <corecrt.h>
  4. #include <stdarg.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #pragma warning(disable : 4996)
  10.  
  11. static HWND win;
  12.  
  13. /*
  14. Window functions
  15. */
  16.  
  17. auto Nvidia::window_set_style() -> void {
  18. int i = 0;
  19.  
  20. i = (int)GetWindowLong(win, -20);
  21.  
  22. SetWindowLongPtr(win, -20, (LONG_PTR)(i | 0x20));
  23. }
  24.  
  25. auto Nvidia::window_set_transparency() -> void {
  26. MARGINS margin;
  27. UINT opacity_flag, color_key_flag, color_key = 0;
  28. UINT opacity = 0;
  29.  
  30. margin.cyBottomHeight = -1;
  31. margin.cxLeftWidth = -1;
  32. margin.cxRightWidth = -1;
  33. margin.cyTopHeight = -1;
  34.  
  35. DwmExtendFrameIntoClientArea(win, &margin);
  36.  
  37. opacity_flag = 0x02;
  38. color_key_flag = 0x01;
  39. color_key = 0x000000;
  40. opacity = 0xFF;
  41.  
  42. SetLayeredWindowAttributes(win, color_key, opacity, opacity_flag);
  43. }
  44.  
  45. auto Nvidia::window_set_top_most() -> void {
  46. SetWindowPos(win, HWND_TOPMOST, 0, 0, 0, 0, 0x0002 | 0x0001);
  47. }
  48.  
  49. auto Nvidia::retrieve_window() -> HWND { return win; }
  50.  
  51. // Hijacking method down here.
  52.  
  53. auto Nvidia::window_init() -> BOOL {
  54. win = FindWindow("CEF-OSC-WIDGET", "NVIDIA GeForce Overlay");
  55. if (!win)
  56. return FALSE;
  57.  
  58. Nvidia::window_set_style();
  59. Nvidia::window_set_transparency();
  60. Nvidia::window_set_top_most();
  61.  
  62. ShowWindow(win, SW_SHOW);
  63.  
  64. return TRUE;
  65. }
  66.  
  67. /*
  68. Overlay functions
  69. */
  70.  
  71. ID2D1Factory* d2d_factory;
  72. ID2D1HwndRenderTarget* tar;
  73. IDWriteFactory* write_factory;
  74. ID2D1SolidColorBrush* brush;
  75. ID2D1SolidColorBrush* blue_brush;
  76. ID2D1SolidColorBrush* purple_brush;
  77. ID2D1SolidColorBrush* red_brush;
  78. ID2D1SolidColorBrush* green_brush;
  79. ID2D1SolidColorBrush* yellow_brush;
  80. IDWriteTextFormat* format;
  81.  
  82. auto Nvidia::d2d_shutdown() -> void {
  83. // Release
  84. tar->Release();
  85. write_factory->Release();
  86. brush->Release();
  87. red_brush->Release();
  88. blue_brush->Release();
  89. green_brush->Release();
  90. yellow_brush->Release();
  91. purple_brush->Release();
  92. d2d_factory->Release();
  93. }
  94.  
  95. auto Nvidia::init_d2d() -> BOOL {
  96. HRESULT ret;
  97. RECT rc;
  98.  
  99. // Initialize D2D here
  100. ret = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2d_factory);
  101. if (FAILED(ret))
  102. return FALSE;
  103.  
  104. ret =
  105. DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory),
  106. (IUnknown**)(&write_factory));
  107. if (FAILED(ret))
  108. return FALSE;
  109.  
  110. write_factory->CreateTextFormat(
  111. L"Consolas", NULL, DWRITE_FONT_WEIGHT_REGULAR, DWRITE_FONT_STYLE_NORMAL,
  112. DWRITE_FONT_STRETCH_NORMAL, 13.0, L"en-us", &format);
  113.  
  114. GetClientRect(Nvidia::retrieve_window(), &rc);
  115.  
  116. ret = d2d_factory->CreateHwndRenderTarget(
  117. D2D1::RenderTargetProperties(
  118. D2D1_RENDER_TARGET_TYPE_DEFAULT,
  119. D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN,
  120. D2D1_ALPHA_MODE_PREMULTIPLIED)),
  121. D2D1::HwndRenderTargetProperties(
  122. Nvidia::retrieve_window(),
  123. D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)),
  124. &tar);
  125. if (FAILED(ret))
  126. return FALSE;
  127.  
  128. tar->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White), &brush);
  129. tar->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Red), &red_brush);
  130. tar->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::LimeGreen), &green_brush);
  131. tar->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Blue), &blue_brush);
  132. tar->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Yellow), &yellow_brush);
  133. tar->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Purple), &purple_brush);
  134.  
  135. return TRUE;
  136. }
  137.  
  138. auto Nvidia::begin_scene() -> void { tar->BeginDraw(); }
  139.  
  140. auto Nvidia::end_scene() -> void { tar->EndDraw(); }
  141.  
  142. auto Nvidia::clear_scene() -> void { tar->Clear(); }
  143.  
  144. auto Nvidia::draw_text_white(int x, int y, const char* str, ...) -> void {
  145. char buf[4096];
  146. int len = 0;
  147. wchar_t b[256];
  148.  
  149. // if (!draw) // no need for it.
  150. // return;
  151.  
  152. va_list arg_list;
  153. va_start(arg_list, str);
  154. vsnprintf(buf, sizeof(buf), str, arg_list);
  155. va_end(arg_list);
  156.  
  157. len = strlen(buf);
  158. mbstowcs(b, buf, len);
  159.  
  160. tar->DrawText(b, len, format, D2D1::RectF(x, y, 1920, 1080), brush,
  161. D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
  162. }
  163.  
  164. auto Nvidia::draw_text_purple(int x, int y, const char* str, ...) -> void {
  165. char buf[4096];
  166. int len = 0;
  167. wchar_t b[256];
  168.  
  169. // if (!draw) // no need for it.
  170. // return;
  171.  
  172. va_list arg_list;
  173. va_start(arg_list, str);
  174. vsnprintf(buf, sizeof(buf), str, arg_list);
  175. va_end(arg_list);
  176.  
  177. len = strlen(buf);
  178. mbstowcs(b, buf, len);
  179.  
  180. tar->DrawText(b, len, format, D2D1::RectF(x, y, 1920, 1080), purple_brush,
  181. D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
  182. }
  183.  
  184. auto Nvidia::draw_text_blue(int x, int y, const char* str, ...) -> void {
  185. char buf[4096];
  186. int len = 0;
  187. wchar_t b[256];
  188.  
  189. // if (!draw) // no need for it.
  190. // return;
  191.  
  192. va_list arg_list;
  193. va_start(arg_list, str);
  194. vsnprintf(buf, sizeof(buf), str, arg_list);
  195. va_end(arg_list);
  196.  
  197. len = strlen(buf);
  198. mbstowcs(b, buf, len);
  199.  
  200. tar->DrawText(b, len, format, D2D1::RectF(x, y, 1920, 1080), blue_brush,
  201. D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
  202. }
  203.  
  204.  
  205. auto Nvidia::draw_text_red(int x, int y, const char* str, ...) -> void {
  206. char buf[4096];
  207. int len = 0;
  208. wchar_t b[256];
  209.  
  210. // if (!draw) // no need for it.
  211. // return;
  212.  
  213. va_list arg_list;
  214. va_start(arg_list, str);
  215. vsnprintf(buf, sizeof(buf), str, arg_list);
  216. va_end(arg_list);
  217.  
  218. len = strlen(buf);
  219. mbstowcs(b, buf, len);
  220.  
  221. tar->DrawText(b, len, format, D2D1::RectF(x, y, 1920, 1080), red_brush,
  222. D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
  223. }
  224.  
  225. auto Nvidia::draw_text_green(int x, int y, const char* str, ...) -> void {
  226. char buf[4096];
  227. int len = 0;
  228. wchar_t b[256];
  229.  
  230. // if (!draw) // no need for it.
  231. // return;
  232.  
  233. va_list arg_list;
  234. va_start(arg_list, str);
  235. vsnprintf(buf, sizeof(buf), str, arg_list);
  236. va_end(arg_list);
  237.  
  238. len = strlen(buf);
  239. mbstowcs(b, buf, len);
  240.  
  241. tar->DrawText(b, len, format, D2D1::RectF(x, y, 1920, 1080), green_brush,
  242. D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
  243. }
  244.  
  245. auto Nvidia::draw_text_yellow(int x, int y, const char* str, ...) -> void {
  246. char buf[4096];
  247. int len = 0;
  248. wchar_t b[256];
  249.  
  250. // if (!draw) // no need for it.
  251. // return;
  252.  
  253. va_list arg_list;
  254. va_start(arg_list, str);
  255. vsnprintf(buf, sizeof(buf), str, arg_list);
  256. va_end(arg_list);
  257.  
  258. len = strlen(buf);
  259. mbstowcs(b, buf, len);
  260.  
  261. tar->DrawText(b, len, format, D2D1::RectF(x, y, 1920, 1080), yellow_brush,
  262. D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
  263. }
  264.  
  265. auto Nvidia::draw_line(int x, int y, int x2, int y2, float thickness, ...)-> void {
  266. tar->DrawLine(D2D1::Point2F(x, y), D2D1::Point2F(x2, y2), red_brush, thickness);
  267. }
  268.  
  269. auto Nvidia::clear_screen() -> void {
  270. Nvidia::begin_scene();
  271. Nvidia::clear_scene();
  272. Nvidia::end_scene();
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement