<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Корректное закрытие окна консоли]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7331</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7331&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Корректное закрытие окна консоли».]]></description>
		<lastBuildDate>Mon, 09 Jul 2012 20:24:48 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Корректное закрытие окна консоли]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=61471#p61471</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Если элементарно запустить калькулятор из консоли, то этот код не позволит её закрыть.</p></blockquote></div><p>Да, ты прав, я поспешил. Но всё же лучше писать полный код, т. к. что-то мне подсказывает, что коллега <strong>burn</strong> вряд ли сможет его составить. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 09 Jul 2012 20:24:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=61471#p61471</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Корректное закрытие окна консоли]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=61467#p61467</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Можно так:</p></blockquote></div><p>Нельзя <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Если элементарно запустить калькулятор из консоли, то этот код не позволит её закрыть. И наоборот, если консоль будет юзать &quot;левый&quot; процесс, то консоль будет закрыта. Даже если запустить из консоли процесс, который будет использовать эту консоль, а потом из этого процесса запустить ещё один и убить первый, то родственная связь пропадёт и консоль будет убита.<br />Я думаю нужно плясать от GetConsoleProcessList. Если вернёт единицу- значит только мы эту консоль юзаем и можно смело её рубить. Если 3 или больше, то рубить нельзя. Если двое, то хрен его знает- в простейшем варианте просто рубим, в чуть более сложном смотрим кто второй владелец и если это &quot;%windir%\system32\cmd.exe&quot; или &quot;%windir%\SysWOW64\cmd.exe&quot;, то только тогда рубим.<br /></p><div class="codebox"><pre><code>   WinGet, dwProcessId, PID, A ;окно консоли должно быть активно.
   bResult := DllCall(&quot;AttachConsole&quot;, &quot;uint&quot;, dwProcessId, &quot;int&quot;)
   if(!bResult)
   {
      msgbox не удалось подключиться к консоли
      return 
   }
   MaxProcessCount := 10
   VarSetCapacity(lpdwProcessList, MaxProcessCount*4)
   ProcCount := DllCall(&quot;GetConsoleProcessList&quot;, &quot;ptr&quot;, &amp;lpdwProcessList, &quot;uint&quot;, MaxProcessCount, &quot;uint&quot;)
   if(!ProcCount)
   {
      msgbox не удалось получить список процессов
      return 
   }
   msgbox % &quot;Эту консоль использует &quot; . ProcCount . &quot;процессов.&quot;
   DllCall(&quot;FreeConsole&quot;, &quot;int&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Mon, 09 Jul 2012 17:32:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=61467#p61467</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Корректное закрытие окна консоли]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=61461#p61461</link>
			<description><![CDATA[<div class="quotebox"><cite>burn пишет:</cite><blockquote><p>Как можно отследить, выполняется ли что-нибудь в консоли, и если нет, то закрыть её?</p></blockquote></div><p>Можно так:<br /></p><div class="codebox"><pre><code>F10::
   WinGet, CMD_PID, PID, ahk_class ConsoleWindowClass
   if !CMD_PID
      return
 
   ChildProcess := &quot;&quot;
   for process in ComObjGet(&quot;winmgmts:&quot;).ExecQuery(&quot;Select * from Win32_Process&quot;)
      if (process.ParentProcessId = CMD_PID &amp;&amp; ChildProcess := 1)
         break
 
   if ChildProcess
      MsgBox, Существуют дочерние процессы!
   else
      WinClose, ahk_class ConsoleWindowClass
   return</code></pre></div><p>Информация:<br /><a href="http://l.autohotkey.net/docs/commands/Process.htm">Process</a>, пятый пример в конце статьи и далее по ссылке в MSDN.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 09 Jul 2012 11:48:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=61461#p61461</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Корректное закрытие окна консоли]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=61449#p61449</link>
			<description><![CDATA[<p>В Linux есть такая замечательная вещь, как закрытие консоли по Ctrl-D. Пытаюсь сделать нечто подобное под Win.</p><p>Что уже попробовал:</p><p>Просто напечатать в консоли exit, и нажать Enter<br /></p><div class="codebox"><pre><code>
$^d::
   WinGetClass, class, A
   if (class = &quot;ConsoleWindowClass&quot;)
      Send, exit{Enter}
   else
      Send, ^d
   return</code></pre></div><p>У меня такой способ работает не корреткно, конфликтует с Punto Switcher&#039;ом -&nbsp; когда нажимаю Ctrl-D первый раз, Punto реагируте и пытается переключить раскладку на русскую, получается, что в консоли печатается не exit, а уxit (первая буква - русская &quot;у&quot;). Скриншот:<br /><a href="http://fastpic.ru/view/42/2012/0709/c4e5580b0295926cf37fd7d2a566f9ce.jpg.html"><span class="postimg"><img src="http://i42.fastpic.ru/thumb/2012/0709/ce/c4e5580b0295926cf37fd7d2a566f9ce.jpeg" alt="http://i42.fastpic.ru/thumb/2012/0709/ce/c4e5580b0295926cf37fd7d2a566f9ce.jpeg" /></span></a><br />Если два раза подряд нажат Ctrl-D, то всё нормально.</p><p>Можно конечно просто закрыть окно WinClose, но ведь в консоли может выполняться какое-либо приложение, и закрытие окна автоматически закроет и приложение.</p><p>Как можно отследить, выполняется ли что-нибудь в консоли, и если нет, то закрыть её? И ещё вопрос: какой лучше способ предпочесть, печатание exit или WinClose?</p>]]></description>
			<author><![CDATA[null@example.com (burn)]]></author>
			<pubDate>Mon, 09 Jul 2012 07:15:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=61449#p61449</guid>
		</item>
	</channel>
</rss>
