<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=10251</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10251&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS:Как при помощи VBS получить текст из окна консольного приложения?».]]></description>
		<lastBuildDate>Wed, 17 Dec 2014 07:38:09 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89503#p89503</link>
			<description><![CDATA[<p>После завершения всех действий кроме закрытия, разумеется.<br />Если консоль не требует скрытия, то зачем вообще какие-то иные окна?<br />Можно вводить данные через InputBox и передавать через WriteLine. Только нужно заведомо знать на каком этапе выводить информацию, знать число последующих строк.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Wed, 17 Dec 2014 07:38:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89503#p89503</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89500#p89500</link>
			<description><![CDATA[<p>Но тут вы запускаете Exe.StdOut.ReadAll уже <em>после</em> завершения работы программы?</p><p>Дело в следующем.<br />Я сейчас ввожу в программу данные просто через эмуляцию ввода с клавиатуры и пауз WScript.Sleep t<br />В некоторый момент программа начинает расчёт, который может длиться 2 секунды, а может 20 минут. Я сейчас вычисляю требуемую паузу &quot;на глазок&quot;. А вместо этого хотел следить, когда программа сообщит на экране об окончании расчёта, и затребует дальнейший ввод с клавиатуры.<br />Т. е. хотел циклически Do While… WScript.Sleep 100 :Loop проверять последнюю выведенную на экран строку.</p><p>С помощью варианта с WinAPI:ReadConsoleOutputCharacter вроде получается.</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 23:59:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89500#p89500</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89499#p89499</link>
			<description><![CDATA[<div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Либо так:</div><div class="fancy_spoiler"><div class="codebox"><pre><code>n = 5 &#039; число последних строк

With CreateObject(&quot;WScript.Shell&quot;)
  If InStrRev(WScript.FullName, &quot;WScript.exe&quot;) Then
    .Run &quot;CScript.exe //NoLogo &quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot;&quot;, 0
    WScript.Quit
  Else
    Set Exe = .Exec(&quot;RADMODLS.EXE&quot;)
    For i = 1 to 12 : Exe.StdIn.WriteLine &quot;N&quot; : Next
    All = Split(Exe.StdOut.ReadAll, vbnewline) : Max = Ubound(All)
    For i = Max - n to Max - 1 : S = S &amp; vbNewLine &amp; All(i) : Next
    .Popup Mid(S, 3)
  End If
End With</code></pre></div></div></div>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 23:41:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89499#p89499</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89498#p89498</link>
			<description><![CDATA[<p>Ok.</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 23:28:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89498#p89498</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89497#p89497</link>
			<description><![CDATA[<p>Сразу никак (точнее <a href="http://forum.script-coding.com/viewtopic.php?id=4713">проблематично</a>). Конкретно тут нужно подсчитать число пропускаемых строк сначала и пройтись циклом For/to, вызывая Exe.StdOut.SkipLine, а потом уже читать через ReadAll.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 23:27:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89497#p89497</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89496#p89496</link>
			<description><![CDATA[<p>А как в некоторый момент, <em>до завершения работы программы</em>, прочитать n последних символов вывода?<br />С помощью .StdOut.Read(n) или ReadLine листать с начала… но не соображу, как определить, где &quot;текущий конец&quot; StdOut.</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 23:08:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89496#p89496</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89495#p89495</link>
			<description><![CDATA[<p>Зaменил MsgBox, пусть хоть побольше влезает.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:52:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89495#p89495</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89494#p89494</link>
			<description><![CDATA[<p>Я там малюсенькую правку ранее вносил, после кот. не должно этого быть.</p><div class="quotebox"><blockquote><p>Какой-то один подвисший ntvdm.exe в списке процессов мешал.</p></blockquote></div><p>Есть убрать, то с первого раза и старый вариант сработает. Нужно использовать текущий.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:43:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89494#p89494</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89493#p89493</link>
			<description><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Кавычку добавил. Проверьте. В пути, наверно, пробелы есть.</p></blockquote></div><p>Теперь заработало. Почти ) Показывает MsgBox только после того, как через диспетчер задач убить процесс ntvdm.exe :-/</p><p>UPD: А, всё, заработало нормально. Один подвисший ntvdm.exe в списке процессов мешал.</p><p>Большое спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:40:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89493#p89493</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89492#p89492</link>
			<description><![CDATA[<p>Кавычку добавил. Проверьте. В пути, наверно, пробелы есть.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:28:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89492#p89492</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89491#p89491</link>
			<description><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Скрипт должен лежать в той же папке, что и программа, запускать обычным вызовом по Enter/даблклик.</p></blockquote></div><p>Да, всё так и делаю.</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:20:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89491#p89491</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89490#p89490</link>
			<description><![CDATA[<p>Скрипт должен лежать в той же папке, что и программа, запускать обычным вызовом по Enter/даблклик.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:17:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89490#p89490</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89489#p89489</link>
			<description><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>вот что у меня вышло:</p></blockquote></div><p>Э-мм, а у меня это не работает.<br />Всегда выполняется условие If InStrRev(WScript.FullName, &quot;WScript.exe&quot;).<br />Если конструкцию If убрать и оставить только кусок Set Exe = .Exec… MsgBox Exe.StdOut.ReadAll, то программа запускается и тут же закрывается, а скрипт выдаёт ошибку:<br />Ошибка: Идёт закрытие канала.<br />Код: 800700E8<br />Источник: (null)</p><p>ОС Windows 7 32-бит, пользователь с правами администратора.</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 22:15:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89489#p89489</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89488#p89488</link>
			<description><![CDATA[<p>Система &quot;ниппель&quot;, конечно, но вот что у меня вышло:<br /></p><div class="codebox"><pre><code>With CreateObject(&quot;WScript.Shell&quot;)
  If InStrRev(WScript.FullName, &quot;WScript.exe&quot;) Then
    .Run &quot;CScript.exe //NoLogo &quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot;&quot;, 0
  Else
    Set Exe = .Exec(&quot;RADMODLS.EXE&quot;)
    For i = 1 to 12
      Exe.StdIn.WriteLine &quot;N&quot;
    Next
    .PopUp Exe.StdOut.ReadAll
  End If
End With</code></pre></div><p>Хотя я вообще не понял, зачем нужно подобные программы выводить в окно, к тому же существенно ограниченное по высоте.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 16 Dec 2014 21:53:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89488#p89488</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS:Как при помощи VBS получить текст из окна консольного приложения?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=89487#p89487</link>
			<description><![CDATA[<p>Заработал такой код<br /></p><div class="codebox"><pre><code>Set ws = WScript.CreateObject(&quot;WScript.Shell&quot;)

Set DX = CreateObject(&quot;DynamicWrapperX&quot;)

DX.Register &quot;user32.dll&quot;,   &quot;GetForegroundWindow&quot;,                    &quot;r=h&quot;
DX.Register &quot;user32.dll&quot;,   &quot;GetWindowThreadProcessId&quot;,  &quot;i=hL&quot;,      &quot;r=l&quot;
DX.Register &quot;kernel32.dll&quot;, &quot;AttachConsole&quot;,             &quot;i=l&quot;,       &quot;r=l&quot;
DX.Register &quot;kernel32.dll&quot;, &quot;GetStdHandle&quot;,              &quot;i=l&quot;,       &quot;r=h&quot;
DX.Register &quot;kernel32.dll&quot;, &quot;ReadConsoleOutputCharacter&quot;,&quot;i=hSlpL&quot;,   &quot;r=l&quot;

ws.Run(&quot;abcd.exe&quot;) :WScript.Sleep 2000

wh = DX.GetForegroundWindow()
pid= 0
wh = DX.GetWindowThreadProcessId(wh, pid)
res= DX.AttachConsole(pid)
sh = DX.GetStdHandle(-11)

n = 100
s = Space(n)

x = 10 :y = 3  &#039;координаты экрана, откуда надо начинать чтение
coord = y*2^16 + x

res = DX.ReadConsoleOutputCharacter(sh, s, n, coord, n)

msgbox(s)</code></pre></div><p>:)</p>]]></description>
			<author><![CDATA[null@example.com (404)]]></author>
			<pubDate>Tue, 16 Dec 2014 21:26:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=89487#p89487</guid>
		</item>
	</channel>
</rss>
