<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7387</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7387&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)».]]></description>
		<lastBuildDate>Wed, 08 Aug 2012 18:38:28 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62531#p62531</link>
			<description><![CDATA[<p>Пример получилось переделать.<br />Только при копировании файлов не смог подавить диалоговые окна на перезапись файлов, если они уже существуют.<br />Локально я могу проверить и удалить файлы перед загрузкой с помощью FileSystemObject.<br />А при выгрузке на удаленный сервер удалить файлы не получается.<br /><strong>Флаги CopyHere не работают</strong>, как будто метод запускается без флагов.<br />Операционная система Windows server 2008.</p><p>Как быть?</p><div class="codebox"><pre><code>// описание флагов для VBA с сайта Microsoft
//    Const FOF_SILENT = &amp;H4&amp;
//    Const FOF_RENAMEONCOLLISION = &amp;H8&amp;
//    Const FOF_NOCONFIRMATION = &amp;H10&amp;
//    Const FOF_ALLOWUNDO = &amp;H40&amp;
//    Const FOF_FILESONLY = &amp;H80&amp;
//    Const FOF_SIMPLEPROGRESS = &amp;H100&amp;
//    Const FOF_NOCONFIRMMKDIR = &amp;H200&amp;
//    Const FOF_NOERRORUI = &amp;H400&amp;
//    Const FOF_NOCOPYSECURITYATTRIBS = &amp;H800&amp;
//    Const FOF_NORECURSION = &amp;H1000&amp;
//    Const FOF_NO_CONNECTED_ELEMENTS = &amp;H2000&amp;
//
//cFlags = FOF_SILENT + FOF_NOCONFIRMATION + FOF_NOERRORUI

var shell = new ActiveXObject(&quot;Shell.Application&quot;);
var UploadUrl= &quot;ftp://user:password@my-ftp-server.ru:21/RemoteDirectory/&quot;
var dir = &quot;C:\TEMP\&quot;;
var cFlags = 4+16+1024;
    try {
        var LocalFolder=shell.namespace(dir);
        var LocalFiles=new Enumerator(LocalFolder.Items());
        var FtpFolder=shell.namespace(UploadUrl);

        for (;!LocalFiles.atEnd();LocalFiles.moveNext()){
            FtpFolder.CopyHere(LocalFiles.item(),cFlags);
        }
//        writeLog(new Array(msgUploadFilesOK, dir), false);
    }</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (trash0000)]]></author>
			<pubDate>Wed, 08 Aug 2012 18:38:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62531#p62531</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62517#p62517</link>
			<description><![CDATA[<div class="codebox"><pre><code>Шел=new ActiveXObject(&quot;Shell.Application&quot;);
Имя=&quot;Вася&quot;;
Имя=&quot;&quot;;
Пароль=&quot;Пупкин&quot;;
УРЛ=&quot;ftp.drweb.com/pub/drweb&quot;;
ПапкаФТП=Шел.NameSpace(&quot;ftp://&quot; + (Имя ? Имя + &quot;@&quot; + Пароль + &quot;:&quot; : &quot;&quot;) + УРЛ);
Стр=&quot;&quot;;
Темы=new Enumerator(ПапкаФТП.Items());
for (;!Темы.atEnd();Темы.moveNext()) Стр=Стр+Темы.item().Path+&quot;\n&quot;;
alert(Стр);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Wed, 08 Aug 2012 12:36:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62517#p62517</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62515#p62515</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>shell.application заменит, клиент ftp.exe тут не приделах</p></blockquote></div><p>пример можете дать. пару строк кода shell.application ака ftp-клиент</p>]]></description>
			<author><![CDATA[null@example.com (trash0000)]]></author>
			<pubDate>Wed, 08 Aug 2012 11:50:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62515#p62515</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62512#p62512</link>
			<description><![CDATA[<p>shell.application заменит, клиент ftp.exe тут не приделах</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Wed, 08 Aug 2012 11:34:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62512#p62512</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62511#p62511</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>shell.application заменит все в две строки</p></blockquote></div><p>Пробовал. Не заменит. Встроенный в Windows FTP-клиент не поддерживает passive mode, то есть, не работает из-за NAT.<br />Кроме того, в HTA нарисован небольшой GUI...</p>]]></description>
			<author><![CDATA[null@example.com (trash0000)]]></author>
			<pubDate>Wed, 08 Aug 2012 11:31:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62511#p62511</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62249#p62249</link>
			<description><![CDATA[<p>shell.application заменит все в две строки</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Wed, 01 Aug 2012 17:24:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62249#p62249</guid>
		</item>
		<item>
			<title><![CDATA[HTA JS: FTP-клиент пакетной загрузки/выгрузки файлов на хостинг(Ncftp)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=61966#p61966</link>
			<description><![CDATA[<p><strong>HTA Javascript, Ncftp: FTP-клиент загрузки/выгрузки файлов на хостинг</strong><br />Дано: Есть сайт на Joomla с установленным компонентом просмотра прайс-листов в формате Excel.<br />Задача: Обновлять прайсы на сайте, не залезая в админку, и не устанавливая громоздких FTP-клиентов. Технически, проблема сводится к регулярной выгрузке&nbsp; с сайта по протоколу FTP определенного списка файлов, и его последующей загрузке на сайт.<br />Решение: Использовать консольные (portable) FTP-клиенты и простой графический интерфейс, сделанный на HTA</p><p>Изучение проблемы показало, что встроенный ftp-клиент Windows обладает ограниченной функциональностью (не поддерживается пассивный режим, т.е. не работает из-за NAT). Поэтому следует использовать сторонние FTP-клиенты.<br />Спасибо <a href="http://shlykov.info/10/">http://shlykov.info/10/</a>, за качественный обзор консольных клиентов. Из предложенного списка консольных клиентов остановился на Ncftp.</p><p>Финальная разработка представляет собой следующие файлы:<br /><strong>ncftpput.exe, ncftpget.exe</strong> - консольные FTP-клиенты загрузки/выгрузки файлов по FTP. Взято с <a href="http://www.ncftp.com/ncftp/">http://www.ncftp.com/ncftp/</a>. Там же инструкция по параметрам командной строки.<br /><strong>simpleftp.hta</strong> - HTA-приложение: окном выбора локальной папки, и две кнопки Загрузить и Выгрузить, выполняющие пакетную загрузку/выгрузку файлов на FTP-сервер<br />Параметры соединения с FTP-сервером и список файлов &quot;зашиты&quot; в HTA-коде. Исправляйте соответственно Вашим требованиям.</p><p>Приложение задумано для простых офис-менеджеров (чем меньше кнопок и настроек, тем лучше).</p><p>В принципе, этот пример можно развить в полноценный FTP-клиент на HTA. Хорошая задача для кодеров-маньяков...:D</p><p><strong>simpleftp.hta</strong><br /></p><div class="codebox"><pre><code>&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Обновление прайс-листов сайта http://MySite.ru&lt;/title&gt;
    &lt;hta:application
            applicationName=&quot;Обновление прайс-листов сайта http://MySite.ru&quot;
            border=&quot;dialog&quot;
            borderStyle=&quot;static&quot;
            caption=&quot;yes&quot;
            contextMenu=&quot;no&quot;
            icon=&quot;&quot;
            id=&quot;hta&quot;
            innerBorder=&quot;no&quot;
            maximizeButton=&quot;no&quot;
            minimizeButton=&quot;no&quot;
            navigable=&quot;yes&quot;
            scroll=&quot;no&quot;
            selection=&quot;no&quot;
            showInTaskBar=&quot;yes&quot;
            singleInstance=&quot;yes&quot;
            sysMenu=&quot;yes&quot;
            version=&quot;0.1&quot; /&gt;

        &lt;style&gt;
            body, table { padding: 0px; margin: 0px; background-color: #F5F5F5; color: #000175; font-family: Tahoma; font-size: 12px;}
            fieldset {padding: 0px; margin: 7px 5px 5px 5px;}
            legend { font-weight: bold; font-style: oblique; font-family: Georgia; padding: 0px 2px;}
            div.app { width: 100%; height: 100%; padding: 0px; margin: 0px; }
            div.info { background-color: #CCCCCC; padding: 10px 5px 10px 10px; margin: 0px; font-size: 18pt; font-family: Georgia; cursor: pointer; color: White; border-bottom: 1px solid White; border-top: 1px solid White;}
            div.menu { background-color: #EEEEEE; padding: 7px 0px 7px 15px; margin: 0px; border-bottom: 1px solid White; font-family: Georgia; font-weight: bold; font-size: 14px;}
            div.body { display: none; margin: 0px; padding: 0px 5px;}
            div.log { padding: 5px 5px 7px 5px; margin: 0px; height: 170px; overflow: auto;}
            div.file { padding: 5px 5px 7px 5px; margin: 0px;}
            div.settings { padding: 5px 5px 7px 5px; margin: 0px; height: 250px;}
            div.cb {cursor: pointer; border: 1px solid #F5F5F5;}
            span.menu { cursor: pointer; padding: 0px 3px;}
            span.space {margin-right: 15px;}
            button, {background: #EEEEEE; border: 1px solid #CCCCCC; margin: 1px;}
            button.menu { cursor: pointer; background-color: #EEEEEE; margin: 0px; padding: 0px; border: none; color: #000175; font-family: Georgia; font-weight: bold; font-size: 14px;}
            input { border: 1px solid #DFDFDF; margin: 0px; height: 1.6em;}
            input.button {background: #EEEEEE; border: 1px solid #CCCCCC;}
            input.checkbox {cursor: pointer; border: none; margin: 0px; padding: 0px;}
        &lt;/style&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
    var windowWidth    =    360;
    var windowHeight = 437;
    window.resizeTo(windowWidth,windowHeight);
    var x = (window.screen.availWidth - windowWidth)/2;
    var y = (window.screen.availHeight - windowHeight)/2;
    window.moveTo(x,y);

window.onload = function(){
    showFiles();
    checkJScript();
    if(!dirButton.getAttribute(&quot;disabled&quot;))dirButton.focus();
    writeLog(new Array(&quot;версия: &quot; + hta.version));
}
            
function showFiles(){config.style.display=&quot;none&quot;;info.style.display=&quot;none&quot;;files.style.display=&quot;block&quot;;}
function showConfig(){info.style.display=&quot;none&quot;;files.style.display=&quot;none&quot;;config.style.display=&quot;block&quot;;}
function showInfo(){config.style.display=&quot;none&quot;;files.style.display=&quot;none&quot;;info.style.display=&quot;block&quot;;}
function mouseOver(item){item.style.background=&quot;#EEEEEE&quot;;item.style.border=&quot;1px solid #CCCCCC&quot;;}
function mouseOut(item){item.style.background=&quot;#F5F5F5&quot;;item.style.border=&quot;1px solid #F5F5F5&quot;;}

// variables
var settings = new Array(3);

var oShell = new ActiveXObject(&quot;Wscript.Shell&quot;);
var shell = new ActiveXObject(&quot;Shell.Application&quot;);
var fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
var word = null;
var dir = null;

// тут зашиты параметры соединения с FTP и пути к каталогу загрузки-выгрузки на сервере
// меняйте соответственно вашим требованиям
// &lt;PathToFile&gt;&lt;PathToDir&gt;&lt;FileName&gt; - макроподстановки, для имен файлов и пути к локальному каталогу, используются в алгоритме

var DownloadCommand = &quot;ncftpget -u ftp_user -p ftp_password -P 21 mysite.ru &lt;PathToDir&gt; /www/mysite.ru/components/com_excel/prices/&lt;FileName&gt;&quot; ;
var UploadCommand = &quot;ncftpput -u ftp_user -p ftp_password -P 21 mysite.ru /www/mysite.ru/components/com_excel/prices/ &lt;PathToFile&gt;&quot; ;


//список файлов с прайс-листами
//в цикле по списку выполняется макроподстановка вместо &lt;FileName&gt;
//измените на Ваш список
var xlsFileCount = 20;
var xlsFileArray = new Array(
&quot;1051874570-4.xls&quot;,
&quot;1092812908-5.xls&quot;,
&quot;1136255424-4.xls&quot;,
&quot;1238705087-4.xls&quot;,
&quot;1375786074-5.xls&quot;,
&quot;1754316211-3.xls&quot;,
&quot;1782502850-3.xls&quot;,
&quot;2722188756-5.xls&quot;,
&quot;2801637963-4.xls&quot;,
&quot;2911438163-3.xls&quot;,
&quot;3053163155-5.xls&quot;,
&quot;3249793829-5.xls&quot;,
&quot;3486591861-5.xls&quot;,
&quot;3822741412-5.xls&quot;,
&quot;3905233543-4.xls&quot;,
&quot;4068742619-4.xls&quot;,
&quot;4082181836-3.xls&quot;,
&quot;451263677-1.xls&quot;,
&quot;649715513-4.xls&quot;,
&quot;670720701-3.xls&quot;
)
            
// message box settings
var mbIndex = 1;
var msgBoxPathStr = &quot;Папка загрузки/выгрузки:&quot;;
var msgselectDirNoExists = &quot;Папка не найдена. Введите путь к существующей папке! &quot;;
var msgselectDirStr = &quot;Выберите папку с файлами!&quot;;
var msgDownloadFileOK = &quot;Прайс-лист загружен с веб-сайта:&quot;;
var msgDownloadFilesOK = &quot;Все прайс-листы загружены с веб-сайта в каталог:&quot;;
var msgUploadFileOK = &quot;Прайс-лист выгружен на веб-сайт:&quot;;
var msgUploadFilesOK = &quot;Все прайс-листы из каталога выгружены на веб-сайт:&quot;;
var msgErrorStr = &quot;Ошибка:&quot;;

function disableInputs(){
    path.setAttribute(&#039;disabled&#039;, true);
    dirButton.setAttribute(&#039;disabled&#039;, true);
    DownloadButton.setAttribute(&#039;disabled&#039;, true);
    UploadButton.setAttribute(&#039;disabled&#039;, true);
}
function enableInputs(){
    path.setAttribute(&#039;disabled&#039;, false);
    dirButton.setAttribute(&#039;disabled&#039;, false);
    DownloadButton.setAttribute(&#039;disabled&#039;, false);
    UploadButton.setAttribute(&#039;disabled&#039;, false);
}
function isInputsEnabled(){
    return !dirButton.getAttribute(&quot;disabled&quot;) &amp;&amp; !DownloadButton.getAttribute(&quot;disabled&quot;)&amp;&amp; !UploadButton.getAttribute(&quot;disabled&quot;);
}
function checkJScript(){
    try{
        if(ScriptEngineMajorVersion() &lt; 5){
            disableInputs();
            throw new Error(&quot;Старая версия JScript;Необходимо: &quot;+ ScriptEngine() + &quot; 5.6;Установленно: &quot; + ScriptEngine() + &quot; &quot; + ScriptEngineMajorVersion() + &quot;.&quot; + ScriptEngineMinorVersion() + &quot;.&quot; + ScriptEngineBuildVersion());
        }
    } catch(ex) {
        printError(ex);
    }
}
function printMsg(div){
    var div = document.getElementById(&quot;log&quot;);
    div.appendChild(div);
}
function printError(exception){
    var error = new Array(exception.name + &quot; (&quot; + (exception.number &amp; 0xFFFF) + &quot;):&quot;);
    var disc = exception.description.split(&quot;;&quot;);
    for(var i=0;i&lt;disc.length;i++){
        error.push(disc[i]);
    }
    writeLog(error, true);
}
function PathChanged(){
    try {
        path.value = path.value.replace(&#039;&quot;&#039;,&#039;&#039;);
        path.value = path.value.replace(&#039;&quot;&#039;,&#039;&#039;);
        path.value = fso.GetAbsolutePathName(path.value);
        if(fso.FolderExists(path.value)){
            dir = path.value;
            writeLog(new Array(msgBoxPathStr, dir), false);
            DownloadButton.setAttribute(&#039;disabled&#039;, false);
            DownloadButton.focus();
            UploadButton.setAttribute(&#039;disabled&#039;, false);
        }else{
            dir = path.value;
            writeLog(new Array(msgselectDirNoExists, dir), true);
            DownloadButton.setAttribute(&#039;disabled&#039;, true);
            UploadButton.setAttribute(&#039;disabled&#039;, true);
        }
    } catch (ex) {
        printError(ex);
    }
}
function selectDir(){
    try {
        var folder = shell.BrowseForFolder(0, msgselectDirStr, 16, 0);
        if (folder != null) {
            dir = folder.Self.Path;
            path.value = folder.Self.Path;
            writeLog(new Array(msgBoxPathStr, dir), false);
            DownloadButton.setAttribute(&#039;disabled&#039;, false);
            DownloadButton.focus();
            UploadButton.setAttribute(&#039;disabled&#039;, false);
        }
    } catch (ex) {
        printError(ex);
    }
}
function writeLog(msg, error){
    var div = document.createElement(&quot;div&quot;);
    if(error){
        div.style.background = &quot;#FFE8E1&quot;;
    } else {
        div.style.background = &quot;#ECF0EE&quot;;
    }
    div.style.padding = &quot;2px 2px 2px 2px&quot;;
    div.style.margin = &quot;2px 0px 2px 0px&quot;;
    var node = document.createTextNode(&quot;[&quot; + mbIndex++ + &quot;] &quot;);
    div.appendChild(node);
    for(var i=0; i&lt;msg.length; i++){
            if(msg[i]!=null){
            node = document.createTextNode(msg[i]);
            div.appendChild(node);
            node = document.createElement(&quot;br&quot;);
            div.appendChild(node);
        }
    }
    var log = document.getElementById(&quot;log&quot;);                
    if(log.childNodes.length &gt; 0){
        log.insertBefore(div, log.childNodes[0]);
    } else {
        log.appendChild(div);
    }
}
function DownloadPrices(){
    try {
        disableInputs();
        if(dir == null || dir == &quot;&quot;){
            throw new Error(msgselectDirStr);

        }
        for(i=0;i&lt;xlsFileCount;i++){
            sCommandLine = &quot;\&quot;&quot;+dir+&quot;\&quot;&quot;;
            sCommandLine = DownloadCommand.replace(&quot;&lt;PathToDir&gt;&quot;,sCommandLine);
            sCommandLine = sCommandLine.replace(&quot;&lt;FileName&gt;&quot;,xlsFileArray[i]);
            if(sCommandLine.length &gt; 0){oShell.Run(sCommandLine,7,true);};
            writeLog(new Array(msgDownloadFileOK, xlsFileArray[i]), true);
        }

        if(sCommandLine.length &gt; 0){oShell.Run(sCommandLine,7,true);    };
        writeLog(new Array(msgDownloadFilesOK, dir), false);

    } catch (ex) {
        printError(ex);
    } finally {
        dir = &quot;&quot;;
        path.value = &quot;&quot;;
        disableInputs();
        path.setAttribute(&#039;disabled&#039;, false);
        dirButton.setAttribute(&#039;disabled&#039;, false);
    }
}
function UploadPrices(){
try {
    disableInputs();
    if(dir == null || dir == &quot;&quot;){
        throw new Error(msgselectDirStr);
    }
        for(i=0;i&lt;xlsFileCount;i++){
            sCommandLine =&quot;&quot;;
            sCommandLine = sCommandLine + dir +&quot;\\&quot;+xlsFileArray[i];//&quot;test.test&quot;;
            if(fso.FileExists(sCommandLine)){
                sCommandLine = &quot;\&quot;&quot;+sCommandLine+&quot;\&quot;&quot;;
                sCommandLine = UploadCommand.replace(&quot;&lt;PathToFile&gt;&quot;,sCommandLine);
                if(sCommandLine.length &gt; 0){oShell.Run(sCommandLine,7,true);};
                writeLog(new Array(msgUploadFileOK, xlsFileArray[i]), true);
            }
        }
    } catch (ex) {
        printError(ex);
    } finally {
        writeLog(new Array(msgUploadFilesOK, dir), false);
        dir = &quot;&quot;;
        path.value = &quot;&quot;;
        disableInputs();
        path.setAttribute(&#039;disabled&#039;, false);
        dirButton.setAttribute(&#039;disabled&#039;, false);
    }
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;info&quot;&gt;Обновление прайс-листов сайта http://MySite.ru&lt;/div&gt;
    &lt;div style=&quot;padding: 5px&quot;&gt;&lt;button style=&quot;width:100%;&quot; onclick=&quot;DownloadPrices()&quot; id=&quot;DownloadButton&quot; disabled=&quot;disabled&quot; title=&quot;&quot;&gt;Загрузить прайсы с веб-сервера&lt;/button&gt;&lt;/div&gt;
    &lt;fieldset&gt;
        &lt;legend&gt;Папка&lt;/legend&gt;
        &lt;div class=&quot;file&quot;&gt;
        &lt;input type=&quot;text&quot; id=&quot;path&quot; style=&quot;width:90%;border-right:0px;&quot; onchange=&quot;PathChanged();&quot;&gt;
        &lt;input type=&quot;button&quot; value=&quot; &amp;raquo; &quot; onclick=&quot;selectDir();&quot; id=&quot;dirButton&quot; class=&quot;button&quot; title=&quot;&quot;&gt;
        &lt;/div&gt;
    &lt;/fieldset&gt;
    &lt;div style=&quot;padding: 5px&quot;&gt;&lt;button style=&quot;width:100%;&quot; onclick=&quot;UploadPrices()&quot; id=&quot;UploadButton&quot; disabled=&quot;disabled&quot; title=&quot;&quot;&gt;Выгрузить прайсы на веб-сервер&lt;/button&gt;&lt;/div&gt;
    &lt;fieldset&gt;
        &lt;legend&gt;Журнал&lt;/legend&gt;
        &lt;div class=&quot;log&quot; id=&quot;log&quot;&gt;&lt;/div&gt;
    &lt;/fieldset&gt;
&lt;/div&gt;
&lt;div id=&quot;files&quot; class=&quot;body&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;config&quot; class=&quot;body&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;info&quot; class=&quot;body&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div><p>Это мое первое HTA-приложение. Спасибо авторам doc2fb.hta за код, использовавший в качестве образца.</p>]]></description>
			<author><![CDATA[null@example.com (trash0000)]]></author>
			<pubDate>Tue, 24 Jul 2012 13:45:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=61966#p61966</guid>
		</item>
	</channel>
</rss>
