<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK v2: захват текста из окна cmd.]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=18424</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=18424&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK v2: захват текста из окна cmd.».]]></description>
		<lastBuildDate>Mon, 14 Apr 2025 09:07:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162337#p162337</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Я запускал скрипт не двойным кликом, а из редактора, поэтому у меня проблемы не возникало.</p></blockquote></div><p>Мать его за ногу, так и есть.<br />Только у меня на оборот.<br />На десятке, при запуске двойным кликом, всё работает. Из Sci-Te - только v1.<br />Вот и разобрались. Надо бы тему поднять. Тем более, у меня Sci-Te на одиннадцатую криво встала, из редактора ни запуск, ни дебаг не работает, а ещё ассоциации работают через раз.</p><p>Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Mon, 14 Apr 2025 09:07:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162337#p162337</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162336#p162336</link>
			<description><![CDATA[<p>Понял, в чём косяк второй версии. Если вы установили вторую версию поверх первой, то скрипты запускаются не сами по себе, а их запускает лаунчер, дополнительный скрипт (чтобы выбрать нужный интерпретатор), и там путаница с консолями выходит. Можно прописать в начале перезагрузку, тогда всё будет ок:<br /></p><div class="codebox"><pre><code>if !(DllCall(&#039;GetCommandLine&#039;, &#039;Str&#039;) ~= &#039; /restart(?!\S)&#039;) {
    Reload
}</code></pre></div><p>Ну, или создать ярлык, где будет прописан путь к интерпретатору.<br />Вот такой вариант лучше:<br /></p><div class="codebox"><pre><code>#Requires AutoHotkey v2

if !(DllCall(&#039;GetCommandLine&#039;, &#039;Str&#039;) ~= &#039; /restart(?!\S)&#039;) {
    Reload
}

#HotIf WinActive(&#039;ahk_class ConsoleWindowClass&#039;)
1:: MsgBox A_Clipboard := ReadConsoleOutput(WinGetPID(&#039;A&#039;))
#HotIf

ReadConsoleOutput(PID) {
    static STD_OUTPUT_HANDLE := -11, INVALID_HANDLE_VALUE := -1
    if !DllCall(&#039;AttachConsole&#039;, &#039;UInt&#039;, PID) {
        throw OSError()
    }
    hConsole := DllCall(&#039;GetStdHandle&#039;, &#039;UInt&#039;, STD_OUTPUT_HANDLE, &#039;Ptr&#039;)
    if hConsole == INVALID_HANDLE_VALUE {
        throw OSError()
    }
    CONSOLE_SCREEN_BUFFER_INFO := Buffer(24, 0)
    if !DllCall(&#039;GetConsoleScreenBufferInfo&#039;, &#039;Ptr&#039;, hConsole, &#039;Ptr&#039;, CONSOLE_SCREEN_BUFFER_INFO) {
        throw OSError()
    }
    bufferSize := NumGet(CONSOLE_SCREEN_BUFFER_INFO, &#039;UInt&#039;)
    bufferWidth := bufferSize &amp; 0xFF
    bufferHeight := bufferSize &gt;&gt; 16
    outBuf := Buffer(bufferWidth * bufferHeight * 4, 0)
    NumPut(&#039;UInt&#039;, bufferSize, readRegion := Buffer(8, 0), 4)
    if !DllCall(&#039;ReadConsoleOutput&#039;, &#039;Ptr&#039;, hConsole, &#039;Ptr&#039;, outBuf, &#039;UInt&#039;, bufferSize, &#039;UInt&#039;, 0, &#039;Ptr&#039;, readRegion) {
        throw OSError()
    }
    emptyCounter := 0
    Loop bufferHeight {
        lineNum := A_Index - 1
        line := &#039;&#039;
        Loop bufferWidth {
            line .= Chr(NumGet(outBuf, 4 * (A_Index - 1) + lineNum * bufferWidth * 4, &#039;UShort&#039;))
        }
        text .= RegExReplace(line, &#039;\s+$&#039;, &#039;`r`n&#039;)
        emptyCounter := (line ~= &#039;^\s*$&#039;) ? emptyCounter + 1 : 0
    } until emptyCounter == 5
    DllCall(&#039;FreeConsole&#039;)
    return RegExReplace(text, &#039;\s*$&#039;)
}</code></pre></div><p>Я запускал скрипт не двойным кликом, а из редактора, поэтому у меня проблемы не возникало.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 13 Apr 2025 22:47:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162336#p162336</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162335#p162335</link>
			<description><![CDATA[<p>Не особо понятно, в чём может быть проблема, если v1 работает, а v2 нет. Принцип работы не отличается.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 13 Apr 2025 20:48:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162335#p162335</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162334#p162334</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Так а на какой строке ошибка?</p></blockquote></div><p>В этих, в обоих случаях:</p><div class="codebox"><pre><code> if !DllCall(&#039;ReadConsoleOutputCharacter&#039;, &#039;Ptr&#039;, hConsole, &#039;Str&#039;, text, &#039;UInt&#039;, charCount, &#039;Ptr&#039;, 0, &#039;UInt*&#039;, &amp;read := 0),</code></pre></div><div class="codebox"><pre><code>bResult := DllCall(&quot;ReadConsoleOutputCharacter&quot;, &quot;ptr&quot;, hConsole, &quot;ptr&quot;, &amp;Buffer, &quot;uint&quot;, characterCount, &quot;ptr&quot;, 0, &quot;uint*&quot;, x, &quot;int&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sun, 13 Apr 2025 17:56:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162334#p162334</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162333#p162333</link>
			<description><![CDATA[<div class="quotebox"><cite>equipment66 пишет:</cite><blockquote><p>Но при попытке подключения консоли к процессу ошибок не было.</p></blockquote></div><p>Так а на какой строке ошибка?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 13 Apr 2025 17:42:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162333#p162333</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162331#p162331</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Проверил обе версии скрипта на 4 машинках:<br />....................................AHK v1...............AHK v2<br />WinXP SP3.................не работает..............n/a<br />Win10.......................не работает...............n/a<br />Win10 (основной).........работает...........не работает<br />Win11..........................работает.............работает</p><p>Похоже, на разных машинах тот же код может вести себя по разному.</p><div class="quotebox"><blockquote><p>Если эта ошибка случилась на функции AttachConsole, то это бывает тогда, когда функция не видит консоль у процесса.</p></blockquote></div><p>Но при попытке подключения консоли к процессу ошибок не было.<br />К тому же, у меня на той же машинке, один работает, другой - нет.<br />Надо будет попробовать в более развернутом виде потом переписать, авось отловлю что-то.</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sun, 13 Apr 2025 15:55:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162331#p162331</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162326#p162326</link>
			<description><![CDATA[<p>Если эта ошибка случилась на функции AttachConsole, то это бывает тогда, когда функция не видит консоль у процесса.<br /></p><div class="quotebox"><cite>learn.microsoft пишет:</cite><blockquote><p>If the specified process does not have a console, the error code returned is <a href="https://learn.microsoft.com/en-us/windows/console/attachconsole#:~:text=If%20the%20specified%20process%20does%20not%20have%20a%20console">ERROR_INVALID_HANDLE</a></p></blockquote></div><p>Но у меня на Windows 10 работает.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 13 Apr 2025 12:49:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162326#p162326</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162325#p162325</link>
			<description><![CDATA[<p><strong>teadrinker</strong> <br />Вечерком гляну.</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sun, 13 Apr 2025 09:25:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162325#p162325</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162324#p162324</link>
			<description><![CDATA[<p>А код на v1 работает?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 13 Apr 2025 08:53:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162324#p162324</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162323#p162323</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Спасибо.<br />На Win11 так работает.<br />А вот на Win10 - нет, при попытке извлечь текст выдает &quot;Error: (6) The handle is invalid&quot;.<br />К стати, обратил внимание, что у меня и Winspector Spy консоли среди процессов не видит.</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sun, 13 Apr 2025 08:18:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162323#p162323</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162319#p162319</link>
			<description><![CDATA[<p>На v2 так:<br /></p><div class="codebox"><pre><code>#Requires AutoHotkey v2

characterCount := 1000 ; сколько символов всего нужно прочитать

#HotIf WinActive(&#039;ahk_class ConsoleWindowClass&#039;)
1:: MsgBox ReadConsoleOutput(characterCount)
#HotIf

ReadConsoleOutput(charCount) {
    static STD_OUTPUT_HANDLE := -11, INVALID_HANDLE_VALUE := -1
    if !DllCall(&#039;AttachConsole&#039;, &#039;UInt&#039;, WinGetPID(&#039;A&#039;)) {
        throw OSError()
    }
    hConsole := DllCall(&#039;GetStdHandle&#039;, &#039;UInt&#039;, STD_OUTPUT_HANDLE, &#039;Ptr&#039;)
    if hConsole == INVALID_HANDLE_VALUE {
        throw OSError()
    }
    VarSetStrCapacity(&amp;text, charCount * 2)
    if !DllCall(&#039;ReadConsoleOutputCharacter&#039;, &#039;Ptr&#039;, hConsole, &#039;Str&#039;, text,
                                              &#039;UInt&#039;, charCount, &#039;Ptr&#039;, 0, &#039;UInt*&#039;, &amp;read := 0) {
        throw OSError()
    }
    DllCall(&#039;FreeConsole&#039;)
    return text
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 12 Apr 2025 15:29:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162319#p162319</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162318#p162318</link>
			<description><![CDATA[<p><strong>teadrinker</strong></p><p>Поправил.</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sat, 12 Apr 2025 10:25:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162318#p162318</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162316#p162316</link>
			<description><![CDATA[<div class="quotebox"><cite>equipment66 пишет:</cite><blockquote><p>в АНК v2 он не работает:</p></blockquote></div><p>А, я не понял, что под v2 нужно. Позже подправлю. Измените язык в заголовке на AHK v2.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 12 Apr 2025 09:23:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162316#p162316</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162315#p162315</link>
			<description><![CDATA[<p><strong>teadrinker</strong></p><p>Ну, в АНК v2 он не работает:<br />1: </p><div class="codebox"><pre><code>VarSetStrCapacity(&amp;Buffer, characterCount*2)</code></pre></div><p>&nbsp; &nbsp;- функция требует референции, а ее к Buffer нельзя применить. Ну, в мануале пишут, что применение этой функции не обязательно.</p><p>2: В строке </p><div class="codebox"><pre><code>DllCall(&quot;ReadConsoleOutputCharacter&quot;, &quot;ptr&quot;, hConsole, &quot;ptr&quot;, &amp;Buffer, &quot;uint&quot;, characterCount, &quot;ptr&quot;, 0, &quot;uint*&quot;, x, &quot;int&quot;)</code></pre></div><p> какая-то путаница с аргументами:</p><p>2.1: Вот здесь </p><div class="codebox"><pre><code>&quot;ptr&quot;, &amp;Buffer</code></pre></div><p> насколько я понимаю, требуется использовать &quot;str&quot;, так как функция возвращает LPTSTR&nbsp; :<br /><a href="https://learn.microsoft.com/en-us/windows/console/readconsoleoutputcharacter">https://learn.microsoft.com/en-us/windo … tcharacter</a><br /><a href="https://script-coding.com/AutoHotkey/DllCall.html">https://script-coding.com/AutoHotkey/DllCall.html</a><br />при смене жалуется на &quot;Error: Expected a String but got a Class.&quot;</p><p>2.2: для чего используется переменная &quot;x&quot;?&nbsp; При попытке исполнения получаем&nbsp; &quot;Error: This global variable has not been assigned a value.&quot; То есть, интерпретатор полагает, что х является вводной? Но по документации, так понимаю, в ее должно выводится количество считанных символов?</p>]]></description>
			<author><![CDATA[null@example.com (equipment66)]]></author>
			<pubDate>Sat, 12 Apr 2025 08:02:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162315#p162315</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK v2: захват текста из окна cmd.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=162314#p162314</link>
			<description><![CDATA[<p>У меня код из <a href="https://forum.script-coding.com/viewtopic.php?pid=61321#p61321">этого поста</a> работает. Немного подправил его:<br /></p><div class="codebox"><pre><code>characterCount := 1000 ; сколько символов всего нужно прочитать

#IfWinActive ahk_class ConsoleWindowClass
1:: MsgBox % ReadConsoleOutput(characterCount)

ReadConsoleOutput(characterCount) {
    WinGet, dwProcessId, PID, A ;окно консоли должно быть активно.
    bResult := DllCall(&quot;AttachConsole&quot;, &quot;uint&quot;, dwProcessId, &quot;int&quot;)
    if(!bResult)
    {
        msgbox не удалось подключиться к консоли
        return
    }
    hConsole := DllCall(&quot;GetStdHandle&quot;, &quot;uint&quot;, -11, &quot;ptr&quot;)
    if(hConsole==-1)
    {
        msgbox не удалось получить хендл консоли
        return
    }
    VarSetCapacity(Buffer, characterCount * 2, 0) ;консоль должна быть юникодной
    bResult := DllCall(&quot;ReadConsoleOutputCharacter&quot;, &quot;ptr&quot;, hConsole, &quot;ptr&quot;, &amp;Buffer, &quot;uint&quot;, characterCount, &quot;ptr&quot;, 0, &quot;uint*&quot;, x, &quot;int&quot;)
    if(!bResult)
    {
        msgbox не удалось получить данные
        return
    }
    DllCall(&quot;FreeConsole&quot;)
    Return StrGet(&amp;Buffer, &quot;UTF-16&quot;)
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 11 Apr 2025 20:06:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=162314#p162314</guid>
		</item>
	</channel>
</rss>
