<?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>http://forum.script-coding.com/viewtopic.php?id=6767</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=6767&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK:  Принудительно открывать окна на первом мониторе».]]></description>
		<lastBuildDate>Sun, 19 Feb 2012 13:26:45 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=57071#p57071</link>
			<description><![CDATA[<p>Да, точно!<br />Закомментировал эту строчку - заработало!<br />Притом, как вы сами сказали - она необязательна.<br />Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sun, 19 Feb 2012 13:26:45 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=57071#p57071</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=57069#p57069</link>
			<description><![CDATA[<p>Не понятно, что конкретно значит &quot;не могут ужиться&quot;, но подозреваю это из-за вызова &quot;WinWaitNotActive&quot;- эта функция ждёт деактивации окна и не возвращает управление пока это событие не произойдёт, т.е. раскладки будут проверятся только при смене активных окон.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Sun, 19 Feb 2012 13:18:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=57069#p57069</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=57063#p57063</link>
			<description><![CDATA[<p>Александр_, случилась незадача - эти 2 кода не могут ужиться.<br /></p><div class="codebox"><pre><code>r := Array()
Color = 0x00000C 
Color1 = 0x0C0000
Color2 = 0x000C00
x = 500
y = 500
w = 1 
h = 1
loop
{   
  ;   1ый код
    If (InputLayout() = &quot;Russian&quot;)
    {   
	Gui, +AlwaysOnTop -Caption +ToolWindow +LastFound
	Gui, Color, % Color
	Gui, Show, x%x% y%y% w%w% h%h% NA
    }
    Else If (InputLayout() = &quot;Latvian&quot;)
    {   
	Gui, +AlwaysOnTop -Caption +ToolWindow +LastFound
	Gui, Color, % Color1
	Gui, Show, x%x% y%y% w%w% h%h% NA
    }
    Else If (InputLayout() = &quot;English&quot;)
    {   
	Gui, +AlwaysOnTop -Caption +ToolWindow +LastFound
	Gui, Color, % Color2
	Gui, Show, x%x% y%y% w%w% h%h% NA
    }

  ;   2ой код

   id := 0|WinExist(&quot;A&quot;) ;берём активное окно!
   WinGetTitle, Title, ahk_id%id% ;получаем его заголовок
   if(InStr(Title, &quot;OOo-dev&quot;)&amp;&amp;(!r[&quot;_&quot; . id])) ;Если в заголовке есть слово &quot;Блокнот&quot; и окна нет в списке
   {
     Winrestore, ahk_id%id%
      winmove, ahk_id%id%,, 0,0,%a_screenwidth%, %A_ScreenHeight% 
      r[&quot;_&quot; . id] := id
   }
   WinWaitNotActive, ahk_id%id%
   For Key, value in r
   {
      IfWinNotExist, ahk_id%value%
      {
         r.Remove(Key)
      }
   }
   sleep, 50
}
 
InputLayout()
{
    ThreadID := DllCall(&quot;GetWindowThreadProcessId&quot;, &quot;Int&quot;, WinExist(&quot;A&quot;), &quot;Int&quot;, 0)
    HKL := DllCall(&quot;GetKeyboardLayout&quot;, &quot;uint&quot;, ThreadID, &quot;UShort&quot;)
    VarSetCapacity(sKbd, 260, 0)
    DllCall(&quot;GetLocaleInfo&quot;, &quot;uint&quot;, HKL
                           , &quot;uint&quot;, 0x1001
                           , &quot;str&quot;,  sKbd
                           , &quot;uint&quot;, 260)
    Return sKbd
}</code></pre></div><p>И я подозреваю это из-за конфликта </p><div class="quotebox"><blockquote><p>WinExist(&quot;A&quot;)</p></blockquote></div><p>Можно ли во втором коде, это чем-нибудь заменить?</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sun, 19 Feb 2012 12:18:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=57063#p57063</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56558#p56558</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Ничего себе сколько тонкостей и сложностей, казалось бы для простой задачи.</p></blockquote></div><p>Тут скорее баг, чем тонкость <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="quotebox"><cite>Malcev пишет:</cite><blockquote><div class="codebox"><pre><code>  For Key, value in r
   {
      IfWinNotExist, ahk_id%value%
      {
         r.Remove(Key)</code></pre></div></blockquote></div><p><strong>For Key, value in r</strong>- цикл по всем элементам массива <strong>r</strong>, ключ будет помещён в переменную <strong>Key</strong>, а значение в <strong>value</strong>. На примере всё понятно:<br /></p><div class="codebox"><pre><code>arr := Array()
arr[&quot;Key1&quot;] := &quot;Value1&quot;
arr[&quot;Key2&quot;] := &quot;Value2&quot;
arr[&quot;Key3&quot;] := &quot;Value3&quot;
For Key, Value in arr
{
   MsgBox %Key%, %Value%
}</code></pre></div><p><strong>r.Remove(Key)</strong>- удаление элемента с ключом <strong>Key</strong> из массива <strong>r</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Tue, 07 Feb 2012 22:10:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56558#p56558</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56557#p56557</link>
			<description><![CDATA[<p>Да работает.<br />Ничего себе сколько тонкостей и сложностей, казалось бы для простой задачи.<br />Спасибо!<br /></p><div class="codebox"><pre><code>  For Key, value in r
   {
      IfWinNotExist, ahk_id%value%
      {
         r.Remove(Key)</code></pre></div><p>А можете, пожалуйста, вот это объяснить.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2012 21:36:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56557#p56557</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56549#p56549</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Не, не получается.<br />Открываем первый блокнот, он максимизируется.<br />Мы его сдвигаем.<br />Открываем второй блокнот, он максимизируется.<br />Мы его закрываем.<br />Потом активируем первый и первый опять максимизируется.</p></blockquote></div><p>Пришлось раз 20 повторить, чтобы так и произошло <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Похоже разрабы накосячили с массивами, если имена ключей сделать строками, то проблема, вроде, пропадает:<br /></p><div class="codebox"><pre><code>r := Array()
loop
{
   id := 0|WinExist(&quot;A&quot;) ;берём активное окно!
   WinGetTitle, Title, ahk_id%id% ;получаем его заголовок
   if(InStr(Title, &quot;Блокнот&quot;)&amp;&amp;(!r[&quot;_&quot; . id])) ;Если в заголовке есть слово &quot;Блокнот&quot; и окна нет в списке
   {
     Winrestore, ahk_id%id%
      winmove, ahk_id%id%,, 0,0,%a_screenwidth%, %A_ScreenHeight% 
      r[&quot;_&quot; . id] := id
   }
   WinWaitNotActive, ahk_id%id%
   For Key, value in r
   {
      IfWinNotExist, ahk_id%value%
      {
         r.Remove(Key)
      }
   }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Tue, 07 Feb 2012 21:06:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56549#p56549</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56545#p56545</link>
			<description><![CDATA[<p>Не, не получается.<br />Открываем первый блокнот, он максимизируется.<br />Мы его сдвигаем.<br />Открываем второй блокнот, он максимизируется.<br />Мы его закрываем.<br />Потом активируем первый и первый опять максимизируется.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2012 20:21:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56545#p56545</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56544#p56544</link>
			<description><![CDATA[<div class="codebox"><pre><code>r := Array()
loop
{
   id := WinExist(&quot;A&quot;) ;берём активное окно!
   WinGetTitle, Title, ahk_id%id% ;получаем его заголовок
   if(InStr(Title, &quot;Блокнот&quot;)&amp;&amp;(!r[id])) ;Если в заголовке есть слово &quot;Блокнот&quot; и окна нет в списке
   {
     Winrestore, ahk_id%id%
      winmove, ahk_id%id%,, 0,0,%a_screenwidth%, %A_ScreenHeight% 
      r[id] := 1
   }
   WinWaitNotActive, ahk_id%id%
   For Key, value in r
   {
      IfWinNotExist, ahk_id%Key%
      {
         r.Remove(Key)
      }
   }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Tue, 07 Feb 2012 20:12:51 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56544#p56544</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56543#p56543</link>
			<description><![CDATA[<div class="codebox"><pre><code>settitlematchmode 2
r := Array()
loop
{
   WinGet id, id, Notepad, A
   if(!r[id]) ;Есть ли окно в списке
   {
     Winrestore, Notepad  
      winmove, Notepad,, 0,0,%a_screenwidth%, %A_ScreenHeight% 
      r[id] := 1
      ; msgbox % id
   }
   WinWaitNotActive, ahk_id%id% ;ждём пока активным станет другое окно
   For Key, value in r
   {
      IfWinNotExist, ahk_id%Key%
      {
         r.Remove(Key)
      }
   }
}</code></pre></div><p>Если открыть одно окно блокнота и попытаться его минимизировать, то скрипт автоматом его максимизирует.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2012 19:48:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56543#p56543</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56542#p56542</link>
			<description><![CDATA[<div class="quotebox"><cite>Irbis пишет:</cite><blockquote><p>Конечно, при повторном открытиии окно получает такой же id, а оно уже есть в списке -&gt; скрипт не срабатывает.</p></blockquote></div><p>Этот id никак не зависит от открываемой программы, более того, дескрипторы всех GUI объектов хранятся в одной таблице(HANDLEENTRY), т.е. id окна вполне может достаться, например, хуку или хоткею. Этот список, кстати, спроектирован в каждый процесс. В принципе все эти хендлы являются просто ссылками, поэтому если окно создать, потом удалить и снова создать, то оно получит тот же хэндл, я как-то об этом сразу не подумал. Тогда придётся удалять закрытые окна:<br /></p><div class="codebox"><pre><code>r := Array()
loop
{
   WinGet id, id, A
   if(!r[id]) ;Есть ли окно в списке
   {
      r[id] := 1
	  msgbox % id
   }
   WinWaitNotActive, ahk_id%id% ;ждём пока активным станет другое окно
   For Key, value in r
   {
      IfWinNotExist, ahk_id%Key%
	  {
		 r.Remove(Key)
	  }
   }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Tue, 07 Feb 2012 17:40:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56542#p56542</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56541#p56541</link>
			<description><![CDATA[<div class="codebox"><pre><code>Settitlematchmode 2
r := Array()
loop
{
   WinGet id, id, Notepad, A
   if(!r[id]) ;Есть ли окно в списке
   {
      Winrestore, Notepad  
      winmove, Notepad,, 0,0,%a_screenwidth%, %A_ScreenHeight% 
      r[id] := 1
   }
   WinWaitNotActive, ahk_id%id% ;ждём пока активным станет другое окно
   IfWinNotExist, ahk_id%id%
   r[id] := 0
}</code></pre></div><p>При минимизировании блокнота всё дёргается как припадочное.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2012 16:47:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56541#p56541</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56540#p56540</link>
			<description><![CDATA[<p>Тогда надо сделать проверку, когда окно стало неактивным - не прекратило ли оно своё существование?<br />Если да - удалить его id из списка. Добавьте в код из #5 после<br /></p><div class="codebox"><pre><code>WinWaitNotActive, ahk_id%id% ;ждём пока активным станет другое окно</code></pre></div><p>Следующие строки:<br /></p><div class="codebox"><pre><code>IfWinNotExist, ahk_id%id%
   r[id] := 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Tue, 07 Feb 2012 16:28:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56540#p56540</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56539#p56539</link>
			<description><![CDATA[<p>Так это я понимаю. <br />Не при повторном. А при открытии новых, закрытии старых....</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2012 15:21:43 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56539#p56539</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56538#p56538</link>
			<description><![CDATA[<p>Конечно, при повторном открытиии окно получает такой же id, а оно уже есть в списке -&gt; скрипт не срабатывает.</p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Tue, 07 Feb 2012 14:44:50 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56538#p56538</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Принудительно открывать окна на первом мониторе]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56535#p56535</link>
			<description><![CDATA[<p>Что-то код этот не всегда срабатывает.<br />Смысл такой. Есть программа Nview, которая привязывает определённую программу к определённому окну при работе с несколькими мониторами.<br />У меня Open Office всегда открывается на втором мониторе.<br />Но когда я захлжу на компьютер удалённо, то я вижу только один монитор, поэтому и решил взяться за изготовление скрипта, который будет документы Open Office перемещать на первый монитор.<br />А в вашем скрипте по-началу работает, а потом если я закрываю окна, потом открываю новые перестает</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2012 12:59:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56535#p56535</guid>
		</item>
	</channel>
</rss>
