<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: вызов интерактивного диалога открытия файла]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=64</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=64&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: вызов интерактивного диалога открытия файла».]]></description>
		<lastBuildDate>Mon, 09 Nov 2020 23:14:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=143400#p143400</link>
			<description><![CDATA[<p>Проверил работоcпособность совместно с IE11 <a href="http://forum.script-coding.com/viewtopic.php?pid=6519#p6519">моего решения 2007 года</a>: оказалось, каталог в пути к выбранному файлу подменяется на <strong>C:\fakepath\</strong> (подобное поведение, по-видимому, имеет место и в немного более ранних выпусках IE).</p><p>Но всё работает как надо, если заменить<br /></p><div class="codebox"><pre><code>IE.Navigate(&quot;about:blank&quot;)</code></pre></div><p>на «просто»<br /></p><div class="codebox"><pre><code>IE.Navigate(&quot;&quot;)</code></pre></div><p>как было <a href="http://akelpad.sourceforge.net/forum/viewtopic.php?p=1363#1363">в немного предшествовавшей разновидности решения</a>. — На самом деле это обрабатывается как<br /></p><div class="codebox"><pre><code>IE.Navigate(&quot;http:///&quot;)</code></pre></div><p>и, вследствие неудачи подобного запроса, загружается из ресурсов страница ошибки (в IE11 с адресом <em>res://ieframe.dll/dnserror.htm?ErrorStatus=0x800C0004#http:///</em>)<br />По моим ощущениям это работает немного медленнее чем <em>about:blank</em>; некоторого ускорения можно добиться, если убрать ненужное в данном случае, как я теперь полагаю, ожидание<br /></p><div class="codebox"><pre><code>while (IE.Busy) WScript.Sleep(100);</code></pre></div><p>Также у меня имеются подозрения, что (в зависимости от настроек IE) запрос &quot;http:///&quot; может вызвать то ли открытие сетевого подключения, то ли выход из автономного режима просмотра — что-то подобное я обнаружил около того же 2007 года.<br />Можно, конечно, явно указать запрос к ресурсам, но если не таскать рядом со сценарием заранее подготовленного файла с ресурсами, то его может не оказаться (например, с IE6 нет ieframe.dll).<br />А что, если попробовать<br /></p><div class="codebox"><pre><code>IE.Navigate(&quot;res://&quot;)</code></pre></div><p>— это также работает (в IE11 загружается <em>res://ieframe.dll/dnserror.htm?ErrorStatus=0x80070485#res:///</em>) и, вероятно, заведомо не должно быть попыток каких-либо сетевых обращений.</p><p>(Предполагаю, что поколдовав с настройками безопасности, можно всё-таки заставить работать с последними выпусками IE и &quot;about:blank&quot; и, наоборот, испортить &quot;res://&quot;…)</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Mon, 09 Nov 2020 23:14:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=143400#p143400</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=20112#p20112</link>
			<description><![CDATA[<p>Бесплатный COM-сервер <a href="http://forum.script-coding.com/viewtopic.php?pid=20110#p20110">JSSys3.dll</a> предоставляет методы для вывода окон выбора файлов (в т.ч. нескольких), для сохранения файла, для вывода окон выбора цвета, выбора папки. Пример:<br /></p><div class="codebox"><pre><code>Set Sys = CreateObject(&quot;JSSys3.Ops&quot;)
r = Sys.OpenDlg(&quot;Открыть файл&quot;, &quot;bmp&quot;, &quot;C:\&quot;)
WScript.Echo r
r = Sys.OpenMultiDlg(&quot;Открыть несколько файлов&quot;, &quot;&quot;, &quot;&quot;)
WScript.Echo r
r = Sys.SaveDlg(&quot;Сохранить файл&quot;, &quot;txt&quot;)
WScript.Echo r
r = Sys.ColorDlg
WScript.Echo r &#039; возвращает шестисимвольный код (строка)
r = Sys.BrowseForFolder(&quot;Выбор папки&quot;)
WScript.Echo r</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 28 Feb 2009 10:52:10 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=20112#p20112</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=20109#p20109</link>
			<description><![CDATA[<p>Бесплатный COM-сервер <a href="http://www.jsware.net/jsware/scripts.php5#brows">JSDlgBox.dll</a> предоставляет упрощённые методы для вывода окон выбора и сохранения файлов, а также окон выбора цвета. Методы не имеют никаких параметров. Дистрибутив (архив) компонента имеет размер чуть более 10 Кб. Пример:<br /></p><div class="codebox"><pre><code>Set ob = createobject(&quot;Jsdlgbox.browser&quot;)
s = ob.openbox
WScript.Echo s
s = ob.savebox
WScript.Echo s
s = ob.colorboxrgb
WScript.Echo s &#039; возвращает Синий*65536 + Зеленый*256 + Красный
s = ob.colorboxhex
WScript.Echo s &#039; возвращает 6-символьный код (строку)</code></pre></div><p>Похожие методы предоставляет бесплатный компонент <a href="http://forum.script-coding.com/viewtopic.php?id=2873">JSForm.dll</a>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 28 Feb 2009 09:25:51 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=20109#p20109</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=7036#p7036</link>
			<description><![CDATA[<p>Ещё один вариант использования MSComDlg.CommonDialog, на этот раз на JScript.<br /></p><div class="codebox"><pre><code>Main();

function Main()
{
 var sFiles, nFiles;
 var aFiles = GetFileList();

   if ( (nFiles = aFiles.length) == 0 )
     sFiles = &#039;Список выбранных файлов пуст!&#039;;
   else
   {
     sFiles = &#039;Список выбранных файлов:\n\n&#039;;
     for (var i = 0; i &lt; nFiles; i++) 
       sFiles += &#039;  &#039; + (i + 1) + &#039;.  &#039; + aFiles[i] + &#039;\n&#039;;
   }

   WScript.Echo(sFiles);

   return(nFiles);
}


function GetFileList()
{
 var oFileDlg, aFiles;
 
  try
  {
    oFileDlg = new ActiveXObject(&quot;MSComDlg.CommonDialog&quot;);
    
    with ( oFileDlg )
    {
      // const int cdlcdlOFNHideReadOnly  = 4       (0x4);       Делает невидимым переключатель Read Only.
      // const int cdlOFNNoChangeDir      = 8       (0x8);       Вынуждает диалоговое окно устанавливать текущий каталог в тот, который был при предыдущем открытии.
      // const int cdlOFNAllowMultiselect = 512     (0x200);     Пользователь может выбрать более чем один файл. (multiple selections).
      // const int cdlOFNFileMustExist    = 4096    (0x1000);    Определяет, что можно вводить имена только существующих файлов. User can enter only names of existing files.
      // const int cdlOFNExplorer         = 524288  (0x80000);   Определяет внешний вид окна выбора.
      // const int cdlOFNLongNames        = 2097152 (0x200000);  Позволяет пользователю использовать длинные имена файлов Long filenames enable.
      Flags = 4 + 8 + 512 + 4096 + 524288 + 2097152;
      CancelError = false;
      MaxFileSize = 8192;
      filename = &quot;&quot;;
      InitDir = &quot;&quot;;
      DialogTitle = &#039;Выбор файлов: Удерживая Ctrl отметьте требуемые файлы.&#039;
      Filter = &quot;Все файлы|*.*|MS Word файлы|*.doc|MS Excel файлы|*.xls|Текстовые файлы|*.txt&quot;;
      FilterIndex = 1;
      ShowOpen();
      
      if ( filename.length &gt; 0 )
      {
        aFiles = filename.split(&quot;\0&quot;);
        if ( aFiles.length &gt; 1 )
        {
         var nFiles = aFiles.length - 1;
         var sPath  = aFiles[0];
        
           if ( sPath.charAt(sPath.length-1) != &quot;\\&quot; )
             sPath += &quot;\\&quot;;

           for(var nCnt = 0; nCnt &lt; nFiles; nCnt++)
            aFiles[nCnt] = sPath + aFiles[nCnt + 1];
            
          aFiles.length = nFiles;
        }
      }  
     }
  }
  catch(e)
  {
  }
  
  if ( aFiles == null )
   return( new Array() );
   
  return( aFiles );
}</code></pre></div><p>Пример опубликовал <strong>Large Null</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Thu, 13 Dec 2007 18:35:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=7036#p7036</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=6519#p6519</link>
			<description><![CDATA[<p>Можно вызвать диалог выбора файла, используя ActiveX-объект &quot;InternetExplorer.Application&quot;: создаём страницу с элементом FileUpload (&lt;INPUT type=&#039;file&#039;&gt;) и вызываем его метод click(), что в случае IE имитирует щелчок по кнопке &quot;Обзор&quot;:<br /></p><div class="codebox"><pre><code>var IE=new ActiveXObject(&quot;InternetExplorer.Application&quot;);
IE.Navigate(&quot;about:blank&quot;); while (IE.Busy) WScript.Sleep(100);
IE.Document.write(
  &quot;&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;&quot;+WScript.ScriptName+&quot; - Выбор файла&lt;/TITLE&gt;&lt;/HEAD&gt;&quot;+
  &quot;&lt;BODY style=&#039;display:none;&#039;&gt;&lt;FORM&gt;&lt;INPUT type=&#039;file&#039;&gt;&lt;/FORM&gt;&lt;/BODY&gt;&lt;/HTML&gt;&quot;
);
IE.Document.close();

with (IE) {
  AddressBar=false; MenuBar=false; ToolBar=false; StatusBar=false;
  Width=0; Height=0; Visible=true;
};

IE.Document.forms[0].elements[0].click();
var FilePath=IE.Document.forms[0].elements[0].value;
IE.Quit();
WScript.Echo(FilePath? &quot;Выбран файл: &quot;+FilePath: &quot;Файл не выбран.&quot;);</code></pre></div><p>Окошко минимизируем, но делаем видимым, т.к. иначе, если будут открыты другие окна IE, диалог будет выводится под ними и о его существовани нельзя будет догадаться; а так он будет либо сам выводится на переднем плане, либо на панели задач будет мигатющая кнопка, позволяющая переключится на него.<br />Автор примера - <strong>wisgest</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Fri, 30 Nov 2007 18:35:50 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=6519#p6519</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=6509#p6509</link>
			<description><![CDATA[<p>Еще один вариант (работает под любой виндой):</p><div class="codebox"><pre><code>&#039;Пример открытия одного или нескольких файлов через диалоговое окно
&#039;Для работы необходимо наличие в системе COMDLG32.OCX (на большинстве машин уже присутствует)

Set OpenDialog = CreateObject(&quot;MSComDlg.CommonDialog&quot;) &#039;Microsoft Common Dialog Control
With OpenDialog
    .DialogTitle = &quot;Откройте нужный Вам файл!&quot;
    .InitDir = &quot;C:\WINDOWS\&quot;
    .Filter = &quot;Все файлы (*.*)|*.*|Программы (*.com,*.exe)|*.com;*.exe|Текст (*.txt,*.log)|*.txt;*.log&quot;
    .FilterIndex = 2
    .Flags = 2621952
    .MaxFileSize =32000
    .ShowOpen
    Filename = .Filename
End With

If (Len(OpenDialog.FileName)= 0) Then
    WScript.Echo &quot;Файлы не выбраны!&quot;
    WScript.Quit 1
End If

files = Split(OpenDialog.Filename, vbNullChar)
count_files = UBound(files)
If count_files &gt; 0 Then
    path = files(0) + &quot;\&quot;
    For i = 1 To count_files
        WScript.Echo path + files(i)
    Next
Else
    WScript.Echo files(0)
End If</code></pre></div><p>P.S.При возникновении проблем с лицензированием, ответ подскажет <a href="http://www.google.ru/search?q=4D553650">Google</a></p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Fri, 30 Nov 2007 07:02:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=6509#p6509</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=94#p94</link>
			<description><![CDATA[<p>Другой способ выбора файла: библиотека C:\WINDOWS\system32\safrcdlg.dll предоставляет объект &quot;SAFRCFileDlg.FileOpen&quot;. Здесь нет практически никаких настроек. Это работает в Windows XP и выше.<br /></p><div class="codebox"><pre><code>Set objDialog = CreateObject(&quot;SAFRCFileDlg.FileOpen&quot;)
intResult = objDialog.OpenFileOpenDlg
WScript.Echo &quot;Результат операции: &quot; &amp; CStr(intResult)
WScript.Echo &quot;Выбран файл: &quot; &amp; objDialog.FileName</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Wed, 19 Jul 2006 18:51:50 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=94#p94</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: вызов интерактивного диалога открытия файла]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93#p93</link>
			<description><![CDATA[<p>Это работает в Windows XP и выше и обеспечивает выбор единственного файла (без множественного выбора файлов). Это диалоговое окно открытия файла фактически используется в апплете панели управления &quot;Учетные записи пользователей&quot; (C:\WINDOWS\system32\nusrmgr.cpl). Вы можете задать фильтры по расширениям файлов (свойство Filter), выбрать фильтр по умолчанию (свойство FilterIndex), задать начальный каталог (свойство InitialDir).<br /></p><div class="codebox"><pre><code>Set objDialog = CreateObject(&quot;UserAccounts.CommonDialog&quot;)
objDialog.Filter = &quot;WSH скрипты (*.vbs, *.js)|*.vbs;*.js|Все файлы (*.*)|*.*&quot;
objDialog.FilterIndex = 2
objDialog.InitialDir = &quot;C:\&quot;
intResult = objDialog.ShowOpen
If intResult = 0 Then
    Wscript.Quit
Else
    Wscript.Echo objDialog.FileName
End If</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Wed, 19 Jul 2006 18:50:33 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93#p93</guid>
		</item>
	</channel>
</rss>
