<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Аналог PixelChecksum]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=9910&amp;type=atom" />
	<updated>2014-09-01T07:41:55Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=9910</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86209#p86209" />
			<content type="html"><![CDATA[<p>Автор этой функции - SKAN переделал ее под x64.<br />Хороший подарок на День знаний <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>; Example - Wait for a Screen Region to change

ChkSum := PixelChecksum( 0,0,32,32 )

While % ( ChkSum = PixelChecksum( 0,0,32,32 ) )
   Sleep, 100
MsgBox, Screen Region Change Detected!

/*   __    __  __          __ __       __    __                 _       __                  
    / /_  / /_/ /_____  _ / // /____ _/ /_  / /________________(_)___  / /_ ____  _______
   / __ \/ __/ __/ __ \(_) // // __ &#039;/ __ \/ //_/ ___/ ___/ __/ / __ \/ __// __ \/ __/ _ \
  / / / / /_/ /_/ /_/ / / // // /_/ / / / / ,&lt; (__  ) /__/ / / / /_/ / /__/ /_/ / / / // /
 /_/ /_/\__/\__/ .___(_) // / \__,_/_/ /_/_/|_/____/\___/_/ /_/ .___/\__(_)____/_/  \__ /  
              /_/     /_//_/                                 /_/                   (___/  
 
 http://ahkscript.org/boards/viewtopic.php?&amp;t=4431
__________________________________________________________________________________________
*/

PixelCheckSum( X, Y, W, H, Title := &quot;&quot; ) { ;               By SKAN,   http://goo.gl/X5dfvn
;                                                          CD:08/Jun/2009 | MD:01/Sep/2014

  Static DIBSECTION, SRCCOPY := 0x00CC0020, CAPTUREBLT := 0x40000000, BPP := 32
  Local hWnd, hDC, mDC, hBM, oBM, nSize, pBITMAPINFOHEADER, ppvBits := 0
 
  If not VarSetCapacity( DIBSECTION )
         VarSetCapacity( DIBSECTION, 104, 0 )
 
  pBITMAPINFOHEADER := &amp;DIBSECTION + ( A_PtrSize = 4 ? 24 : 32 )
 
  NumPut(  40, pBITMAPINFOHEADER +  0, &quot;UInt&quot;   )
  NumPut(   W, pBITMAPINFOHEADER +  4, &quot;UInt&quot;   )
  NumPut(   H, pBITMAPINFOHEADER +  8, &quot;UInt&quot;   )
  NumPut(   1, pBITMAPINFOHEADER + 12, &quot;UShort&quot; )
  NumPut( BPP, pBITMAPINFOHEADER + 14, &quot;UShort&quot; )

  hWnd  := WinExist( Title )
  hDC   := DllCall( &quot;GetDC&quot;, &quot;Ptr&quot;,hWnd, &quot;UPtr&quot; )
  mDC   := DllCall( &quot;CreateCompatibleDC&quot;, UInt,hDC, &quot;UPtr&quot; )

  hBM   := DllCall( &quot;CreateDIBSection&quot;, &quot;Ptr&quot;, mDC, &quot;Ptr&quot;, pBITMAPINFOHEADER, &quot;Int&quot;,0
                                      , &quot;PtrP&quot;,ppvBits, &quot;Ptr&quot;,0, &quot;Int&quot;,0, &quot;UPtr&quot; )
 
  oBM   := DllCall( &quot;SelectObject&quot;, &quot;Ptr&quot;,mDC, &quot;Ptr&quot;,hBM, &quot;UPtr&quot; )
 
  DllCall( &quot;BitBlt&quot;, &quot;Ptr&quot;,mDC, &quot;Int&quot;,0, &quot;Int&quot;,0, &quot;Int&quot;,W, &quot;Int&quot;,H, &quot;Ptr&quot;,hDC
                   , &quot;Int&quot;,X, &quot;Int&quot;,Y, &quot;UInt&quot;,SRCCOPY | CAPTUREBLT )

  DllCall( &quot;SelectObject&quot;, &quot;Ptr&quot;,mDC, &quot;Ptr&quot;,oBM )
  DllCall( &quot;DeleteDC&quot;,  &quot;Ptr&quot;,mDC )
  DllCall( &quot;ReleaseDC&quot;, &quot;Ptr&quot;,hWnd, &quot;Ptr&quot;,hDC )

  DllCall( &quot;GetObject&quot;, &quot;Ptr&quot;,hBM, &quot;Int&quot;,( A_PtrSize = 4 ? 84 : 104 ), &quot;Ptr&quot;,&amp;DIBSECTION )
  nSize := NumGet( pBITMAPINFOHEADER + 20, &quot;UInt&quot; )
 
Return DllCall( &quot;NTDLL\RtlComputeCrc32&quot;, &quot;UInt&quot;,0, &quot;Ptr&quot;,ppvBits, &quot;UInt&quot;,nSize, &quot;UInt&quot; )
     , DllCall( &quot;DeleteObject&quot;, &quot;Ptr&quot;,hBM )    
}</code></pre></div><p><a href="http://ahkscript.org/boards/viewtopic.php?&amp;t=4431">http://ahkscript.org/boards/viewtopic.php?&amp;t=4431</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2014-09-01T07:41:55Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86209#p86209</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86187#p86187" />
			<content type="html"><![CDATA[<p>Оказывается скрипт рабочий. Срабатывает моментально.<br />Правда только для 32-бит ahk.<br />Кто подскажет, как его перевести для 64?<br />И вообще, как это делается? Может сделать faq?<br />Пока понял только, что UInt надо менять на Ptr.<br />Но все-равно не работает.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2014-08-31T12:57:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86187#p86187</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86150#p86150" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Можно сравнивать как строки, без Аеро довольно быстро работает:<br /></p><div class="codebox"><pre><code>
SetBatchLines -1 
CoordMode, Pixel, Screen
DllCall(&quot;dwmapi\DwmEnableComposition&quot;, &quot;UInt&quot;, 0) 
res1 := PixelChecksum(0, 0, 111, 111)
MsgBox Результат готов.

1::
    If (PixelChecksum(0, 0, 111, 111) = res1)
        MsgBox, Область НЕ изменилась!
    Else
        MsgBox, Область изменилась!
    Return

PixelChecksum(x1, y1, x2, y2) {
    Loop % y2-y1+1
    { 
        y := y1+A_Index-1
        Loop % x2-x1+1
        {
            PixelGetColor, c, x1+A_Index-1, y 
            sum .= c &quot;|&quot; 
        }
    }      
    Return sum
}  
</code></pre></div><p>Хотя возможно что через GDIP можно правильнее сделать, не знаю.</p><p>Вы ради интереса сравните время получения результатов на autoit и анк.</p><p><a href="http://www.autohotkey.com/board/topic/20357-regionwaitchange-wait-for-region-to-change-or-stop-changing/?p=133536">Есть такой вариант</a>, но у меня реагирует не на все изменения в окне.</p></blockquote></div><p>У меня с офф.форума тоже не реагирует.<br />А твой скрипт обрабатывает за 2 секунды, раньше кустарным методом я тратил 9. Респект!<br />Вот кто бы из разбирающихся в Gdip поправил бы этот код для сравнения скоростей.<br /></p><div class="codebox"><pre><code>; Example - Wait for a Screen Region to change
ChkSum := PixelChecksum( 0,0,10,10 )
While % ( ChkSum = PixelChecksum( 0,0,10,10 ) )
  Sleep, 100
MsgBox, Screen Region Change Detected!
Return

PixelCheckSum( X, Y, W, H, Title ) {
 hWn := WinExist( Title ), hDC := DllCall( &quot;GetDC&quot;, UInt,hWn )
 mDC := DllCall( &quot;CreateCompatibleDC&quot;, UInt,hDC )
 NumPut( VarSetCapacity(BI,40,0),BI ), NumPut( W,BI,4 ) , NumPut( H,BI,8 )
 NumPut( 32,NumPut( 1,BI,12,&quot;UShort&quot; ),0,&quot;UShort&quot; )     , NumPut( 0,BI,16 )
 hBM := DllCall( &quot;CreateDIBSection&quot;, UInt,mDC, UInt,&amp;BI , Int,0, UIntP,pB, Int,0,Int,0 )
 oBM := DllCall( &quot;SelectObject&quot;, UInt,mDC, UInt,hBM )   , Rop := 0x40000000|0x00CC0020
 DllCall( &quot;BitBlt&quot;, UInt,mDC, Int,0,Int,0, Int,W,Int,H, UInt,hDC, Int,X,Int,Y, UInt,Rop )
 DllCall( &quot;shlwapi\HashData&quot;, UInt,pB, UInt,W*H*4, Int64P,Hash, UInt,8 )
 VarSetCapacity(HH,16,0), DllCall( &quot;msvcrt\sprintf&quot;, Str,HH, Str,&quot;%016I64X&quot;,UInt64,Hash )
 DllCall( &quot;DeleteObject&quot;, UInt,hBM ), DllCall( &quot;DeleteObject&quot;, UInt,oBM )
 DllCall( &quot;DeleteDC&quot;, UInt,mDC ), DllCall( &quot;ReleaseDC&quot;, UInt,hWn, UInt,hDC )
Return HH
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2014-08-26T21:20:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86150#p86150</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86083#p86083" />
			<content type="html"><![CDATA[<p>Немного модернизировал функцию <strong>PixelCheck()</strong>.<br />Размер слота вычисляется один раз при вызове функции (Pos := Slot &lt;&lt; 8)<br />Сделал по умолчанию размер одного слота на 256 точек, так как даже для 20 слотов размер необходимой памяти будет порядка ~5килобайт для каждой координаты, что несущественно для современных объемов оперативной памяти.<br />Вынес получение цвета (PixelGetColor) за пределы функции, для облегчения последующих модификаций, если такие потребуются. )</p><div class="codebox"><pre><code>PixelCheck(P*)
{
   Static X:=[], Y:=[], C:=[], N:=[]
   Slot := P[1], Pos:= Slot &lt;&lt; 8
   if P.MaxIndex() &gt; 1 &amp;&amp; N[Slot] := P.MaxIndex()&gt;&gt;1 
      Loop % N[Slot]
         C[Pos+A_index]:=PGColor(X[Pos+A_index]:=P[A_Index&lt;&lt;1],Y[Pos+A_index]:=P[(A_Index&lt;&lt;1)+1])
   else
   Loop % N[Slot]
      if (PGColor(X[Pos+A_index], Y[Pos+A_index]) != C[Pos+A_index])
         Return 0
   Return 1
}

PGColor(x,y)
{
   PixelGetColor, c, x, y
   Return c
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-08-24T10:46:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86083#p86083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86071#p86071" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>При несовпадении цвета в координатах 1100,240 функция PixelCheck сразу вернет 0, вторая пара координат проверяться не будет.</p></blockquote></div><p>Именно это и хотел узнать.</p>]]></content>
			<author>
				<name><![CDATA[Странникх]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30605</uri>
			</author>
			<updated>2014-08-23T19:09:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86071#p86071</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86067#p86067" />
			<content type="html"><![CDATA[<p>Пожалуйста. )<br />Непонятно, что подразумевается под &quot;одновременно&quot; - если это относится к алгоритму из поста #3, то сравнение всех точек не требуется. При несовпадении цвета в координатах 1100,240 функция PixelCheck сразу вернет 0, вторая пара координат проверяться не будет.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-08-23T18:06:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86067#p86067</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86065#p86065" />
			<content type="html"><![CDATA[<p>Гениальное воплощение. Огромное спасибо! </p><p>Один вопрос - они по очереди сравниваются или одновременно?<br /></p><div class="codebox"><pre><code>PixelCheck(2, 1100,240, 910,150)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Странникх]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30605</uri>
			</author>
			<updated>2014-08-23T17:57:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86065#p86065</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86064#p86064" />
			<content type="html"><![CDATA[<p>Заинтересовала тема, тем более подобные вопросы возникают регулярно. В результате получилось так:<br />Процедура PixelCheck() работает в 2х режимах - задание точек или проверка ранее заданных. Она хранит в локальных массивах наборы точек и цветовые значения, так что координаты каждый раз передавать не нужно. Наборов может быть любое количество, как и проверяемых точек в наборе, задаются они так:<br /></p><div class="codebox"><pre><code>PixelCheck(N, X1,Y1, X2, Y2, ...)</code></pre></div><p>где N - номер набора (слота), X1 Y1 и т.д. - координаты 1ой и последующих точек.<br />В таком случае проверка точек на совпадение будет такой:<br /></p><div class="codebox"><pre><code>if PixelCheck(N)
{
; Не изменились
}
else
{
; Изменились
}</code></pre></div><p>И небольшой код для демонстации. При запуске в слот №1 сохраняются координаты и цвет одной точки (50,16), в слот №2 координаты и цвет двух других точек. По клавишам F1 и F2 появляются сообщения о состоянии проверки.</p><div class="codebox"><pre><code>SetBatchLines -1
CoordMode, Pixel
PixelCheck(1, 50,16)
PixelCheck(2, 1100,240, 910,150)
Return

F1::
MsgBox % PixelCheck(1) ? &quot;Не изменилось (1)&quot; : &quot;Изменилось (1)&quot;
Return

F2::
MsgBox % PixelCheck(2) ? &quot;Не изменилось (2)&quot; : &quot;Изменилось (2)&quot;
Return

PixelCheck(P*)
{
   Static X:=[], Y:=[], C:=[], N:=[]
   Slot := P[1]
   if P.MaxIndex() &gt; 1 &amp;&amp; N[Slot] := P.MaxIndex()&gt;&gt;1 
      Loop % N[Slot] {
         PixelGetColor, Ctmp, X[(Slot&lt;&lt;4)+A_index] := P[A_Index&lt;&lt;1], Y[(Slot&lt;&lt;4)+A_index] := P[(A_Index&lt;&lt;1)+1]
         C[(Slot&lt;&lt;4)+A_index] := Ctmp
      }
   else
   Loop % N[Slot] {
      PixelGetColor, Ctmp, X[(Slot&lt;&lt;4)+A_index], Y[(Slot&lt;&lt;4)+A_index]
      if (Ctmp != C[(Slot&lt;&lt;4)+A_index])
         Return 0
   }  
   Return 1
}</code></pre></div><p>Небольшое ограничение - для чуть большего быстродействия массивы для Х,Y и С(color, цвет) сделаны непрерывными, т.е. все координаты и цвета хранятся по порядку. На практике это означает, для одного слота может быть задано не более 16 точек. Если надо больше, например проверять 32 точки, то Slot&lt;&lt;4 надо заменить массово на Slot&lt;&lt;5.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2014-08-23T16:17:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86064#p86064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86059#p86059" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Вот если бы скажем он сравнивал, например, так (y, x): 20, 5 -&gt; 20, 10 -&gt; 20, 15 -&gt; 20, 20 , то было бы намного быстрее.</p></blockquote></div><p>Ну тогда просто передавайте свои координаты:<br /></p><div class="codebox"><pre><code>
coords := [[311,44],[484,80],[591,175],[591,292],[482,387]
        ,[306,424],[127,387],[20,292],[22,175],[131,80]] 
        
res := PixelChecksum(coords)
MsgBox % res 

1::
    If (PixelChecksum(coords) = res)
        MsgBox, Область НЕ изменилась!
    Else
        MsgBox, Область изменилась!
    Return

PixelChecksum(coords) {
    For k, v in coords
    {
        PixelGetColor, c, v[1], v[2]
        sum .= c &quot;|&quot;
    }
    Return sum
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2014-08-23T11:35:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86059#p86059</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86058#p86058" />
			<content type="html"><![CDATA[<p>Попробуй так (на основе serzh82saratov):<br /></p><div class="codebox"><pre><code>#SingleInstance,force
SetBatchLines -1
CoordMode,tooltip,Screen
CoordMode,Pixel,Screen
;DllCall(&quot;dwmapi\DwmEnableComposition&quot;, &quot;UInt&quot;, 0)


x1=400
x2=400
y1=600
y2=500
coef=5  ; coef - сколько точек проверять на всей области
res1:=PixelChecksum(x1,x2,y1,y2,coef)

loop
{
  sleep,30
  If (PixelChecksum(x1,x2,y1,y2,coef)=res1)
    tooltip,Область НЕ изменилась!
  Else
  {
    tooltip,`nИзменилась!`n_
    sleep,2000
    res1:=PixelChecksum(x1,x2,y1,y2,coef)
  }
}
Return

PixelChecksum(x1,y1,x2,y2,coef)  ; coef - сколько точек проверять на всей области
{
  xc:=Round((x2-x1)/coef)
  yc:=Round((y2-y1)/coef)
  if xc&lt;1
    xc=1
  if yc&lt;1
    yc=1
  yy:=xx:=0
  Loop
  {
    if (yy&gt;y2-y1)
      break
    y:=y1+yy
    Loop
    {
      if (xx&gt;x2-x1)
        break
      tooltip,%xx%,% x1+xx+3,% y+3,3
      PixelGetColor,c,x1+xx,y
      sum.=c
      xx+=xc
    }
    yy+=yc
    xx=0
  }
  yy=0
  Return sum
}

</code></pre></div><p>Убери &quot;tooltip&quot; из функции и можно работать.</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2014-08-23T09:11:40Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86058#p86058</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86047#p86047" />
			<content type="html"><![CDATA[<p>Данный вариант медленнее. Он ведь сравнивает целую строчку. </p><p>Вот если бы скажем он сравнивал, например, так (y, x): 20, 5 -&gt; 20, 10 -&gt; 20, 15 -&gt; 20, 20 , то было бы намного быстрее. Я не знаю как кому что нужно, может кому и нужно сравнивение чистой линии, но для моего скрипта - я сравниваю разные пиксели в разных координатах одной области. Беру около 3-6 пикселей, чтобы результат поиска был быстрее и довольствуюсь этим. </p><p>Однако у меня опять таки пиксели ищутся все сразу и сравниваются также, а в Вашем варианте я вижу такую схему:<br />Ищется первый пиксель -&gt; сравнивается с запомненным пикселем -&gt; 1) если цвет пикселя равен запомненному, то перейти ко второму поиску пикселя. 2) если не равен запомненную, то вывести сообщение об ошибке. С точки зрения быстродействия этот вариант больше подходит, но как &quot;впихнуть&quot; в Ваш код я опять не имею представления.. во всяком случае пока что, ибо Ваш код выглядит не понятно и сложно для меня.</p>]]></content>
			<author>
				<name><![CDATA[Странникх]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30605</uri>
			</author>
			<updated>2014-08-22T16:24:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86047#p86047</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=86000#p86000" />
			<content type="html"><![CDATA[<p>Можно сравнивать как строки, без Аеро довольно быстро работает:<br /></p><div class="codebox"><pre><code>
SetBatchLines -1 
CoordMode, Pixel, Screen
DllCall(&quot;dwmapi\DwmEnableComposition&quot;, &quot;UInt&quot;, 0) 
res1 := PixelChecksum(0, 0, 111, 111)
MsgBox Результат готов.

1::
    If (PixelChecksum(0, 0, 111, 111) = res1)
        MsgBox, Область НЕ изменилась!
    Else
        MsgBox, Область изменилась!
    Return

PixelChecksum(x1, y1, x2, y2) {
    Loop % y2-y1+1
    { 
        y := y1+A_Index-1
        Loop % x2-x1+1
        {
            PixelGetColor, c, x1+A_Index-1, y 
            sum .= c &quot;|&quot; 
        }
    }      
    Return sum
}  
</code></pre></div><p>Хотя возможно что через GDIP можно правильнее сделать, не знаю.</p><p>Вы ради интереса сравните время получения результатов на autoit и анк.</p><p><a href="http://www.autohotkey.com/board/topic/20357-regionwaitchange-wait-for-region-to-change-or-stop-changing/?p=133536">Есть такой вариант</a>, но у меня реагирует не на все изменения в окне.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2014-08-21T05:39:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=86000#p86000</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Аналог PixelChecksum]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=85997#p85997" />
			<content type="html"><![CDATA[<p>Столкнулся с проблемой - нужно знать, когда в одной области изменились цвета пикселей.<br />В интернете нашел только для AutoIt такую команду - <a href="http://autoit-script.ru/autoit3_docs/functions/PixelChecksum.htm">http://autoit-script.ru/autoit3_docs/fu … ecksum.htm</a></p><p>Конечно, можно сделать &quot;дуболомным&quot; методом так (координаты взяты случайными):<br /></p><div class="codebox"><pre><code>pixelgetcolor, color1, 10, 10
pixelgetcolor, color2, 11, 11
pixelgetcolor, color3, 12, 12
pixelgetcolor, color4, 22, 22
pixelgetcolor, color5, 30, 30

F1::
pixelgetcolor, color11, 10, 10
pixelgetcolor, color22, 11, 11
pixelgetcolor, color33, 12, 12
pixelgetcolor, color44, 22, 22
pixelgetcolor, color55, 30, 30

if (color11 != color1 || color22 != color2 || color33 != color3 || color44 != color4 || color55 != color5)
MsgBox, Область изменилась!

if (color11 = color1 &amp;&amp; color22 = color2 &amp;&amp; color33 = color3 &amp;&amp; color44 = color4 &amp;&amp; color55 = color5)
MsgBox, Область НЕ изменилась!

Return</code></pre></div><p>Но хочется что-то.. иное или быстрее по выполнению (обработке пикселей), а то обрабатывать десятки пикселей в моем коде уж как-то много.</p>]]></content>
			<author>
				<name><![CDATA[Странникх]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30605</uri>
			</author>
			<updated>2014-08-21T00:58:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=85997#p85997</id>
		</entry>
</feed>
