<?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=12899</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12899&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Считывание пикселя/ей и работа сразу в двух окнах».]]></description>
		<lastBuildDate>Thu, 10 Aug 2017 21:50:50 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Считывание пикселя/ей и работа сразу в двух окнах]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=118107#p118107</link>
			<description><![CDATA[<p>Если кратко, да.<br />Родной PixelGetColor может не подойти, если нужно много пикселей за один момент, или пиксели в окне не на переднем плане.<br />Тут вам помогут <a href="http://forum.script-coding.com/viewtopic.php?pid=97622#p97622">ф-ии</a>, есть как минимум 3. В них взятие буфера экрана и взятие пикселя из буфера - отдельные действия.<br />0) встроенная команда PixelGetColor — 20-25 мс все вместе.<br />1) ф-ия с PrintWindow — буфер 0-100 мс в зависимости от размера окна, пиксель - 0.0040 мс<br />2) ф-ия с BitBlt — буфер&nbsp; 25-60 мс, пиксель - 0.0100 мс<br />3) Для десятков пикселей и меньше лучше подойдет ф-ия с GetDCEx - буфер - мгновенно, пиксель - 0.1000-0.3000 мс<br />4) Используя PrintWindow с LockBits — буфер 50-80, пиксель - 0.0012 (!) мс<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Gdip_LockBits метод</div><div class="fancy_spoiler"><div class="codebox"><pre><code>#Include Gdip_All.ahk
SetBatchLines -1

pixelArray:=[]
pToken := Gdip_Startup()

stBitmap := A_TickCount
pBitmap := Gdip_BitmapFromScreen()
endBitmap := A_TickCount - stBitmap

stX := A_TickCount
width := Gdip_GetImageWidth(pBitmap)
height := Gdip_GetImageHeight(pBitmap)
E1 := Gdip_LockBits(pBitmap, 0, 0, width, height, Stride, Scan0, BitmapData)
endX := A_TickCount - stX

stPix := A_TickCount
loop % width
{
   A_Index_X := A_Index-1
   loop % height
      pixelArray[A_Index_X, A_Index-1] := Gdip_GetLockBitPixel(Scan0, A_Index_X, A_Index-1, Stride)
}
endPix := A_TickCount - stPix

stY := A_TickCount
Gdip_UnlockBits(pBitmap, BitmapData)
Gdip_DisposeImage(pBitmap)
endY := A_TickCount - stY

Gdip_Shutdown(pToken)

msgbox % endBitmap &quot;`n&quot; endX &quot;`n&quot; (endPix) / (width * height) &quot;`n&quot; endY &quot;`n&quot; Format(&quot;0x{:x}&quot;, pixelArray[1000, 1000]) 
</code></pre></div></div></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Thu, 10 Aug 2017 21:50:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=118107#p118107</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Считывание пикселя/ей и работа сразу в двух окнах]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=118105#p118105</link>
			<description><![CDATA[<p>Может ли AHK одновременно, ну или почти мгновенно. считывать какой пиксель в одном окне и выполнять функцию в другом? Т.е. если в первом окне появился нужный пиксель, то в другом окне он должен записать текст.<br />И может ли он считывать сразу множество точек, в которых могут меняться одновременно несколько пикселей?<br />Как считать продолжительность неизменного пикселя? Нужно чтобы после появления определенного цвета пикселя в определенной точке считалось время и потом записывалось после определенного текста. <br />И если возможно считать время, то сможет ли AHK делать это сразу в нескольких точках?</p>]]></description>
			<author><![CDATA[null@example.com (AlexSashka)]]></author>
			<pubDate>Thu, 10 Aug 2017 21:17:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=118105#p118105</guid>
		</item>
	</channel>
</rss>
