{"id":368527,"date":"2024-05-21T03:44:27","date_gmt":"2024-05-21T03:44:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=368527"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=368527","title":{"rendered":"<span>Bad Apple \u043d\u0430 \u0437\u043d\u0430\u0447\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 WinAPI<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Bad Apple<br \/><strong>\u041f\u0440\u0430\u0432\u0438\u043b\u043e 86<\/strong><\/p>\n<\/blockquote>\n<p>\u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043b\u0435\u0442 15, Bad Apple \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0432\u0435\u0449\u0435\u0439 &#8212; \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=1OfeswjPZuw\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e\u043c RISC-V \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435<\/a>, \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=B8rATsdTYvA\" rel=\"noopener noreferrer nofollow\">\u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0435<\/a>, \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=ywy-OwHejfs\" rel=\"noopener noreferrer nofollow\">\u044f\u0431\u043b\u043e\u043a\u0430\u0445<\/a>. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Bad Apple \u043d\u0430 \u0437\u043d\u0430\u0447\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 API Windows \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<h2>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<details class=\"spoiler\">\n<summary>Visual Studio 2022<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u043b\u044f Visual Studio:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b3b\/a93\/8d8\/b3ba938d869fe19ec8426da3365a0800.png\" alt=\"\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b VS\" title=\"\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b VS\" width=\"391\" height=\"421\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b3b\/a93\/8d8\/b3ba938d869fe19ec8426da3365a0800.png\"\/><\/p>\n<div><figcaption>\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b VS<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>.NET Core<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 SDK \u0432\u0435\u0440\u0441\u0438\u0438 7+:<\/p>\n<pre><code class=\"powershell\">winget install Microsoft.DotNet.SDK.7<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>ffmpeg<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"powershell\">winget install --id=Gyan.FFmpeg  -e<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e: yt-dlp<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e \u0441 YouTube, \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443<\/p>\n<pre><code class=\"powershell\">winget install yt-dlp<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>Windows 10 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0441\u0442\u043e\u043b\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430 \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c<\/h2>\n<h3>\u0426\u0432\u0435\u0442\u0430 \u0437\u043d\u0430\u0447\u043a\u043e\u0432<\/h3>\n<p>\u0420\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0431\u0443\u0434\u0435\u043c \u0432 2 \u0446\u0432\u0435\u0442\u0430\u0445 &#8212; \u0447\u0435\u0440\u043d\u044b\u0445 \u0438 \u0431\u0435\u043b\u044b\u0445. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u043a\u0430\u043a \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b &#8212; \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b Windows \u0432\u044b\u0431\u0440\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0437\u043d\u0430\u0447\u043e\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c.<\/p>\n<p>\u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0435\u043c 2 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u044b\u0445 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 Windows \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0437\u043d\u0430\u0447\u043e\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <code>.baclrw<\/code> &#8212; \u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442, \u0438 <code>.baclrb<\/code> &#8212; \u0447\u0435\u0440\u043d\u044b\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c 2 \u0438\u043a\u043e\u043d\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>.ico<\/code> \u0432 \u043f\u0430\u043f\u043a\u0435<code>C:\\badappleresources<\/code> \u0441 \u0447\u0435\u0440\u043d\u044b\u043c \u0438 \u0431\u0435\u043b\u044b\u043c \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0444\u0430\u0439\u043b <code>badapple.reg<\/code> \u0441 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code class=\"powershell\">Windows Registry Editor Version 5.00  [HKEY_CLASSES_ROOT\\.baclrb] [HKEY_CLASSES_ROOT\\.baclrb\\DefaultIcon] @=\"C:\\\\badappleresources\\\\badapple_black.ico\"  [HKEY_CLASSES_ROOT\\.baclrw] [HKEY_CLASSES_ROOT\\.baclrw\\DefaultIcon] @=\"C:\\\\badappleresources\\\\badapple_white.ico\"<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, Windows \u043d\u0430\u0447\u043d\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/91c\/51b\/ace\/91c51bacebca8c3ade4e5025d7d38433.png\" alt=\"\u0417\u043d\u0430\u0447\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\" title=\"\u0417\u043d\u0430\u0447\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\" width=\"207\" height=\"118\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/91c\/51b\/ace\/91c51bacebca8c3ade4e5025d7d38433.png\"\/><\/p>\n<div><figcaption>\u0417\u043d\u0430\u0447\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0437\u043d\u0430\u0447\u043a\u043e\u0432<\/h3>\n<p>\u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u043c. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u043a\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c. <\/p>\n<p>\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0432 Windows NT &#8212; \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a\u043e\u0435-\u0436\u0435 \u043e\u043a\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0430 \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u0430\u044f \u043f\u0430\u043f\u043a\u0430. \u0417\u043d\u0430\u0447\u0438\u0442, \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0438 \u0441 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 &#8212; \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u043a\u043e\u0432, \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438 \u0442.\u0434.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Win32 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e COM \u0432\u044b\u0437\u043e\u0432\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/shobjidl_core\/nn-shobjidl_core-ifolderview2\" rel=\"noopener noreferrer nofollow\">IFolderView2<\/a> &#8212; \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0430\u043f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u043a\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/shobjidl_core\/nf-shobjidl_core-ifolderview2-getviewmodeandiconsize\" rel=\"noopener noreferrer nofollow\">IFolderView2::GetViewModeAndIconSize<\/a> , \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/shobjidl_core\/nf-shobjidl_core-ifolderview2-setviewmodeandiconsize\" rel=\"noopener noreferrer nofollow\">IFolderView2::SetViewModeAndIconSize<\/a> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0437\u043d\u0430\u0447\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">CoInitialize(NULL); \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c COM CComPtr&lt;IFolderView2> spView; FindDesktopFolderView(IID_PPV_ARGS(&amp;spView)); \/\/\u041f\u043e\u043b\u0443\u0447\u0438\u043c IFolderView2 \u043e\u043a\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 const auto desiredSize = 67; FOLDERVIEWMODE viewMode; int iconSize; spView->GetViewModeAndIconSize(&amp;viewMode, &amp;iconSize); spView->SetViewModeAndIconSize(viewMode, desiredSize);<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 FindDesktopFolderView<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">void FindDesktopFolderView(REFIID riid, void** ppv) {     CComPtr&lt;IShellWindows> spShellWindows;     \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 IShellWindows     spShellWindows.CoCreateInstance(CLSID_ShellWindows);       CComVariant vtLoc(CSIDL_DESKTOP);     CComVariant vtEmpty;     long lhwnd;     CComPtr&lt;IDispatch> spdisp;     \/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043e\u043a\u043d\u043e \u043f\u043e \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 SW (SW_DESKTOP \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430)     spShellWindows->FindWindowSW(         &amp;vtLoc, &amp;vtEmpty,         SWC_DESKTOP, &amp;lhwnd, SWFO_NEEDDISPATCH, &amp;spdisp);       CComPtr&lt;IShellBrowser> spBrowser;     CComQIPtr&lt;IServiceProvider>(spdisp)->         QueryService(SID_STopLevelBrowser,             IID_PPV_ARGS(&amp;spBrowser));      CComPtr&lt;IShellView> spView;     \/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 IShellView \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043e\u043a\u043d\u0435     spBrowser->QueryActiveShellView(&amp;spView);      \/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 IFolderView2) \u0432 IShellView     spView->QueryInterface(riid, ppv); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0420\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>desiredSize<\/code> \u0438\u0449\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u0438\u043a\u043e\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u0422\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; 67.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a2\/445\/3e0\/6a24453e017ac6ee29334bc20d569087.png\" alt=\"\u0420\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0437\u043d\u0430\u0447\u043a\u0430 (67 - \u0441\u043b\u0435\u0432\u0430)\" title=\"\u0420\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0437\u043d\u0430\u0447\u043a\u0430 (67 - \u0441\u043b\u0435\u0432\u0430)\" width=\"766\" height=\"481\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a2\/445\/3e0\/6a24453e017ac6ee29334bc20d569087.png\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0437\u043d\u0430\u0447\u043a\u0430 (67 &#8212; \u0441\u043b\u0435\u0432\u0430)<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u043d\u0430 67 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<h3>\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 &#171;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430&#187;<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e (\u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442), \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u043a\u043e\u043d\u043e\u043a (\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435):<\/p>\n<pre><code class=\"cpp\">RECT desktop; \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c HANDLE \u043e\u043a\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 HWND hDesktop = GetDesktopWindow(); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043e\u043a\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 GetWindowRect(hDesktop, &amp;desktop);  POINT spacing; \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0448\u0438\u0440\u0438\u043d\u0443 \u0437\u043d\u0430\u0447\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438 spView->GetSpacing(&amp;spacing); auto xCount = desktop.right \/ spacing.x; auto yCount = desktop.bottom \/ spacing.y;<\/code><\/pre>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/shobjidl_core\/nf-shobjidl_core-ifolderview-getspacing\" rel=\"noopener noreferrer nofollow\">IFolderView2::GetSpacing<\/a> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043a\u043e\u043d\u043a\u0438 <strong>\u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432<\/strong> (\u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e). \u0414\u0435\u043b\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0437\u043d\u0430\u0447\u043a\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043d\u0430 \u043c\u043e\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 2560\u00d71440 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044d\u0442\u043e 34&#215;11 \u0437\u043d\u0430\u0447\u043a\u043e\u0432. \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u043e\u043d\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0437\u0436\u0435.<\/p>\n<h2>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c<\/h2>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0432\u0438\u0434\u0435\u043e<\/h3>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u0421\u043a\u0430\u0447\u0430\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<pre><code class=\"powershell\">yt-dlp \"https:\/\/www.youtube.com\/watch?v=FtutLA63Cp8\" -o \"badapple.mp4\"<\/code><\/pre>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0434\u043e 34&#215;11, \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0434\u043e 10 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443:<\/p>\n<pre><code class=\"powershell\">ffmpeg -i badapple.mp4 -s 34x12 -c:a copy -filter:v fps=10 downscaled-33x12.mp4<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 &#8212; 34 \u043d\u0430 12. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, ffmpeg \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<h3>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0438<\/h3>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u0432\u0441\u0435 \u0432\u0438\u0434\u0435\u043e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e \u043a\u043e\u0434\u0443 \u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C#, \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <code>GleamTech.VideoUltimate<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u0432\u0438\u0434\u0435\u043e \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using System.Runtime.CompilerServices; using GleamTech.Drawing; using GleamTech.VideoUltimate;  \/\/ \u0428\u0438\u0440\u0438\u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e const int WIDTH = 34; \/\/ \u0412\u044b\u0441\u043e\u0442\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e (\u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438) const int HEIGHT = 11;  \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u0411\u0415\u041b\u041e\u0413\u041e \u043f\u0438\u043a\u0441\u0435\u043b\u044f const byte BYTE_ONE = 255; \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u0427\u0415\u0420\u041d\u041e\u0413\u041e \u043f\u0438\u043a\u0441\u0435\u043b\u044f const byte BYTE_ZERO = 0; \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \"\u041f\u041e\u041a\u0420\u0410\u0421\u0418\u0422\u042c \u041f\u0418\u041a\u0421\u0415\u041b\u042c\" const byte BYTE_FRAME_PIXEL = 0; \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \"\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\" const byte BYTE_FRAME_SCREENSHOT = 1;  \/\/ \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b var outputPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), \"framedata.bapl\"); \/\/ \u041f\u043e\u0442\u043e\u043a \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 using var outputStream = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite); \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b using var videoReader = new VideoFrameReader(File.OpenRead(\"downscaled-33x12.mp4\"));  \/\/ \u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430 var buffer = new Span&lt;bool>(new bool[WIDTH * HEIGHT]);  \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0434\u0440\u044b, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b for (var i = 0; videoReader.Read(); i++) {     Console.WriteLine(i);     \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u0430\u0434\u0440 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u043a Bitmap \u0438\u0437 .NET     using var frame = videoReader.GetFrame();     using var bitmap = frame.ToSystemDrawingBitmap();     for (byte x = 0; x &lt; WIDTH; x++)     {         for (byte y = 0; y &lt; HEIGHT; y++)         {             \/\/\u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u0435             var bufferValue = WIDTH * y + x;             \/\/\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u044f (\u043a\u0430\u043d\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0432\u0438\u0434\u0435\u043e \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u043e\u0435)             var color = bitmap.GetPixel(x, y).R > 128;             if (buffer[bufferValue] != color)             {                 \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u044f                 outputStream.WriteByte(BYTE_FRAME_PIXEL);                 \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f                 outputStream.WriteByte(x);                 outputStream.WriteByte(y);                 outputStream.WriteByte(color ? BYTE_ONE : BYTE_ZERO);                 buffer[bufferValue] = color;             }         }     }     \/\/\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430     outputStream.WriteByte(BYTE_FRAME_SCREENSHOT); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f:<\/p>\n<ul>\n<li>\n<p>\u0411\u0430\u0439\u0442 <code>BYTE_FRAME_PIXEL(0)<\/code><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 <code>X<\/code> \u043f\u0438\u043a\u0441\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 <code>Y<\/code> \u043f\u0438\u043a\u0441\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<code>BYTE_ONE<\/code>  \u0438\u043b\u0438 <code>BYTE_ZERO<\/code> &#8212; \u0431\u0435\u043b\u044b\u0439 \u0438\u043b\u0438 \u0447\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0434\u0440\u0430, \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0430\u0439\u0442 <code>BYTE_FRAME_SCREENSHOT(1)<\/code> &#8212; \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442 \u044d\u0442\u043e\u0442 \u0431\u0430\u0439\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u0442)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 25% \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 &#171;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f&#187; &#8212; \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043a\u043e\u043d\u043a\u0438 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u0442\u0435\u0440\u0435 FPS \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0432\u0438\u0434\u0435\u043e &#8212; \u0431\u0443\u0434\u0443\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u043a\u043e\u043d\u043a\u0438<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b <code>framedata.bapl<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043d\u0438\u043c\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.<\/p>\n<h2>\u041a\u0430\u043a \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c<\/h2>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0443\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/shlobj_core\/nf-shlobj_core-shgetspecialfolderpatha\" rel=\"noopener noreferrer nofollow\">SHGetSpecialFolderPathA<\/a>:<\/p>\n<pre><code class=\"cpp\">\/\/ desktopPath \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 wstring - \u043f\u0443\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f   char desktop_path[MAX_PATH + 1];   SHGetSpecialFolderPathA(HWND_DESKTOP, desktop_path, CSIDL_DESKTOP, FALSE);    const auto totalScreenCapacity = desktopResolution.x * desktopResolution.y;   auto desktopPath = std::string(desktop_path);   auto desktopPathW = std::wstring(desktopPath.begin(), desktopPath.end());<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c 2 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 &#8212; \u043f\u043e\u043b\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0431\u0435\u043b\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0447\u0435\u0440\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">for (auto y = 0; y &lt; desktopResolution.y; y++)     {         for (auto x = 0; x &lt; desktopResolution.x; x++)         {             blacks[y * desktopResolution.x + x] = desktopPathW + line_separator + std::to_wstring(x) + L\"_\" + std::to_wstring(y) + black_extension;             whites[y * desktopResolution.x + x] = desktopPathW + line_separator + std::to_wstring(x) + L\"_\" + std::to_wstring(y) + white_extension;         }     }<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443, \u0432 <code>blacks<\/code> \u0438 <code>whites<\/code> \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0430 <code>C:\\Users\\[User]\\Desktop\\[x]_[y].baclr['w'|'b']<\/code> .<\/p>\n<p>\u0418\u043a\u043e\u043d\u043a\u0443 \u0444\u0430\u0439\u043b\u0430 \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0432 Win32 API \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/learn.microsoft.com\/en-gb\/windows\/win32\/api\/winbase\/nf-winbase-movefile?redirectedfrom=MSDN\" rel=\"noopener noreferrer nofollow\">MoveFile<\/a>. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c <code>i<\/code> \u0441 \u0431\u0435\u043b\u043e\u0433\u043e \u043d\u0430 \u0447\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">MoveFile(whites[i], blacks[i]);<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a &#8212; \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0430\u043a\u043e\u043c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 &#8212; \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/fileapi\/nf-fileapi-createfilew\" rel=\"noopener noreferrer nofollow\">CreateFile<\/a>, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code class=\"cpp\"> for (int i = 0; i &lt; totalScreenCapacity; i++) {     \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u0441 \u0447\u0435\u0440\u043d\u043e\u0439 \u0438\u043a\u043e\u043d\u043a\u043e\u0439 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435     handles[i] = CreateFile(blacks[i].c_str(), GENERIC_READ | GENERIC_WRITE | DELETE, 0, NULL, CREATE_ALWAYS, 0, NULL); }<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0437\u043d\u0430\u044f \u0435\u0433\u043e <code>HANDLE<\/code>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/fileapi\/nf-fileapi-setfileinformationbyhandle\" rel=\"noopener noreferrer nofollow\">SetFileInformationByHandle<\/a>. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">void RenameFileByHandle(HANDLE handle, std::wstring newName) {     auto newNameStr = newName.c_str();     \/\/ \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0434\u043b\u0438\u043d\u0435 \u0444\u0430\u0439\u043b\u0430     union     {         FILE_RENAME_INFO file_rename_info;         BYTE buffer[offsetof(FILE_RENAME_INFO, FileName[MAX_PATH])];     };      file_rename_info.ReplaceIfExists = TRUE;     file_rename_info.RootDirectory = nullptr;     \/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u043b\u0438\u043d\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430     file_rename_info.FileNameLength = (ULONG)wcslen(newNameStr) * sizeof(WCHAR);     \/\/ \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0443\u043b\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 (\u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b SetFileInformationByHandle \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043a\u043e\u043d\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \\0)     memset(file_rename_info.FileName, 0, MAX_PATH);     \/\/ \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c     memcpy_s(file_rename_info.FileName, MAX_PATH * sizeof(WCHAR), newNameStr, file_rename_info.FileNameLength);      \/\/ \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0444\u0430\u0439\u043b     SetFileInformationByHandle(handle, FileRenameInfo, &amp;buffer, sizeof buffer); }<\/code><\/pre>\n<h2>\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u044d\u043a\u0440\u0430\u043d\u0430<\/h2>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/gdiplus\/-gdiplus-gdi-start\" rel=\"noopener noreferrer nofollow\">GDI+<\/a>, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>SaveScreenshotToFile<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 SaveScreenshotToFile<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">void SaveScreenshotToFile(const std::wstring&amp; filename) {     \/\/ \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u043a\u0440\u0430\u043d\u0430     HDC hScreenDC = CreateDC(L\"DISPLAY\", NULL, NULL, NULL);      \/\/ \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u043a\u0440\u0430\u043d\u0430     int ScreenWidth = GetDeviceCaps(hScreenDC, HORZRES);     int ScreenHeight = GetDeviceCaps(hScreenDC, VERTRES);      \/\/ \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435     HDC hMemoryDC = CreateCompatibleDC(hScreenDC);     HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, ScreenWidth, ScreenHeight);     HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemoryDC, hBitmap);      \/\/ \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)     BitBlt(hMemoryDC, 0, 0, ScreenWidth, ScreenHeight, hScreenDC, 0, 0, SRCCOPY);     hBitmap = (HBITMAP)SelectObject(hMemoryDC, hOldBitmap);      \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b     BITMAPFILEHEADER bmfHeader;     BITMAPINFOHEADER bi;      bi.biSize = sizeof(BITMAPINFOHEADER);     bi.biWidth = ScreenWidth;     bi.biHeight = ScreenHeight;     bi.biPlanes = 1;     bi.biBitCount = 32;     bi.biCompression = BI_RGB;     bi.biSizeImage = 0;     bi.biXPelsPerMeter = 0;     bi.biYPelsPerMeter = 0;     bi.biClrUsed = 0;     bi.biClrImportant = 0;      DWORD dwBmpSize = ((ScreenWidth * bi.biBitCount + 31) \/ 32) * 4 * ScreenHeight;      HANDLE hDIB = GlobalAlloc(GHND, dwBmpSize);     char* lpbitmap = (char*)GlobalLock(hDIB);      \/\/ \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0442\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u0443\u0444\u0444\u0435\u0440     GetDIBits(hMemoryDC, hBitmap, 0, (UINT)ScreenHeight, lpbitmap, (BITMAPINFO*)&amp;bi, DIB_RGB_COLORS);      \/\/ \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u0441 \u0431\u0443\u0434\u0443\u0449\u0438\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u043c     HANDLE hFile = CreateFile(filename.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);      \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f     DWORD dwSizeofDIB = dwBmpSize + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);      \/\/ \u0421\u0434\u0432\u0438\u0433 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     bmfHeader.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);      \/\/\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430     bmfHeader.bfSize = dwSizeofDIB;      \/\/0x4d42 = 'BM' \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 ASCII, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     bmfHeader.bfType = 0x4D42; \/\/BM         DWORD dwBytesWritten = 0;     WriteFile(hFile, (LPSTR)&amp;bmfHeader, sizeof(BITMAPFILEHEADER), &amp;dwBytesWritten, NULL);     WriteFile(hFile, (LPSTR)&amp;bi, sizeof(BITMAPINFOHEADER), &amp;dwBytesWritten, NULL);     WriteFile(hFile, (LPSTR)lpbitmap, dwBmpSize, &amp;dwBytesWritten, NULL);      \/\/\u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432     GlobalUnlock(hDIB);     GlobalFree(hDIB);      \/\/\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b     CloseHandle(hFile);      \/\/\u041e\u0447\u0438\u0449\u0430\u0435\u043c \u043c\u0443\u0441\u043e\u0440 \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u0431\u044f     DeleteObject(hBitmap);     DeleteDC(hMemoryDC);     DeleteDC(hScreenDC); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0441\u043d\u0438\u043c\u043a\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u0430 \u0438 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/winuser\/nf-winuser-sendmessage\" rel=\"noopener noreferrer nofollow\">SendMessage<\/a> \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">void TakeScreenshot(int index){     \/\/ \u041f\u0443\u0442\u044c i-\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430     auto path = screenshot_path + L\"shot_\" + std::to_wstring(index) + L\".png\";     \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f     SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);     \/\/ \u0416\u0434\u0435\u043c DEFAULT_SLEEP_TIME \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434     std::this_thread::sleep_for(DEFAULT_SLEEP_TIME);     \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442     SaveScreenshotToFile(path); }<\/code><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>SendMessage<\/code> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e (0 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442), \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>HWND_BROADCAST<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435 \u043e\u043a\u043d\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>WM_SETTINGCHANGE<\/code> &#8212; \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043e\u043a\u043d\u0430. \u042d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u0435\u0431\u044f \u0438 \u0441\u0432\u043e\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043e\u043a\u043d\u0430.<\/p>\n<h2>\u041f\u043e\u0447\u0442\u0438 \u0444\u0438\u043d\u0430\u043b &#8212; \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0432\u043e\u0435\u0434\u0438\u043d\u043e<\/h2>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>main<\/code> \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">int main() {     \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430     auto desktopResolution = GetDesktopParams();     const auto totalScreenCapacity = desktopResolution.x * desktopResolution.y;      \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c\u0438     std::vector&lt;HANDLE> handles(totalScreenCapacity);     std::vector&lt;std::wstring> blacks(totalScreenCapacity);     std::vector&lt;std::wstring> whites(totalScreenCapacity);     FillDesktop(desktopResolution, handles, blacks, whites);      \/\/ \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 framedata.bapl     auto bytes = ReadAllBytes(pixel_source_path);     auto i = 0;      auto frame = 0;      \/\/ \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b     SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);          while (i &lt; bytes.size()) {         i++;         \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0431\u0430\u0439\u0442         char value = bytes[i];         \/\/ \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u043d\u0438\u043c\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 - \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442         if (value == BYTE_FRAME_SCREENSHOT) {             TakeScreenshot(frame);             frame++;         }         else {             \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u0446\u0432\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f             auto x = bytes[i + 1];             auto y = bytes[i + 2];             auto color = bytes[i + 3];             i += 3;              \/\/ \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b             auto position = y * desktopResolution.x + x;             RenameFileByHandle(handles[position], color == BYTE_ONE ? whites[position] : blacks[position]);         }     }     \/\/ \u0414\u0435\u043b\u0430\u0435\u043c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442     TakeScreenshot(frame);     return 0; }<\/code><\/pre>\n<p>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b <code>framedata.bapl<\/code> \u0431\u0430\u0439\u0442 \u0437\u0430 \u0431\u0430\u0439\u0442\u043e\u043c, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>.bmp<\/code> &#8212; \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u043e\u043a\u043d\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432\u0438\u0434\u0435\u043e Bad Apple. <\/p>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u044d\u043a\u0440\u0430\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0432\u0438\u0434\u0435\u043e<\/h3>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0441\u043a\u043e\u0440\u043e \u0434\u043e\u0439\u0434\u0435\u043c \u0434\u043e \u0432\u0438\u0434\u0435\u043e)<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>ffmpeg<\/code>:<\/p>\n<pre><code class=\"powershell\">ffmpeg -framerate 10 -i \"scan_%d.bmp\" output.mp4<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0432\u0443\u043a \u0432 \u0432\u0430\u0448\u0435\u043c \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435.<\/p>\n<h2>\u0424\u0438\u043d\u0430\u043b<\/h2>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65d23888aeb5569d7b3ac2fc\" data-style=\"\" id=\"65d23888aeb5569d7b3ac2fc\" width=\"\"><\/div>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Bad Apple \u043d\u0430 \u0437\u043d\u0430\u0447\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430. \u0412 \u0445\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 API Windows, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c COM \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c, \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GDI+ \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ffmpeg.<\/p>\n<p><a href=\"https:\/\/github.com\/cregennan\/badapple\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/794536\/\"> https:\/\/habr.com\/ru\/articles\/794536\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Bad Apple<br \/><strong>\u041f\u0440\u0430\u0432\u0438\u043b\u043e 86<\/strong><\/p>\n<\/blockquote>\n<p>\u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043b\u0435\u0442 15, Bad Apple \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0432\u0435\u0449\u0435\u0439 &#8212; \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=1OfeswjPZuw\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e\u043c RISC-V \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435<\/a>, \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=B8rATsdTYvA\" rel=\"noopener noreferrer nofollow\">\u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0435<\/a>, \u043d\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=ywy-OwHejfs\" rel=\"noopener noreferrer nofollow\">\u044f\u0431\u043b\u043e\u043a\u0430\u0445<\/a>. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Bad Apple \u043d\u0430 \u0437\u043d\u0430\u0447\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 API Windows \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<h2>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<details class=\"spoiler\">\n<summary>Visual Studio 2022<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u043b\u044f Visual Studio:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b VS<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>.NET Core<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 SDK \u0432\u0435\u0440\u0441\u0438\u0438 7+:<\/p>\n<pre><code class=\"powershell\">winget install Microsoft.DotNet.SDK.7<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>ffmpeg<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"powershell\">winget install --id=Gyan.FFmpeg  -e<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e: yt-dlp<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e \u0441 YouTube, \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443<\/p>\n<pre><code class=\"powershell\">winget install yt-dlp<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>Windows 10 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0441\u0442\u043e\u043b\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430 \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c<\/h2>\n<h3>\u0426\u0432\u0435\u0442\u0430 \u0437\u043d\u0430\u0447\u043a\u043e\u0432<\/h3>\n<p>\u0420\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0431\u0443\u0434\u0435\u043c \u0432 2 \u0446\u0432\u0435\u0442\u0430\u0445 &#8212; \u0447\u0435\u0440\u043d\u044b\u0445 \u0438 \u0431\u0435\u043b\u044b\u0445. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u043a\u0430\u043a \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b &#8212; \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b Windows \u0432\u044b\u0431\u0440\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0437\u043d\u0430\u0447\u043e\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c.<\/p>\n<p>\u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0435\u043c 2 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u044b\u0445 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 Windows \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0437\u043d\u0430\u0447\u043e\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <code>.baclrw<\/code> &#8212; \u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442, \u0438 <code>.baclrb<\/code> &#8212; \u0447\u0435\u0440\u043d\u044b\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c 2 \u0438\u043a\u043e\u043d\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>.ico<\/code> \u0432 \u043f\u0430\u043f\u043a\u0435<code>C:\\badappleresources<\/code> \u0441 \u0447\u0435\u0440\u043d\u044b\u043c \u0438 \u0431\u0435\u043b\u044b\u043c \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0444\u0430\u0439\u043b <code>badapple.reg<\/code> \u0441 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code class=\"powershell\">Windows Registry Editor Version 5.00  [HKEY_CLASSES_ROOT\\.baclrb] [HKEY_CLASSES_ROOT\\.baclrb\\DefaultIcon] @=\"C:\\\\badappleresources\\\\badapple_black.ico\"  [HKEY_CLASSES_ROOT\\.baclrw] [HKEY_CLASSES_ROOT\\.baclrw\\DefaultIcon] @=\"C:\\\\badappleresources\\\\badapple_white.ico\"<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, Windows \u043d\u0430\u0447\u043d\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0417\u043d\u0430\u0447\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0444\u0430\u0439\u043b\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0437\u043d\u0430\u0447\u043a\u043e\u0432<\/h3>\n<p>\u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u043c. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u043a\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c. <\/p>\n<p>\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0432 Windows NT &#8212; \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a\u043e\u0435-\u0436\u0435 \u043e\u043a\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0430 \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u0430\u044f \u043f\u0430\u043f\u043a\u0430. \u0417\u043d\u0430\u0447\u0438\u0442, \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0438 \u0441 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 &#8212; \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u043a\u043e\u0432, \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438 \u0442.\u0434.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Win32 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e COM \u0432\u044b\u0437\u043e\u0432\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/shobjidl_core\/nn-shobjidl_core-ifolderview2\" rel=\"noopener noreferrer nofollow\">IFolderView2<\/a> &#8212; \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0430\u043f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u043a\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/shobjidl_core\/nf-shobjidl_core-ifolderview2-getviewmodeandiconsize\" rel=\"noopener noreferrer nofollow\">IFolderView2::GetViewModeAndIconSize<\/a> , \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/shobjidl_core\/nf-shobjidl_core-ifolderview2-setviewmodeandiconsize\" rel=\"noopener noreferrer nofollow\">IFolderView2::SetViewModeAndIconSize<\/a> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0437\u043d\u0430\u0447\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">CoInitialize(NULL); \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c COM CComPtr&lt;IFolderView2> spView; FindDesktopFolderView(IID_PPV_ARGS(&amp;spView)); \/\/\u041f\u043e\u043b\u0443\u0447\u0438\u043c IFolderView2 \u043e\u043a\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 const auto desiredSize = 67; FOLDERVIEWMODE viewMode; int iconSize; spView->GetViewModeAndIconSize(&amp;viewMode, &amp;iconSize); spView->SetViewModeAndIconSize(viewMode, desiredSize);<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 FindDesktopFolderView<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">void FindDesktopFolderView(REFIID riid, void** ppv) {     CComPtr&lt;IShellWindows> spShellWindows;     \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 IShellWindows     spShellWindows.CoCreateInstance(CLSID_ShellWindows);       CComVariant vtLoc(CSIDL_DESKTOP);     CComVariant vtEmpty;     long lhwnd;     CComPtr&lt;IDispatch> spdisp;     \/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043e\u043a\u043d\u043e \u043f\u043e \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 SW (SW_DESKTOP \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430)     spShellWindows->FindWindowSW(         &amp;vtLoc, &amp;vtEmpty,         SWC_DESKTOP, &amp;lhwnd, SWFO_NEEDDISPATCH, &amp;spdisp);       CComPtr&lt;IShellBrowser> spBrowser;     CComQIPtr&lt;IServiceProvider>(spdisp)->         QueryService(SID_STopLevelBrowser,             IID_PPV_ARGS(&amp;spBrowser));      CComPtr&lt;IShellView> spView;     \/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 IShellView \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043e\u043a\u043d\u0435     spBrowser->QueryActiveShellView(&amp;spView);      \/\/ \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 IFolderView2) \u0432 IShellView     spView->QueryInterface(riid, ppv); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0420\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>desiredSize<\/code> \u0438\u0449\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u0438\u043a\u043e\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u0422\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8212; 67.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0437\u043d\u0430\u0447\u043a\u0430 (67 &#8212; \u0441\u043b\u0435\u0432\u0430)<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u043d\u0430 67 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<h3>\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 &#171;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430&#187;<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e (\u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442), \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u043a\u043e\u043d\u043e\u043a (\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435):<\/p>\n<pre><code class=\"cpp\">RECT desktop; \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c HANDLE \u043e\u043a\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 HWND hDesktop = GetDesktopWindow(); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043e\u043a\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 GetWindowRect(hDesktop, &amp;desktop);  POINT spacing; \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0448\u0438\u0440\u0438\u043d\u0443 \u0437\u043d\u0430\u0447\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438 spView->GetSpacing(&amp;spacing); auto xCount = desktop.right \/ spacing.x; auto yCount = desktop.bottom \/ spacing.y;<\/code><\/pre>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/shobjidl_core\/nf-shobjidl_core-ifolderview-getspacing\" rel=\"noopener noreferrer nofollow\">IFolderView2::GetSpacing<\/a> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043a\u043e\u043d\u043a\u0438 <strong>\u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432<\/strong> (\u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e). \u0414\u0435\u043b\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0437\u043d\u0430\u0447\u043a\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043d\u0430 \u043c\u043e\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 2560\u00d71440 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044d\u0442\u043e 34&#215;11 \u0437\u043d\u0430\u0447\u043a\u043e\u0432. \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u043e\u043d\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0437\u0436\u0435.<\/p>\n<h2>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c<\/h2>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0432\u0438\u0434\u0435\u043e<\/h3>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u0421\u043a\u0430\u0447\u0430\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<pre><code class=\"powershell\">yt-dlp \"https:\/\/www.youtube.com\/watch?v=FtutLA63Cp8\" -o \"badapple.mp4\"<\/code><\/pre>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0434\u043e 34&#215;11, \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0434\u043e 10 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443:<\/p>\n<pre><code class=\"powershell\">ffmpeg -i badapple.mp4 -s 34x12 -c:a copy -filter:v fps=10 downscaled-33x12.mp4<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 &#8212; 34 \u043d\u0430 12. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, ffmpeg \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<h3>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0438<\/h3>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u0432\u0441\u0435 \u0432\u0438\u0434\u0435\u043e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e \u043a\u043e\u0434\u0443 \u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C#, \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <code>GleamTech.VideoUltimate<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u0432\u0438\u0434\u0435\u043e \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using System.Runtime.CompilerServices; using GleamTech.Drawing; using GleamTech.VideoUltimate;  \/\/ \u0428\u0438\u0440\u0438\u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e const int WIDTH = 34; \/\/ \u0412\u044b\u0441\u043e\u0442\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e (\u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438) const int HEIGHT = 11;  \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u0411\u0415\u041b\u041e\u0413\u041e \u043f\u0438\u043a\u0441\u0435\u043b\u044f const byte BYTE_ONE = 255; \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u0427\u0415\u0420\u041d\u041e\u0413\u041e \u043f\u0438\u043a\u0441\u0435\u043b\u044f const byte BYTE_ZERO = 0; \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \"\u041f\u041e\u041a\u0420\u0410\u0421\u0418\u0422\u042c \u041f\u0418\u041a\u0421\u0415\u041b\u042c\" const byte BYTE_FRAME_PIXEL = 0; \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \"\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\" const byte BYTE_FRAME_SCREENSHOT = 1;  \/\/ \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b var outputPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), \"framedata.bapl\"); \/\/ \u041f\u043e\u0442\u043e\u043a \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 using var outputStream = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite); \/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b using var videoReader = new VideoFrameReader(File.OpenRead(\"downscaled-33x12.mp4\"));  \/\/ \u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430 var buffer = new Span&lt;bool>(new bool[WIDTH * HEIGHT]);  \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0434\u0440\u044b, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b for (var i = 0; videoReader.Read(); i++) {     Console.WriteLine(i);     \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u0430\u0434\u0440 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u043a Bitmap \u0438\u0437 .NET     using var frame = videoReader.GetFrame();     using var bitmap = frame.ToSystemDrawingBitmap();     for (byte x = 0; x &lt; WIDTH; x++)     {         for (byte y = 0; y &lt; HEIGHT; y++)         {             \/\/\u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u0435             var bufferValue = WIDTH * y + x;             \/\/\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u044f (\u043a\u0430\u043d\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0432\u0438\u0434\u0435\u043e \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u043e\u0435)             var color = bitmap.GetPixel(x, y).R > 128;             if (buffer[bufferValue] != color)             {                 \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u044f                 outputStream.WriteByte(BYTE_FRAME_PIXEL);                 \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f                 outputStream.WriteByte(x);                 outputStream.WriteByte(y);                 outputStream.WriteByte(color ? BYTE_ONE : BYTE_ZERO);                 buffer[bufferValue] = color;             }         }     }     \/\/\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430     outputStream.WriteByte(BYTE_FRAME_SCREENSHOT); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441 \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f:<\/p>\n<ul>\n<li>\n<p>\u0411\u0430\u0439\u0442 <code>BYTE_FRAME_PIXEL(0)<\/code><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 <code>X<\/code> \u043f\u0438\u043a\u0441\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 <code>Y<\/code> \u043f\u0438\u043a\u0441\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<code>BYTE_ONE<\/code>  \u0438\u043b\u0438 <code>BYTE_ZERO<\/code> &#8212; \u0431\u0435\u043b\u044b\u0439 \u0438\u043b\u0438 \u0447\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0434\u0440\u0430, \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0430\u0439\u0442 <code>BYTE_FRAME_SCREENSHOT(1)<\/code> &#8212; \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442 \u044d\u0442\u043e\u0442 \u0431\u0430\u0439\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u0442)<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 25% \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 &#171;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f&#187; &#8212; \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043a\u043e\u043d\u043a\u0438 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u0442\u0435\u0440\u0435 FPS \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0432\u0438\u0434\u0435\u043e &#8212; \u0431\u0443\u0434\u0443\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u043a\u043e\u043d\u043a\u0438<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b <code>framedata.bapl<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043d\u0438\u043c\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.<\/p>\n<h2>\u041a\u0430\u043a \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c<\/h2>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0443\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/shlobj_core\/nf-shlobj_core-shgetspecialfolderpatha\" rel=\"noopener noreferrer nofollow\">SHGetSpecialFolderPathA<\/a>:<\/p>\n<pre><code class=\"cpp\">\/\/ desktopPath \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 wstring - \u043f\u0443\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f   char desktop_path[MAX_PATH + 1];   SHGetSpecialFolderPathA(HWND_DESKTOP, desktop_path, CSIDL_DESKTOP, FALSE);    const auto totalScreenCapacity = desktopResolution.x * desktopResolution.y;   auto desktopPath = std::string(desktop_path);   auto desktopPathW = std::wstring(desktopPath.begin(), desktopPath.end());<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c 2 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 &#8212; \u043f\u043e\u043b\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0431\u0435\u043b\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0447\u0435\u0440\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">for (auto y = 0; y &lt; desktopResolution.y; y++)     {         for (auto x = 0; x &lt; desktopResolution.x; x++)         {             blacks[y * desktopResolution.x + x] <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-368527","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=368527"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368527\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=368527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=368527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=368527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}