<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x435; Latest Topics</title><link>https://forum.radiodar.ru/forum/108-sistemnye/</link><description>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x435; Latest Topics</description><language>en</language><item><title>RDVCR - &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x430; &#x434;&#x43B;&#x44F; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x437;&#x430;&#x43A;&#x430;&#x437;&#x43E;&#x432; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x43D;&#x435;&#x442; &#x43C;&#x430;&#x433;&#x430;&#x437;&#x438;&#x43D;&#x430; "&#x420;&#x430;&#x434;&#x438;&#x43E;&#x434;&#x430;&#x440;"</title><link>https://forum.radiodar.ru/topic/9215-rdvcr-programma-dlja-zapisi-sborki-zakazov-internet-magazina-radiodar/</link><description><![CDATA[<p>
	Постоянные поиски видеорегистраторов для нашего отдела сборки заказов были омрачены дополнительными сложностями в виде новых кодировщиков стандарта H.265. Старые версии ПО для видеозаписей на сервер поддерживали только 264 версию, и после приобретения камер высокого разрешения 4к встал вопрос: покупать новые версии программ видеорегистрации, либо написать самому. 
</p>

<p>
	Решили сами сделать так, как нам будет удобно, да и в случае обновления стандартов и протоколов будет легко адаптировать её.
</p>

<p>
	Основные требования: 
</p>

<p>
	1) Всегда поверх всех окон - оператор не должен закрывать, сворачивать либо убирать окно записи, программа всегда должна быть на виду сборщика;
</p>

<p>
	2) Программа должна принимать номер заказа - будет использоваться для названия видеофайла для облегчения последующего поиска по номеру заказа. Причем, пока оператор не введет номер заказа - кнопка начала записи должна быть неактивной;
</p>

<p>
	3) После нажатия "СТАРТ ЗАПИСИ" должно быть окно контроля действий сборщика, а также броская мигающая надпись о текущем процессе записи;
</p>

<p>
	4) После окончания записи видеофайл должен сохраняться на выбранный диск с названием, содержащим номер заказа + дату файла. После сохранения необходимо проверить успешность выгрузки файла, если все отлично - выдать уведомление. Затем стереть содержимое поля ввода номера заказа для подготовки ввода следующего номера;
</p>

<p>
	5) Дополнительно должны проверяться все необходимые зависимости и обрабатываться возможные ошибки с выводом информации об ошибке:
</p>

<p>
	5.1 - не установлен VLC x32
</p>

<p>
	5.2 - нет второго диска для сохранения файлов
</p>

<p>
	 
</p>

<p>
	Решение задачи:
</p>

<p>
	Используем бесплатный стек Visual Studio под приложение .NET для Windows desktop. Создадим новый проект, выбираем .NET Desktop Development (Разработка классических приложений .NET) - он необходим для создания Windows Forms.
</p>

<p>
	Далее открываем Form1 и указываем код (ver.3.1):
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_6898_5" style=""><span class="kwd">using</span><span class="pln"> </span><span class="typ">System</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">using</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Drawing</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">using</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="pln">IO</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">using</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Windows</span><span class="pun">.</span><span class="typ">Forms</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">using</span><span class="pln"> </span><span class="typ">Vlc</span><span class="pun">.</span><span class="typ">DotNet</span><span class="pun">.</span><span class="typ">Forms</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">using</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Runtime</span><span class="pun">.</span><span class="typ">InteropServices</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">namespace</span><span class="pln"> </span><span class="typ">RecordingApp</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">public</span><span class="pln"> partial </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Form1</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Form</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Windows</span><span class="pun">.</span><span class="typ">Forms</span><span class="pun">.</span><span class="typ">Timer</span><span class="pln"> blinkTimer</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">Panel</span><span class="pln"> statusPanel</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">Label</span><span class="pln"> lblStatus</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">VlcControl</span><span class="pln"> vlcControl</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">TextBox</span><span class="pln"> txtOrderNumber</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">Button</span><span class="pln"> btnStart</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">Button</span><span class="pln"> btnStop</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">bool</span><span class="pln"> isRecording </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">

        </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">Form1</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">CreateUI</span><span class="pun">();</span><span class="pln">
            blinkTimer </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Windows</span><span class="pun">.</span><span class="typ">Forms</span><span class="pun">.</span><span class="typ">Timer</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Interval</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">500</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            blinkTimer</span><span class="pun">.</span><span class="typ">Tick</span><span class="pln"> </span><span class="pun">+=</span><span class="pln"> </span><span class="typ">BlinkTimer_Tick</span><span class="pun">;</span><span class="pln">
            blinkTimer</span><span class="pun">.</span><span class="typ">Start</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Запускаем сразу для удержания TopMost</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">[</span><span class="typ">DllImport</span><span class="pun">(</span><span class="str">"user32.dll"</span><span class="pun">)]</span><span class="pln">
        </span><span class="pun">[</span><span class="kwd">return</span><span class="pun">:</span><span class="pln"> </span><span class="typ">MarshalAs</span><span class="pun">(</span><span class="typ">UnmanagedType</span><span class="pun">.</span><span class="typ">Bool</span><span class="pun">)]</span><span class="pln">
        </span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">extern</span><span class="pln"> </span><span class="kwd">bool</span><span class="pln"> </span><span class="typ">SetWindowPos</span><span class="pun">(</span><span class="typ">IntPtr</span><span class="pln"> hWnd</span><span class="pun">,</span><span class="pln"> </span><span class="typ">IntPtr</span><span class="pln"> hWndInsertAfter</span><span class="pun">,</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> X</span><span class="pun">,</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> Y</span><span class="pun">,</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> cx</span><span class="pun">,</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> cy</span><span class="pun">,</span><span class="pln"> </span><span class="typ">uint</span><span class="pln"> uFlags</span><span class="pun">);</span><span class="pln">

        </span><span class="kwd">static</span><span class="pln"> readonly </span><span class="typ">IntPtr</span><span class="pln"> HWND_TOPMOST </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">IntPtr</span><span class="pun">(-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> </span><span class="typ">uint</span><span class="pln"> SWP_NOSIZE </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0x0001</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> </span><span class="typ">uint</span><span class="pln"> SWP_NOMOVE </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0x0002</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">const</span><span class="pln"> </span><span class="typ">uint</span><span class="pln"> TOPMOST_FLAGS </span><span class="pun">=</span><span class="pln"> SWP_NOMOVE </span><span class="pun">|</span><span class="pln"> SWP_NOSIZE</span><span class="pun">;</span><span class="pln">

        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">CreateUI</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Контроль сборки заказов"</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Size</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Size</span><span class="pun">(</span><span class="lit">900</span><span class="pun">,</span><span class="pln"> </span><span class="lit">700</span><span class="pun">);</span><span class="pln">
            </span><span class="com">// 1. Всегда поверх всех окон</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">TopMost</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">TopMost</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">TopMost</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">WindowState</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">FormWindowState</span><span class="pun">.</span><span class="typ">Normal</span><span class="pun">;</span><span class="pln">

            </span><span class="com">// 2. Убираем кнопки Свернуть, Развернуть и Закрыть (крестик)</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">ControlBox</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">

            </span><span class="com">// 3. Запрещаем изменять размер окна (опционально, для красоты)</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">FormBorderStyle</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">FormBorderStyle</span><span class="pun">.</span><span class="typ">FixedSingle</span><span class="pun">;</span><span class="pln">

            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">StartPosition</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">FormStartPosition</span><span class="pun">.</span><span class="typ">CenterScreen</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">FromArgb</span><span class="pun">(</span><span class="lit">240</span><span class="pun">,</span><span class="pln"> </span><span class="lit">240</span><span class="pun">,</span><span class="pln"> </span><span class="lit">240</span><span class="pun">);</span><span class="pln">

            </span><span class="typ">Panel</span><span class="pln"> topPanel </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Panel</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Dock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">DockStyle</span><span class="pun">.</span><span class="typ">Top</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Height</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">80</span><span class="pun">,</span><span class="pln"> </span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">FromArgb</span><span class="pun">(</span><span class="lit">220</span><span class="pun">,</span><span class="pln"> </span><span class="lit">220</span><span class="pun">,</span><span class="pln"> </span><span class="lit">220</span><span class="pun">)</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            </span><span class="typ">Label</span><span class="pln"> lblOrder </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Label</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Номер заказа:"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Location</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Point</span><span class="pun">(</span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">28</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Size</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Size</span><span class="pun">(</span><span class="lit">130</span><span class="pun">,</span><span class="pln"> </span><span class="lit">25</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Font</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">(</span><span class="str">"Segoe UI"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11F</span><span class="pun">,</span><span class="pln"> </span><span class="typ">FontStyle</span><span class="pun">.</span><span class="typ">Bold</span><span class="pun">)</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            txtOrderNumber </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">TextBox</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Location</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Point</span><span class="pun">(</span><span class="lit">160</span><span class="pun">,</span><span class="pln"> </span><span class="lit">25</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Size</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Size</span><span class="pun">(</span><span class="lit">250</span><span class="pun">,</span><span class="pln"> </span><span class="lit">27</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Font</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">(</span><span class="str">"Segoe UI"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11F</span><span class="pun">),</span><span class="pln"> </span><span class="typ">TextAlign</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">HorizontalAlignment</span><span class="pun">.</span><span class="typ">Center</span><span class="pln"> </span><span class="pun">};</span><span class="pln">

            btnStart </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Button</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"▶ СТАРТ ЗАПИСИ"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Location</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Point</span><span class="pun">(</span><span class="lit">430</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Size</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Size</span><span class="pun">(</span><span class="lit">170</span><span class="pun">,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">),</span><span class="pln"> </span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">LightGreen</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Font</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">(</span><span class="str">"Segoe UI"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11F</span><span class="pun">,</span><span class="pln"> </span><span class="typ">FontStyle</span><span class="pun">.</span><span class="typ">Bold</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            btnStart</span><span class="pun">.</span><span class="typ">Click</span><span class="pln"> </span><span class="pun">+=</span><span class="pln"> </span><span class="typ">BtnStart_Click</span><span class="pun">;</span><span class="pln">

            btnStop </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Button</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"⏹ СТОП ЗАПИСИ"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Location</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Point</span><span class="pun">(</span><span class="lit">620</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Size</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Size</span><span class="pun">(</span><span class="lit">170</span><span class="pun">,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">),</span><span class="pln"> </span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">LightCoral</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Font</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">(</span><span class="str">"Segoe UI"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11F</span><span class="pun">,</span><span class="pln"> </span><span class="typ">FontStyle</span><span class="pun">.</span><span class="typ">Bold</span><span class="pun">),</span><span class="pln"> </span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            btnStop</span><span class="pun">.</span><span class="typ">Click</span><span class="pln"> </span><span class="pun">+=</span><span class="pln"> </span><span class="typ">BtnStop_Click</span><span class="pun">;</span><span class="pln">

            txtOrderNumber</span><span class="pun">.</span><span class="typ">TextChanged</span><span class="pln"> </span><span class="pun">+=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">s</span><span class="pun">,</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> btnStart</span><span class="pun">.</span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">!</span><span class="pln">string</span><span class="pun">.</span><span class="typ">IsNullOrWhiteSpace</span><span class="pun">(</span><span class="pln">txtOrderNumber</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="pun">!</span><span class="pln">isRecording</span><span class="pun">;</span><span class="pln">

            topPanel</span><span class="pun">.</span><span class="typ">Controls</span><span class="pun">.</span><span class="typ">AddRange</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Control</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> lblOrder</span><span class="pun">,</span><span class="pln"> txtOrderNumber</span><span class="pun">,</span><span class="pln"> btnStart</span><span class="pun">,</span><span class="pln"> btnStop </span><span class="pun">});</span><span class="pln">

            statusPanel </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Panel</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Dock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">DockStyle</span><span class="pun">.</span><span class="typ">Top</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Height</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">70</span><span class="pun">,</span><span class="pln"> </span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">DarkRed</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Visible</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            lblStatus </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Label</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Font</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">(</span><span class="str">"Segoe UI"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20F</span><span class="pun">,</span><span class="pln"> </span><span class="typ">FontStyle</span><span class="pun">.</span><span class="typ">Bold</span><span class="pun">),</span><span class="pln"> </span><span class="typ">ForeColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">White</span><span class="pun">,</span><span class="pln"> </span><span class="typ">TextAlign</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ContentAlignment</span><span class="pun">.</span><span class="typ">MiddleCenter</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Dock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">DockStyle</span><span class="pun">.</span><span class="typ">Fill</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            statusPanel</span><span class="pun">.</span><span class="typ">Controls</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">lblStatus</span><span class="pun">);</span><span class="pln">

            vlcControl </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">VlcControl</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">Dock</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">DockStyle</span><span class="pun">.</span><span class="typ">Fill</span><span class="pun">,</span><span class="pln"> </span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">Black</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
            </span><span class="pun">((</span><span class="typ">System</span><span class="pun">.</span><span class="typ">ComponentModel</span><span class="pun">.</span><span class="typ">ISupportInitialize</span><span class="pun">)</span><span class="pln">vlcControl</span><span class="pun">).</span><span class="typ">BeginInit</span><span class="pun">();</span><span class="pln">
            vlcControl</span><span class="pun">.</span><span class="typ">VlcLibDirectoryNeeded</span><span class="pln"> </span><span class="pun">+=</span><span class="pln"> </span><span class="typ">OnVlcLibDirectoryNeeded</span><span class="pun">;</span><span class="pln">
            </span><span class="pun">((</span><span class="typ">System</span><span class="pun">.</span><span class="typ">ComponentModel</span><span class="pun">.</span><span class="typ">ISupportInitialize</span><span class="pun">)</span><span class="pln">vlcControl</span><span class="pun">).</span><span class="typ">EndInit</span><span class="pun">();</span><span class="pln">

            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Controls</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">vlcControl</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Controls</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">statusPanel</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Controls</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">topPanel</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">OnVlcLibDirectoryNeeded</span><span class="pun">(</span><span class="pln">object sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">VlcLibDirectoryNeededEventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            string vlcPath </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@</span><span class="str">"C:\Program Files (x86)\VideoLAN\VLC"</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="typ">Directory</span><span class="pun">.</span><span class="typ">Exists</span><span class="pun">(</span><span class="pln">vlcPath</span><span class="pun">))</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="str">"Установите 32-битную версию VLC!"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Ошибка"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">MessageBoxButtons</span><span class="pun">.</span><span class="pln">OK</span><span class="pun">,</span><span class="pln"> </span><span class="typ">MessageBoxIcon</span><span class="pun">.</span><span class="typ">Error</span><span class="pun">);</span><span class="pln">
                </span><span class="kwd">return</span><span class="pun">;</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            e</span><span class="pun">.</span><span class="typ">VlcLibDirectory</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DirectoryInfo</span><span class="pun">(</span><span class="pln">vlcPath</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">BtnStart_Click</span><span class="pun">(</span><span class="pln">object sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            string orderNumber </span><span class="pun">=</span><span class="pln"> txtOrderNumber</span><span class="pun">.</span><span class="typ">Text</span><span class="pun">.</span><span class="typ">Trim</span><span class="pun">();</span><span class="pln">
            string folderPath </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@</span><span class="str">"D:\Video"</span><span class="pun">;</span><span class="pln">

            </span><span class="kwd">try</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="typ">Directory</span><span class="pun">.</span><span class="typ">Exists</span><span class="pun">(</span><span class="pln">folderPath</span><span class="pun">))</span><span class="pln"> </span><span class="typ">Directory</span><span class="pun">.</span><span class="typ">CreateDirectory</span><span class="pun">(</span><span class="pln">folderPath</span><span class="pun">);</span><span class="pln">

                string fileName </span><span class="pun">=</span><span class="pln"> $</span><span class="str">"Order_{orderNumber}_{DateTime.Now:yyyyMMdd_HHmmss}.mkv"</span><span class="pun">;</span><span class="pln">
                string fullPath </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Path</span><span class="pun">.</span><span class="typ">Combine</span><span class="pun">(</span><span class="pln">folderPath</span><span class="pun">,</span><span class="pln"> fileName</span><span class="pun">).</span><span class="typ">Replace</span><span class="pun">(</span><span class="str">"\\"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/"</span><span class="pun">);</span><span class="pln">
                string cameraUrl </span><span class="pun">=</span><span class="pln"> </span><span class="str">"rtsp://admin:admin@192.168.0.20:554/Streaming/Channels/101"</span><span class="pun">;</span><span class="pln">

                </span><span class="com">// Дублируем поток H.265 в файл MKV и на экран без перекодирования</span><span class="pln">
                var mediaOptions </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pun">[]</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                    $</span><span class="str">":sout=#duplicate{{dst=display,dst=std{{access=file,mux=ffmpeg{{mux=matroska}},dst='{fullPath}'}}}}"</span><span class="pun">,</span><span class="pln">
                    </span><span class="str">":sout-keep"</span><span class="pln">
                </span><span class="pun">};</span><span class="pln">

                vlcControl</span><span class="pun">.</span><span class="typ">Stop</span><span class="pun">();</span><span class="pln">
                vlcControl</span><span class="pun">.</span><span class="typ">Play</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Uri</span><span class="pun">(</span><span class="pln">cameraUrl</span><span class="pun">),</span><span class="pln"> mediaOptions</span><span class="pun">);</span><span class="pln">

                isRecording </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
                btnStart</span><span class="pun">.</span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
                btnStop</span><span class="pun">.</span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
                txtOrderNumber</span><span class="pun">.</span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
                statusPanel</span><span class="pun">.</span><span class="typ">Visible</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
                lblStatus</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $</span><span class="str">"⚠ ЗАПИСЬ ЗАКАЗА № {orderNumber} ⚠"</span><span class="pun">;</span><span class="pln">
                blinkTimer</span><span class="pun">.</span><span class="typ">Start</span><span class="pun">();</span><span class="pln">
                </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> $</span><span class="str">"Запись заказа №{orderNumber}"</span><span class="pun">;</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Exception</span><span class="pln"> ex</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="pln">$</span><span class="str">"Ошибка: {ex.Message}"</span><span class="pun">);</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="typ">SetWindowPos</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Handle</span><span class="pun">,</span><span class="pln"> HWND_TOPMOST</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> TOPMOST_FLAGS</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">BtnStop_Click</span><span class="pun">(</span><span class="pln">object sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">try</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                vlcControl</span><span class="pun">.</span><span class="typ">Stop</span><span class="pun">();</span><span class="pln">
                isRecording </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
                btnStop</span><span class="pun">.</span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
                txtOrderNumber</span><span class="pun">.</span><span class="typ">Enabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
                txtOrderNumber</span><span class="pun">.</span><span class="typ">Clear</span><span class="pun">();</span><span class="pln">
                statusPanel</span><span class="pun">.</span><span class="typ">Visible</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
                blinkTimer</span><span class="pun">.</span><span class="typ">Stop</span><span class="pun">();</span><span class="pln">
                </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Text</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Контроль сборки заказов"</span><span class="pun">;</span><span class="pln">
                </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="str">"Запись заказа успешно завершена и сохранена."</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Готово"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">MessageBoxButtons</span><span class="pun">.</span><span class="pln">OK</span><span class="pun">,</span><span class="pln"> </span><span class="typ">MessageBoxIcon</span><span class="pun">.</span><span class="typ">Information</span><span class="pun">);</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Exception</span><span class="pln"> ex</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="pln">$</span><span class="str">"Ошибка при остановке: {ex.Message}"</span><span class="pun">);</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">BlinkTimer_Tick</span><span class="pun">(</span><span class="pln">object sender</span><span class="pun">,</span><span class="pln"> </span><span class="typ">EventArgs</span><span class="pln"> e</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            statusPanel</span><span class="pun">.</span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">statusPanel</span><span class="pun">.</span><span class="typ">BackColor</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">DarkRed</span><span class="pun">)</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">Crimson</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">DarkRed</span><span class="pun">;</span><span class="pln">
            lblStatus</span><span class="pun">.</span><span class="typ">ForeColor</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">lblStatus</span><span class="pun">.</span><span class="typ">ForeColor</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">White</span><span class="pun">)</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">Yellow</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Color</span><span class="pun">.</span><span class="typ">White</span><span class="pun">;</span><span class="pln">

            </span><span class="com">// ПРИНУДИТЕЛЬНО возвращаем окно в самый верх каждые 0.5 сек</span><span class="pln">
            </span><span class="com">// Это не даст браузеру перекрыть программу во время работы</span><span class="pln">
            </span><span class="typ">SetWindowPos</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">.</span><span class="typ">Handle</span><span class="pun">,</span><span class="pln"> HWND_TOPMOST</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> TOPMOST_FLAGS</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>

<p>
	В итоге получилась простенькая программа:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://forum.radiodar.ru/uploads/monthly_2026_04/image.png.3675c0abb88555545c23220e6526ab2e.png" data-fileid="553" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="553" data-ratio="91.35" data-unique="65piv4a1p" width="821" alt="image.png" data-src="https://forum.radiodar.ru/uploads/monthly_2026_04/image.thumb.png.5d06e90cd5ae086a315207eb177b7e40.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png"></a>
</p>
]]></description><guid isPermaLink="false">9215</guid><pubDate>Mon, 06 Apr 2026 11:21:42 +0000</pubDate></item><item><title>&#x41E;&#x43D;&#x43B;&#x430;&#x439;&#x43D; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x43E;&#x431;&#x44A;&#x451;&#x43C;&#x43D;&#x44B;&#x445; &#x43D;&#x430;&#x434;&#x43F;&#x438;&#x441;&#x435;&#x439;</title><link>https://forum.radiodar.ru/topic/9181-onlajn-sozdanie-obyomnyh-nadpisej/</link><description><![CDATA[<p>
	Понадобилось вечером сделать презентацию для дочери на тему "Размножение и развитие животных" по курсу школьной программы 3 класса. В качестве титульного листа был задуман эскиз в зеленом цвете с названием объемными буквами.
</p>

<p>
	Для быстроты создания понравился сайт <a href="https://ru.textstudio.com/logo/1638" ipsnoembed="true" rel="external nofollow">https://ru.textstudio.com/logo/1638</a>  с темой Grass:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="518" data-ratio="56.30" data-unique="6vmfnw040" width="1000" alt="image.png" data-src="https://forum.radiodar.ru/uploads/monthly_2025_12/image.png.1da9b7ddaf01b106fa43ade547c7070c.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>
]]></description><guid isPermaLink="false">9181</guid><pubDate>Mon, 08 Dec 2025 14:10:18 +0000</pubDate></item><item><title>MobaXTerm - &#x43C;&#x435;&#x43D;&#x435;&#x434;&#x436;&#x435;&#x440; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x439; &#x43A; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x430;&#x43C; &#x438; &#x441;&#x435;&#x442;&#x435;&#x432;&#x44B;&#x43C; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430;&#x43C; (SSH, Telnet, Rsh, Xdmcp, RDP, VNC &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x435; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435;)</title><link>https://forum.radiodar.ru/topic/9135-mobaxterm-menedzher-podkljuchenij-k-serveram-i-setevym-sistemam-ssh-telnet-rsh-xdmcp-rdp-vnc-i-mnogie-drugie/</link><description><![CDATA[<p>
	Один из самых удобных и быстрых менеджеров удаленных подключений к администрируемым серверам.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="426" data-ratio="67.52" data-unique="yovl00p8p" width="902" alt="image.png" data-src="https://forum.radiodar.ru/uploads/monthly_2025_02/image.png.0b9d9163b2972da9272e39b898438ab8.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	Бесплатная до 10 сохраненных сессий (отдельных подключений).
</p>

<p>
	Официальный сайт: <a href="https://mobaxterm.mobatek.net/" rel="external nofollow">MobaXterm</a><span></span>
</p>
]]></description><guid isPermaLink="false">9135</guid><pubDate>Mon, 10 Feb 2025 15:05:45 +0000</pubDate></item><item><title>Proxmox Virtual Environment - &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x432;&#x438;&#x440;&#x442;&#x443;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x441; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x438;&#x43C; &#x41A;&#x41F;&#x414;</title><link>https://forum.radiodar.ru/topic/9110-proxmox-virtual-environment-sistema-virtualizacii-s-vysokim-kpd/</link><description><![CDATA[<p>
	Одна из самых популярных систем виртуализации Proxmox Virtual Environment. Отличается высокой надежностью и низким потреблением ресурсов. Оставила приятное впечатление, понравилась больше чем HyperV и VMWare.
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="359" data-ratio="47.10" data-unique="62pr3hy41" width="1000" alt="View_Proxmox_VE_radiodar_1.png" data-src="https://forum.radiodar.ru/uploads/monthly_2025_01/View_Proxmox_VE_radiodar_1.png.fd8d50672e1f7e3137300689371a2d58.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	Ссылки: 
</p>

<p>
	1) Официальный сайт: <a href="https://www.proxmox.com/en/" rel="external nofollow">Proxmox.com</a>
</p>

<p>
	2) Статья на Habr: <a href="https://habr.com/ru/companies/selectel/articles/483236/" rel="external nofollow">Магия виртуализации: вводный курс в Proxmox VE</a>
</p>

<p>
	3) Статья на WiKi: <a href="https://ru.wikipedia.org/wiki/Proxmox_Virtual_Environment" rel="external nofollow">Proxmox Virtual Environment</a>
</p>
]]></description><guid isPermaLink="false">9110</guid><pubDate>Thu, 23 Jan 2025 09:30:40 +0000</pubDate></item><item><title>RDP Wrapper - &#x43E;&#x431;&#x445;&#x43E;&#x434; &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x441;&#x435;&#x441;&#x441;&#x438;&#x438; RDP &#x432; Windows 7 - 11</title><link>https://forum.radiodar.ru/topic/8900-rdp-wrapper-obhod-ogranichenija-odnoj-sessii-rdp-v-windows-7-11/</link><description><![CDATA[<p>
	Как известно, на рабочих станциях под управлением операционной системы Windows (не серверные варианты) подключиться по протоколу RDP можно только одному пользователю. При попытке подключения вторым пользователем будет выдано предупреждение об ограничении и первого пользователя просто "выбросит" из системы.
</p>

<p>
	Для обхода ограничения на количество одновременных сессий на ОС Windows всех актуальных версий (кроме серверных) существует проект RDP Wrapper.
</p>

<p>
	Для начинающих IT'шников возникают некоторые сложности с запуском службы и обновлением данных после обновления самой операционной системы. 
</p>

<p>
	Поэтому разбираем по шагам:
</p>

<p>
	<span style="color:#e74c3c;"><strong>ПРЕДУПРЕЖДЕНИЕ: </strong></span>указанные в инструкции действия необходимо выполнять на локальной машине. При первоначальной конфигурации вас выбросит из сесии RDP
</p>

<p>
	1) Скачать архив с названием "<span style="background-color: rgb( var(--theme-area_background_reset) ); color: rgb( var(--theme-text_color) );"><strong>RDPWrap-v1.6.2.zip</strong>" со страницы </span><span style="background-color: rgb( var(--theme-area_background_reset) ); color: rgb( var(--theme-text_color) );"> </span><a href="https://github.com/stascorp/rdpwrap/releases/tag/v1.6.2" ipsnoembed="true" rel="external nofollow">https://github.com/stascorp/rdpwrap/releases/tag/v1.6.2</a><span style="background-color: rgb( var(--theme-area_background_reset) ); color: rgb( var(--theme-text_color) );"> </span>
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_009.png" class="ipsImage ipsImage_thumbnailed" data-fileid="312" data-ratio="89.39" data-unique="fervoqx8p" style="height: auto;" width="792" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_009.png.b29bcdc035ec2f310ba2724943eedd7b.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p style="text-align: center;">
	 
</p>

<p>
	<span style="color:#e74c3c;"><strong>ПРИМЕЧАНИЕ:</strong></span> в браузере Chrome архив <span style="background-color: rgb( var(--theme-area_background_reset) ); color: rgb( var(--theme-text_color) );">RDPWrap-v1.6.2.zip</span> может блокироваться как нежелательный. Либо используйте другой браузер, либо отключите безопасность в хроме.
</p>

<p>
	<span style="background-color: rgb( var(--theme-area_background_reset) ); color: rgb( var(--theme-text_color) );">2) Необходимо распаковать содержимое архива, например в папку "<strong>RDWrap</strong>" на диске "C:/"</span>
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_008.png" class="ipsImage ipsImage_thumbnailed" data-fileid="313" data-ratio="32.36" data-unique="bal7vbenh" style="height: auto;" width="683" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_008.png.69b234acdaca027077c5f7475a39c7f8.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	 
</p>

<p>
	3) Начинаем установку путем запуска файла "<strong>install</strong>". Установка происходит в тихом режиме.
</p>

<p>
	4) Переходим в каталог с программой "C:\RDPWrap" и запускаем утилиту <strong>RDPConf</strong>
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_006.png" class="ipsImage ipsImage_thumbnailed" data-fileid="314" data-ratio="46.58" data-unique="xy2uvhbo3" style="height: auto;" width="438" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_006.png.da722706efa7f8ce9281c787fc8d8f9b.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p style="text-align: center;">
	 
</p>

<p style="text-align: center;">
	Сразу после установки конфигуратор покажет вам различие в версии конфигурации и отсутствие поддержки вашей системы:
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_002.png" class="ipsImage ipsImage_thumbnailed" data-fileid="315" data-ratio="80.14" data-unique="3vam6v8we" style="height: auto;" width="584" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_002.png.846ede863c0a744a3c89e5fe03e2b1a4.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p style="text-align: center;">
	 
</p>

<p style="text-align: center;">
	5) Обновляем данные конфигуратора: переходим в каталог "<em>C:\Program Files\RDP Wrapper</em>", открываем в режиме администратора файл "<strong>rdpwrap.ini</strong>"
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_007.png" class="ipsImage ipsImage_thumbnailed" data-fileid="316" data-ratio="34.31" data-unique="3n3kpl5at" style="height: auto;" width="650" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_007.png.57093712971c9ff2b3abf621f03f803d.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	 
</p>

<p>
	Содержимое файла (стрелкой указана дата конфигурации):
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_005.png" class="ipsImage ipsImage_thumbnailed" data-fileid="317" data-ratio="62.72" data-unique="gthhdpu36" style="height: auto;" width="861" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_005.png.27fdda7619f9148abe6e31382dc05093.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	 
</p>

<p>
	Теперь открываем самую последнюю конфигурацию: <a href="https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini" ipsnoembed="true" rel="external nofollow">https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini</a>
</p>

<p>
	Копируем содержимое нового файла (вкладка слева) и полностью заменяем содержимое в нашем локальном файле (вкладка справа):
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_001.png" class="ipsImage ipsImage_thumbnailed" data-fileid="318" data-ratio="67.70" data-unique="o1t2tq1a9" style="height: auto;" width="1000" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_001.png.430a557d6085b3aed7f5b7c24b83e3af.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p style="text-align: center;">
	 
</p>

<p>
	Сохраняем и проверяем утилитой конфигуратора (слева старая версия, справа - новая) - необходимо добиться всё в зеленом цвете:
</p>

<p style="text-align: center;">
	<img alt="RDPWrap_Radiodar_Forum_004.png" class="ipsImage ipsImage_thumbnailed" data-fileid="319" data-ratio="46.51" data-unique="sq3fgzw1e" style="height: auto;" width="888" data-src="https://forum.radiodar.ru/uploads/monthly_2024_10/RDPWrap_Radiodar_Forum_004.png.7f5a8f5a0037f8e40f24762788f5e274.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	 
</p>

<p>
	<span style="color:#e74c3c;"><strong>ВАЖНО:</strong></span> после каждого обновления операционной системы необходимо обновлять данные конфигурации заново! 
</p>

<p>
	<span style="color:#3498db;"><strong>ДЛЯ ИНФОРМАЦИИ:</strong></span> в случае автоматического обновления ОС Windows может сложиться ситуация, когда после обновления (обычно по вторникам) вы не сможете организовать подключение нескольких пользователей по RDP - необходимо учитывать администратору сети и, либо отключить обновления ОС, либо своевременно обновлять.
</p>

<p>
	ИСТОЧНИКИ:
</p>

<p>
	1) <a href="https://github.com/stascorp/rdpwrap" rel="external nofollow">RDP Wrapper Library by Stas'M</a> (официальный github разработчика приложения RDPWrap)
</p>

<p>
	2) <a href="https://winitpro.ru/index.php/2015/09/02/neskolko-rdp-sessij-v-windows-10/" rel="external nofollow">Разрешить несколько одновременных RDP сеансов в Windows 10 и 11</a> (сайт winitpro.ru)
</p>
]]></description><guid isPermaLink="false">8900</guid><pubDate>Wed, 09 Oct 2024 08:08:52 +0000</pubDate></item><item><title>&#x413;&#x434;&#x435; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x430;&#x440;&#x44B;&#x435; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; &#x43F;&#x430;&#x43A;&#x435;&#x442;&#x430; Azuredatastudio</title><link>https://forum.radiodar.ru/topic/8453-gde-skachat-starye-versii-paketa-azuredatastudio/</link><description><![CDATA[<p>
	Возникла острая необходимость скачать устаревший пакет СУБД "Azure Data Studio" версии 1.40.0 под операционную систему debian.
</p>

<p>
	Сложность заключается невозможности скачать по архивам репозитория производителя на Github'е и официальном сайте Microsoft - при попытке скачать по ссылке 1.40.0 выдают для скачивания последнюю стабильную версию (<a href="https://github.com/Microsoft/azuredatastudio/releases" rel="external nofollow">на момент июля 2024 года - 1.48.1</a><span class="ipsEmoji">😞</span>
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="266" data-ratio="101.00" data-unique="mxazxekaf" width="697" alt="azuredb_3.jpg" data-src="https://forum.radiodar.ru/uploads/monthly_2024_07/azuredb_3.jpg.fc9a44f03f640d5f1572f009822b8af5.jpg" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	Автор объясняет данный "баг" необходимостью защиты новеньких пользователей от необдуманных действий и для защиты их, пользователей, от случайной установки <a href="https://github.com/microsoft/azuredatastudio/issues/25735" rel="external nofollow">устаревшей версии</a>:
</p>

<p>
	<img alt="azuredb_1.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="264" data-ratio="71.97" data-unique="aefg5b8ee" style="height: auto;" width="942" data-src="https://forum.radiodar.ru/uploads/monthly_2024_07/azuredb_1.jpg.acc224c22a8af3902180edfb63faf6c5.jpg" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	Также автор репы приводит краткую инструкцию как скачать другие версии: просто необходимо подставить в приводимую в качестве примера строку хэш необходимой вам версии (ну и саму версию также указать в самом конце строки).
</p>

<p>
	Например, автор рекомендует <a href="https://github.com/microsoft/azuredatastudio/issues/25735" rel="external nofollow">для версии 1.47.0</a>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1644_6" style=""><span class="pln"> DEB - https://sqlopsbuilds.blob.core.windows.net/stable/c7c2b2f21505562d21972d4c135119d00806db4f/azuredatastudio-linux-1.47.0.deb</span></pre>

<p>
	Нам же нужна версия <strong>1.40.0</strong>, для чего переходим в каталог версий microsoft (под windows) и находим необходимую нам строку, но под <a href="https://wingetgui.com/apps/Microsoft-AzureDataStudio" rel="external nofollow">OS семейства Windows</a>:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="265" data-ratio="63.90" data-unique="at269s5gt" width="1000" alt="azuredb_2.jpg" data-src="https://forum.radiodar.ru/uploads/monthly_2024_07/azuredb_2.jpg.b5691f95a4678c1e41b704ad8cea3fb6.jpg" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png">
</p>

<p>
	Копируем её, вычленяем нужный нам хэш и вставляем его в приведенный выше пример, в итоге получаем (для 1.40.0):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1644_8" style=""><span class="pln">https://sqlopsbuilds.blob.core.windows.net/stable/3fbaa3de931ef433090fe3deb8c89cba99d7952b/azuredatastudio-linux-1.40.0.deb</span></pre>

<p>
	Вставляем его в новое окно и загружаем необходимый файл версии <a href="https://sqlopsbuilds.blob.core.windows.net/stable/3fbaa3de931ef433090fe3deb8c89cba99d7952b/azuredatastudio-linux-1.40.0.deb" rel="external nofollow">azuredatastudio 1.40.0.deb</a>
</p>
]]></description><guid isPermaLink="false">8453</guid><pubDate>Mon, 15 Jul 2024 11:55:15 +0000</pubDate></item><item><title>Rufus - &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x430; &#x434;&#x43B;&#x44F; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44F; &#x444;&#x43B;&#x435;&#x448;&#x435;&#x43A; &#x434;&#x43B;&#x44F; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x438; Windows</title><link>https://forum.radiodar.ru/topic/3798-rufus-programma-dlja-sozdanija-fleshek-dlja-ustanovki-windows/</link><description><![CDATA[<p>
	Отличный программный продукт для создания загрузочных флешек. Позволяет подготовить внешний накопитель к загрузке и "залить" в него образ необходимой операционной системы (любой).
</p>

<p>
	<strong>Официальный сайт: </strong>Rufus
</p>

<p>
	<strong>Статус:</strong> <strong><span style="color:#006600;">бесплатная</span></strong>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://forum.radiodar.ru/uploads/monthly_2023_06/screenshot1_ru.png.08fae684ca7411470ff6274c6f6afa74.png" data-fileid="141" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="141" data-ratio="150.30" width="499" alt="screenshot1_ru.thumb.png.b0ba94116e5df264c1e4d152d2732532.png" data-src="https://forum.radiodar.ru/uploads/monthly_2023_06/screenshot1_ru.thumb.png.b0ba94116e5df264c1e4d152d2732532.png" src="https://forum.radiodar.ru/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<strong>Инструкция Rufus</strong>
</p>

<ol>
	<li>
		Загрузить программу с официального сайта и запустить;
	</li>
	<li>
		Выбрать внешний накопитель (будет отформатирован!);
	</li>
	<li>
		Выбрать образ операционной системы.
	</li>
</ol>

<p>
	Программа из разряда Mast Have!
</p>
]]></description><guid isPermaLink="false">3798</guid><pubDate>Tue, 27 Jun 2023 13:13:49 +0000</pubDate></item></channel></rss>
