<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: пишем сценарии в формате WSF]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=1149&amp;type=atom" />
	<updated>2008-03-05T08:04:13Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=1149</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=9591#p9591" />
			<content type="html"><![CDATA[<p>Существует такой способ обработки событий объектов:<br /></p><div class="codebox"><pre><code>&lt;job&gt;
    &lt;object progid=&quot;Word.Application&quot; id=&quot;objWord&quot; events=&quot;true&quot;/&gt;
    &lt;script language=&quot;VBScript&quot;&gt;
        Sub objWord_Quit()
            WScript.Echo &quot;_Quit firing&quot;
            WScript.Quit 0
        End Sub
        
        &#039;Sub objWord_Document_New()
        &#039;    WScript.echo &quot;_Document_New firing&quot;
        &#039;End Sub
        
        With objWord
            .Visible = True
            &#039;.Documents.Add
            .Quit
        End With
        
        Do
            WScript.Sleep 1000
        Loop
    &lt;/script&gt;
&lt;/job&gt;</code></pre></div><p>Однако, практически, таким способом удается работать не со всеми событиями, и даже не со всеми объектами.<br />Благодарность за пример - <strong>alexii</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-03-05T08:04:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=9591#p9591</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8891#p8891" />
			<content type="html"><![CDATA[<p>Если <em>job2</em> вызывается из <em>job1</em>, то сообщение, выдаваемое методом <em>WshArguments.ShowUsage()</em> в <em>job2</em> и в <em>job1</em> после возврата из <em>job2</em>, строится на основании разделов <em>&lt;runtime&gt;</em> обоих заданий; при этом, если в <em>job2</em> имеются элементы <em>&lt;description&gt;</em> и <em>&lt;example&gt;</em>, то они перекрывают действие соответствующих элементов из <em>job1</em>. — Это кажется обнадёживающим, как слабый намёк на возможность динамического построения сценариев (возможно, с помощью объекта, возвращаемого <em>createComponent()</em>).<br />Пример:<br /></p><div class="codebox"><pre><code>&lt;package&gt;
&lt;job id=&#039;job1&#039;&gt;
&lt;runtime&gt;
  &lt;named name=&#039;a&#039; helpstring=&#039;строка&#039; type=&#039;string&#039;/&gt;
  &lt;named name=&#039;b&#039; helpstring=&#039;ключ&#039;/&gt;
  &lt;description&gt;Первый&lt;/description&gt;
  &lt;example&gt;Пример 1&lt;/example&gt;
&lt;/runtime&gt;
&lt;script language=&#039;VBScript&#039;&gt;
  &#039;WScript.Echo &quot;Hello!&quot;
  WScript.Arguments.ShowUsage
  createComponent &quot;job2&quot;
  WScript.Arguments.ShowUsage
&lt;/script&gt;
&lt;/job&gt;

&lt;job id=&#039;job2&#039;&gt;
&lt;runtime&gt;
  &lt;named name=&#039;b&#039; helpstring=&#039;строка&#039; type=&#039;string&#039;/&gt;
  &lt;named name=&#039;с&#039; helpstring=&#039;переключатель&#039; type=&#039;boolean&#039;/&gt;
  &lt;description&gt;Второй&lt;/description&gt;
  &lt;example&gt;Пример 2&lt;/example&gt;
&lt;/runtime&gt;
&lt;script language=&#039;VBScript&#039;&gt;
  WScript.Arguments.ShowUsage
&lt;/script&gt;
&lt;/job&gt;
&lt;/package&gt;</code></pre></div><p>Первый вызов <em>.ShowUsage()</em> (из <em>job1</em> до вызова <em>job2</em>) возвратит:<br /></p><div class="codebox"><pre><code>Первый
Использование: test.wsf [/a:значение] [/b]

Параметры:

a : строка
b : ключ
Пример 1</code></pre></div><p>Второй (из <em>job2</em>) и третий (из <em>job1</em> после возврата из <em>job2</em>):<br /></p><div class="codebox"><pre><code>Второй
Использование: test.wsf [/a:значение] [/b] [/b:значение] [/с[+|-]]

Параметры:

a : строка
b : ключ
b : строка
с : переключатель
Пример 2</code></pre></div><p>Для полноты картины попробуйте убрать элементы <em>&lt;description&gt;</em> и <em>&lt;example&gt;</em> в каждом из заданий примера по отдельности.</p><p>Благодарность за разъяснения - <strong>wisgest</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T18:30:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8891#p8891</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8890#p8890" />
			<content type="html"><![CDATA[<p>Если wsf-файл содержит несколько заданий, использующих одинаковые объекты, функции, процедуры, константы, можно выделить их (функции, процедуры…) в отдельное задание и вызывать его как вспомогательный компонент. Для взаимодействия между заданиями можно использовать передачу ссылки через временное невидимое окно Internet Explorer (конечно, если в сценарии используется окно IE для создания пользовательского интерфейса, разумнее будет воспользоваться им). При этом самым простым будет передавать (на JScript) вызвавшему заданию ссылку на глобальный объект вспомогательного — все определённые во вспомогательном задании переменные и подпрограммы будут доступны как его свойства и методы.<br /></p><div class="codebox"><pre><code>&lt;package&gt;
&lt;job id=&#039;job1&#039;&gt;
&lt;script language=&#039;JScript&#039;&gt;
var IE=new ActiveXObject(&quot;InternetExplorer.Application&quot;);
IE.Navigate(&quot;about:blank&quot;); while (IE.Busy) WScript.Sleep(100);
IE.Document.Script.name=&quot;mailbox&quot;;

var job3=createComponent(&quot;job3&quot;);
job3=IE.Document.Script.job3;

IE.Document.Script.job3=null; IE.Quit(); delete IE;
&lt;/script&gt;

&lt;script language=&#039;VBScript&#039;&gt;
  WScript.Echo &quot;7! = &quot; &amp; job3.Factorial(7)
  WScript.Echo &quot;job3.t = &quot; &amp; job3.t
&lt;/script&gt;
&lt;/job&gt;


&lt;job id=&#039;job2&#039;&gt;
&lt;script language=&#039;JScript&#039;&gt;var job2=this;&lt;/script&gt;
&lt;script language=&#039;VBScript&#039;&gt;
  Set IE = CreateObject(&quot;InternetExplorer.Application&quot;)
  IE.Navigate(&quot;about:blank&quot;): While IE.Busy: WScript.Sleep 100: Wend
  IE.Document.Script.name = &quot;mailbox&quot;

  &#039;Set job3 = createComponent(&quot;job3&quot;)
  job2.eval(&quot;createComponent(&#039;job3&#039;)&quot;)
  Set job3 = IE.Document.Script.job3

  &#039;Set IE.Document.Script.job3 = Nothing
  IE.Quit: Set IE = Nothing

  WScript.Echo &quot;7! = &quot; &amp; job3.Factorial(7)
  WScript.Echo &quot;job3.t = &quot; &amp; job3.t
&lt;/script&gt;
&lt;/job&gt;


&lt;job id=&#039;job3&#039;&gt;
&lt;script language=&#039;VBScript&#039;&gt;
  Const t = 10

  Function Factorial(N)
    Factorial = 1
    For I = 1 To N: Factorial = Factorial * I: Next
  End Function
&lt;/script&gt;

&lt;script language=&#039;JScript&#039;&gt;
(function () {
  var t=11;
  var ShellWindows=(new ActiveXObject(&quot;Shell.Application&quot;)).Windows();
  for (var i=ShellWindows.Count; --i&gt;=0;)
    try {
      var Script=ShellWindows.Item(i).Document.Script;
      if (Script.name==&quot;mailbox&quot;) {Script.job3=this; return;}
    } catch (Err) {}
})();
&lt;/script&gt;
&lt;/job&gt;
&lt;/package&gt;</code></pre></div><p>В приведённом примере <em>job3</em> — вспомогательное задание, предоставляющее константу <em>t=10</em> и функцию для вычисления факториала; <em>job1</em> и <em>job2</em> — задания, использующие <em>job3</em> (для вызова <em>job2</em> необходимо указывать параметр <em>//job:job2</em>, оно делают то же, что и <em>job1</em>, и создано лишь для показа некоторых особенностей, связанных с использованием VBScript).</p><p>• Самое важное! Обратим внимание на строку 8:<br /></p><div class="codebox"><pre><code>var job3=createComponent(&quot;job3&quot;);</code></pre></div><p>— кажется, что в этом месте нет смысла вызывать <em>createComponent()</em> как функцию, т.к. возвращаемое ей значение не используется и теряется уже при выполнении следующего оператора (можно сделать, например, так:<br /></p><div class="codebox"><pre><code>var temp=createComponent(&quot;job3&quot;); delete temp;</code></pre></div><p>и даже так:<br /></p><div class="codebox"><pre><code>try {delete createComponent(&quot;job3&quot;);} catch (e) {}</code></pre></div><p>). Но, если её заменить на<br /></p><div class="codebox"><pre><code>createComponent(&quot;job3&quot;);</code></pre></div><p>при попытке получить какое либо свойство объекта <em>job3</em> возникает ошибка, — по видимому, в таком случае они уничтожаются при завершении задания <em>job3</em>. Это является намёком на то, что, возможно, возвращаемое значение не так бесполезно, и если знать, как с ним работать, не пришлось бы прибегать ко всей этой акробатике.</p><p>• На VBScript (задание <em>job2</em>) результат оказывается отрицательным как при вызове <em>createComponent()</em> как процедуры, так и как функции. Поэтому, вместо закомментированной строки 28 пришлось призвать на помощь JScript: в строке 29 с помощью JScript-функции <em>eval()</em> вызывается интерпретатор JScript.</p><p>• Для того, чтобы не загромождать основной код вопросами установления взаимодействия между заданиями, можно JScript-сценарий из <em>job1</em> выделить в отдельный файл и включать его (с помощью тега <em>&lt;script&gt;</em> с атрибутом <em>src</em>) в начало кода всех заданий использующих вспомогательное. Так же в отдельный файл можно выделить JScript-сценарий из <em>job3</em> (его можно вставлять как в начале, так и в конце).</p><p>• Для временного невидимого окна IE вместо <em>&quot;mailbox&quot;</em> надёжнее будет использовать сгенерированное случайным образом имя и передавать его через переменную окружения.</p><p>• В <em>job3</em> сценарий (на JScript) установления взаимодействия между заданиями выполнен в виде вызова анонимной функции, чтобы определённые в нём переменные остались локальными по отношению к сценарию.</p><p>Благодарность за разъяснения - <strong>wisgest</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T18:29:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8890#p8890</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8889#p8889" />
			<content type="html"><![CDATA[<p>Взаимодействие между заданиями возможно через переменные окружения, а то, что ввод пользователя — почти всегда текстовые строки, указывает на возможную область его применения: <em>job1</em> может реализовывать интерфейсную часть, а <em>job2</em> — пакетную обработку, и вызываться как из <em>job1</em>, так и самостоятельно.<br /></p><div class="codebox"><pre><code>&lt;package&gt;
&lt;job id=&#039;job1&#039;&gt;
&lt;script language=&#039;VBScript&#039;&gt;
  Name = InputBox(&quot;Введите ваше имя:&quot;)
  If Name &lt;&gt; &quot;&quot; Then
    Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
    Set WshEnvironment = WshShell.Environment(&quot;Process&quot;)
    WshEnvironment(&quot;Name&quot;) = Name
    createComponent &quot;job2&quot;
  End If
&lt;/script&gt;
&lt;/job&gt;

&lt;job id=&#039;job2&#039;&gt;
&lt;script language=&#039;VBScript&#039;&gt;
  Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
  Name = WshShell.ExpandEnvironmentStrings(&quot;%Name%&quot;)
  WScript.Echo Name &#039;эта строка вставлена лишь для отладки,
                     &#039;т.к. при пакетной обработке взаимодействие
                     &#039;с пользователем не предполагается
  &#039;Дальнейшая работа с переменной Name...
&lt;/script&gt;
&lt;/job&gt;
&lt;/package&gt;</code></pre></div><p>Благодарность за разъяснения - <strong>wisgest</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T18:27:23Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8889#p8889</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8888#p8888" />
			<content type="html"><![CDATA[<p>О существовании функции <em>createComponent()</em> в WSF я узнал, выполнив<br /></p><div class="codebox"><pre><code>&lt;job&gt;
&lt;script language=&#039;JScript&#039;&gt;
for (var i in this) WScript.Echo(i);
&lt;/script&gt;
&lt;/job&gt;</code></pre></div><p>и получив ответ<br /></p><div class="quotebox"><blockquote><p>WSH<br />WScript<br />getResource<br />createScriptlet<br />createComponent</p></blockquote></div><p>Несколько замечаний:<br />— <em>WSH</em> — то же, что и <em>WScript</em>: <em>WSH===WScript</em>;<br />— хотя <em>createScriptlet!=createComponent</em>, но различий между ними не заметно. Вероятно, <em>createScriptlet()</em> сохранена для совместимости с более ранней версией WSH (2.0?), так же как расширение <em>«.sct»</em> наряду с <em>«.wsc»</em> и элемент <em>&lt;scriptlet&gt;</em> наряду с <em>&lt;component&gt;</em>;<br />— если выполнить такой же код из «чистого» js-файла, получим:<br /></p><div class="quotebox"><blockquote><p>WScript<br />WSH<br />i</p></blockquote></div><p>т.е. можно заметить, что в первом случае переменная <em>i</em> не является <strong>перечисляемым</strong> свойством глобального объекта, а во втором — является (свойством она является по-любому).</p><p>Благодарность за разъяснения - <strong>wisgest</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T18:25:41Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8888#p8888</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8887#p8887" />
			<content type="html"><![CDATA[<p>В wsf-файлах можно использовать функцию <em>createComponent()</em>, чтобы из одного задания (<em>&lt;job&gt;</em>) вызвать по его <em>id</em> другое задание.<br /></p><div class="codebox"><pre><code>&lt;?xml version=&#039;1.0&#039; encoding=&#039;windows-1251&#039; standalone=&#039;yes&#039;?&gt;
&lt;package&gt;
&lt;job id=&#039;job1&#039;&gt;
&lt;script language=&#039;VBScript&#039;&gt;&lt;![CDATA[
  WScript.Echo &quot;Выполняется job1&quot;
  Set obj = createComponent(&quot;job2&quot;)
  WScript.Echo &quot;job1 продолжает работу&quot;
  &#039;WScript.Echo obj.t &#039;эта строка вызывает ошибку
                      &#039;«Требуется объект &#039;obj&#039;» даже, если
                      &#039;снять комментарий с элемента &lt;public&gt; в job2 
  WScript.Echo VarType(obj)  &#039;13 = vbDataObject
  WScript.Echo TypeName(obj) &#039;&quot;job2&quot; — id вызывавшегося задания
]]&gt;&lt;/script&gt;
&lt;/job&gt;

&lt;job id=&#039;job2&#039;&gt;
&lt;!-- public&gt;&lt;property name=&#039;t&#039;/&gt;&lt;/public --&gt;
&lt;script language=&#039;VBScript&#039;&gt;&lt;![CDATA[
  Public t: t = 10
  WScript.Echo &quot;Выполняется job2&quot;
]]&gt;&lt;/script&gt;
&lt;/job&gt;
&lt;/package&gt;</code></pre></div><p>Похоже, из возвращаемого функцией объекта нельзя извлечь никакой пользы, и поэтому имеет смысл всегда вызывать её как процедуру; но здесь есть тонкости, о которых ниже.</p><p>Особенности запуска заданий с помощью <em>createComponent()</em>:<br />1) не создаётся нового процесса WScript.exe или CScript.exe;<br />2) даже если файл уже удалён, можно вызывать описанные в нём задания;<br />3) вызванное задание имеет те же аргументы командной строки, входной и выходной потоки, что и вызвавшее (можно доказать, что они имеют общий объект <em>WScript</em>);<br />4) <em>WScript.Quit()</em> в вызванном задании завершает и вызвавшее;<br />5) имеются особенности связанные с действием раздела <em>&lt;runtime&gt;</em> и сообщением, выдаваемым методом <em>WshArguments.ShowUsage()</em>, о них ниже.</p><p>Благодарность за разъяснения - <strong>wisgest</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T18:24:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8887#p8887</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8886#p8886" />
			<content type="html"><![CDATA[<p><strong>Элемент &lt;unnamed&gt;</strong></p><p>Элементы &lt;unnamed&gt; описывают безымянные параметры командной строки сценария. Атрибуты:</p><p>- <strong>name</strong> - имя параметра, как оно будет описано при выводе информации о сценарии;<br />- <strong>helpstring</strong> - описание параметра;<br />- <strong>many</strong> - если &quot;false&quot;, параметр может быть указан только один раз; по умолчанию - &quot;true&quot;.<br />- <strong>required</strong> - если &quot;true&quot;, &quot;on&quot; или 1, параметр является обязательным; по умолчанию - &quot;false&quot;, &quot;off&quot; или 0; целое число, большее 1, указывает, сколько раз параметр обязательно должен быть указан.</p><p>Информация, которая указывается в элементах &lt;unnamed&gt;, используется только для самодокументируемости: например, если при запуске сценария не будут указаны &quot;обязательные&quot; параметры, никакой ошибки не произойдёт.</p><p><strong>Элемент &lt;description&gt;</strong></p><p>Текст, описывающий сценарий. Выводится на экран при запуске сценария с ключом /?.</p><p><strong>Элемент &lt;example&gt;</strong></p><p>Текст, описывающий пример запуска сценария. Выводится на экран при запуске сценария с ключом /? после текста, указанного в теге &lt;description&gt;.</p><p><strong>Элемент &lt;resource&gt;</strong></p><p>Позволяет отделить символьные или числовые константы от остального кода сценария. Для получения значения ресурса нужно вызвать метод <strong>getResource</strong>, передав в качестве параметра символьный идентификатор ресурса (значение атрибута <strong>id</strong>). Например:</p><div class="quotebox"><blockquote><p>&lt;resource id=&quot;ver&quot;&gt;0.001&lt;/resource&gt;</p></blockquote></div><div class="quotebox"><blockquote><p>Ver = getResource(&quot;ver&quot;)</p></blockquote></div><p><strong>Элемент &lt;reference&gt;</strong></p><p>Обеспечивает доступ к мнемоническим константам, определённым в библиотеке типов нужного объекта (экземпляр объекта при этом не создаётся). Это позволяет не запоминать числовые значения констант, к которым постоянно нужно обращаться при написании кода.</p><p>Атрибут <strong>object</strong> задаёт программный идентификатор объекта. При необходимости можно указать версию объекта в атрибуте <strong>version</strong>. Вместо программного идентификатора объекта можно использовать глобальный код его библиотеки типов, задав его в атрибуте <strong>guid</strong>.</p><p>Например:</p><div class="quotebox"><blockquote><p>&lt;reference object=&quot;Scripting.FileSystemObject&quot;/&gt;</p></blockquote></div><div class="quotebox"><blockquote><p>s = ForReading</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T18:01:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8886#p8886</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8846#p8846" />
			<content type="html"><![CDATA[<p><strong>Элемент &lt;?job?&gt;</strong></p><p>Задаёт режим отладки при выполнении. Задание может быть выполнено во внешнем отладчике, если значение атрибута <strong>debug</strong> равно true (по умолчанию - false).</p><p><strong>Элемент &lt;package&gt;</strong></p><p>Может содержать один или несколько элементов &lt;job&gt;. Необходим тогда, когда с помощью элементов &lt;job&gt; нужно определить более одного задания. Если описывается только одно задание, элемент &lt;package&gt; можно не использовать.</p><p><strong>Элемент &lt;job&gt;</strong></p><p>Определяет отдельный сценарий (задание). Сценарий может состоять из нескольких частей, написанных, возможно, на разных языках.</p><p>Атрибут <strong>id</strong> определяет уникальное имя задания. Чтобы запустить конкретное зание из многозадачного WSF-файла, нужно воспользоваться параметром //job:&quot;JobID&quot; в командной строке, например:<br /></p><div class="quotebox"><blockquote><p>cscript //job:&quot;Task1&quot; file.wsf</p></blockquote></div><p>Если параметр //job:&quot;JobID&quot; не указан, запустится первое задание в файле.</p><p><strong>Элемент &lt;runtime&gt;</strong></p><p>Позволяет автоматически обрабатывать параметр /? командной строки, т.е. делает сценарий самодокументированным. Элемент &lt;runtime&gt; является контейнером для элементов &lt;named&gt;, &lt;unnamed&gt;, &lt;description&gt; и &lt;example&gt;. Элемент &lt;runtime&gt; является&nbsp; дочерним относительно &lt;job&gt; и относится к текущему заданию.</p><p><strong>Элемент &lt;named&gt;</strong></p><p>Элементы &lt;named&gt; описывают именные параметры командной строки сценария. Атрибуты:</p><p>- <strong>name</strong> - имя параметра;<br />- <strong>helpstring</strong> - описание параметра;<br />- <strong>type</strong> - тип параметра: &quot;string&quot;, &quot;boolean&quot; или &quot;simple&quot; (последнее - по умолчанию);<br />- <strong>required</strong> - если &quot;true&quot;, параметр является обязательным; по умолчанию - false.</p><p>Информация, которая указывается в элементах &lt;named&gt;, используется только для самодокументируемости: например, если при запуске сценария не будут указаны &quot;обязательные&quot; параметры, никакой ошибки не произойдёт.</p><p>Параметры типа &quot;string&quot; при вызове сценария задаются парами &quot;имя:значение&quot; (двоеточие является разделителем), примерно так:<br /></p><div class="quotebox"><blockquote><p>/par1:&quot;some value&quot; /par2:40</p></blockquote></div><p>Параметры типа &quot;simple&quot; при вызове сценария задаются без значений, примерно так:<br /></p><div class="quotebox"><blockquote><p>/par1 /par2</p></blockquote></div><p>Параметры типа &quot;boolean&quot; при вызове сценария задаются примерно так (минус означает &quot;ложь&quot;, плюс - &quot;истина&quot;):<br /></p><div class="quotebox"><blockquote><p>/par1- /par2+</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-12T21:01:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8846#p8846</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8844#p8844" />
			<content type="html"><![CDATA[<p><strong>Комментарии</strong></p><p>Комментарии вставляются двумя способами:<br /></p><div class="quotebox"><blockquote><p>&lt;!-- Первый комментарий --&gt;</p></blockquote></div><div class="quotebox"><blockquote><p>&lt;comment&gt;Второй комментарий&lt;/comment&gt;</p></blockquote></div><p><strong>Элемент &lt;?XML?&gt;</strong></p><p>Этот элемент размещается в самом начале файла - никаких других символов или пустых строк перед ним быть не должно. Чтобы использовать в файле символы кириллицы, обязательно должен быть указан атрибут <strong>encoding</strong>, например:<br /></p><div class="quotebox"><blockquote><p>&lt;?xml version=&#039;1.0&#039; encoding=&#039;windows-1251&#039;?&gt;</p></blockquote></div><p><strong>Элемент &lt;script&gt;</strong></p><p>Содержит собственно код скрипта. Атрибут <strong>language</strong> определяет язык (например, JScript или VBScript).</p><p>Код сценария должен быть помещён в секцию <strong>CDATA</strong>, которая начинается с символов <strong>&lt;![CDATA[</strong> и заканчивается символами <strong>]]&gt;</strong>, чтобы избежать ошибочной интерпретации фрагментов кода как разметки XML. Данное замечание справедливо, только если присутствует элемент &lt;?XML?&gt;, в противном случае присутствие секции CDATA приведёт к ошибке.</p><p>Атрибут <strong>src</strong> позволяет подключать внешний файл с другим сценарием и приводит к результату, как если бы содержимое подключаемого файла было расположено внутри тега &lt;script&gt;. Таким образом, можно выделить код, который должен использоваться в нескольких сценариях, и повторно использовать его без буквального копирования.</p><p><strong>Элемент &lt;object&gt;</strong></p><p>Предлагает ещё один способ создания экземпляра COM-объекта внутри сценария, например, аналогично функции CreateObject(). Атрибут <strong>id</strong> - это имя, применяемое для обращения к объекту внутри сценария. Объект, созданный с помощью этого элемента, будет глобальным, т.е. может использоваться во всех элементах &lt;script&gt; внутри данного элемента &lt;job&gt;.</p><p>Атрибуты <strong>progid</strong> и <strong>classid</strong> задают соответственно программный идентификатор и CLSID. Из этих двух атрибутов может быть указан только один.</p><p>Создание объектов посредством тега &lt;object&gt; не во всех случаях безопасно. Например, если создать таким способом объект &quot;Word.Application&quot;, то при запуске скрипта с аргументом /? этот объект будет автоматически создан. Однако после этого - при завершении работы скрипта - этот объект может оказаться неразрушенным, и вы получите &quot;зависший&quot; в памяти процесс winword.exe.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-12T20:16:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8844#p8844</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[WSH: пишем сценарии в формате WSF]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=8843#p8843" />
			<content type="html"><![CDATA[<p>Сценарии Windows Script Host с расширением <strong>wsf</strong> представляют собой файлы в формате XML, поддерживающие схему Windows Script XML.</p><p>Преимущества формата WSF:<br />- возможность задания числа, имён и типов аргументов; встроенная обработка аргумента /?, &quot;самодокументирование&quot;;<br />- возможность задания ссылок на библиотеки типов используемых в сценарии COM-объектов с помощью тега &lt;reference&gt;, что даёт доступ к внешним мнемоническим константам;<br />- удобное создание объектов посредством тега &lt;object&gt;;<br />- поддержка &quot;вложенных&quot; файлов (атрибут &quot;src&quot; тега &lt;script&gt;);<br />- хранение нескольких независимых сценариев в одном файле (тег &lt;job&gt;);<br />- возможность написания сценариев и частей одного сценария на разных языках (одновременно в одном WSF-файле), вплоть до специально устанавливаемых &quot;неродных&quot; языков, например, Python.</p><p>Обязательными для создания сценария являются элементы &lt;job&gt; и &lt;script&gt;.</p><p>Порядок вложенности тегов:<br />- элемент &lt;package&gt; может содержать один или несколько элементов &lt;job&gt;;<br />- элемент &lt;job&gt; может содержать один или несколько элементов &lt;runtime&gt;, &lt;resource&gt;, &lt;object&gt;, &lt;reference&gt; и &lt;script&gt;;<br />- элемент &lt;runtime&gt; может содержать один или несколько элементов &lt;named&gt; и &lt;unnamed&gt;, а также элементы &lt;description&gt; и &lt;example&gt;;</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-12T20:14:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=8843#p8843</id>
		</entry>
</feed>
