<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Генератор 4 чисел.]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=8533</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8533&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Генератор 4 чисел.».]]></description>
		<lastBuildDate>Wed, 21 Aug 2013 12:49:44 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74816#p74816</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>То есть получается оно находит все числа по кординатам.(запоминает кординаты и число которое нашло в Num found)<br />Сортирует по кординатам от малых к большему.<br />Потом убирает кординаты и готово целое число.<br />Правильно ?</p></blockquote></div><p>Да, всё очень просто.</p><div class="quotebox"><blockquote><p>Вариант 3:...Работает средне!<br />Перепрыгивает на следующие числа.</p></blockquote></div><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Там не 3, а 1 вариант в черновом виде.</p></blockquote></div><p>Забей на него, в архиве первый вариант, видимо недопиленный.<br /></p><div class="quotebox"><blockquote><p>(как у ТС):</p></blockquote></div><p>У тебя твой алгоритм выделяет области под каждую цифру, мой <strong>2 вариант</strong> работает также, попробуй и его.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 21 Aug 2013 12:49:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74816#p74816</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74814#p74814</link>
			<description><![CDATA[<p><a href="http://bit.ly/19wZDBa">Вот он.</a> (и даже не благодари <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /> )</p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Wed, 21 Aug 2013 10:37:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74814#p74814</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74813#p74813</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Отладку провел и пронаблюдал.<br />То есть получается оно находит все числа по кординатам.(запоминает кординаты и число которое нашло в Num found)<br />Сортирует по кординатам от малых к большему.<br />Потом убирает кординаты и готово целое число.<br />Правильно ?</p><div class="quotebox"><blockquote><p>Так и написано<br />serzh82saratov пишет:<br />В аттаче архив с картинками. Но у меня 125% шрифт, потому может не работать у других с моими картинками.</p></blockquote></div><p>Серьезно, думаешь я читать не умею ? Я делаю полную тишину чтобы вчитаться в каждое твое слово. И понять как ты додумался до этого и как ты это сделал! <br />Картинки я изменил в первую очередь.</p><p>1 вариант:<br /></p><div class="codebox"><pre><code>#SingleInstance Force 
SetBatchLines -1 
q::
ImageSearch, xStart, yStart, 499, 426, 542, 450, % A_ScriptDir &quot;\newscan\newdollar2.png&quot;

; форум

xEnd := 900, yEnd := 450
CountDigit := 4 ; Длинна искомого числа. -1 любая длинна.
START := A_TickCount, CountFound := 0, NumFound := Res := &quot;&quot;

Loop 10 {
    NumSearch := A_Index-1, xStartPos := xStart
    Loop {
        ImageSearch, xFound, , xStartPos, yStart, xEnd, yEnd, % A_ScriptDir &quot;\newscan\&quot; NumSearch &quot;.png&quot;
        If ErrorLevel 
            Break
        NumFound .= xFound &quot;&gt;&quot; NumSearch &quot;|&quot;, xStartPos := xFound+3, CountFound++
        }  Until CountFound = CountDigit 
    } Until CountFound = CountDigit
   

Sort, NumFound, N D|


Loop, parse, NumFound, |
    Res .= SubStr( A_LoopField, 0) 

MsgBox,, % A_TickCount - START, % Res 

Return

esc::ExitApp</code></pre></div><p><span style="color: green">Работает отлично !</span></p><p>Вариант 3:<br /></p><div class="codebox"><pre><code>#SingleInstance Force 
    ; Определяет, разрешено ли скрипту запускаться снова, если он уже выполняется.
SetBatchLines -1 

1::

ImageSearch, xStart, yStart, 499, 426, 542, 450, % A_ScriptDir &quot;\newscan\newdollar2.png&quot;

; форум

xEnd := 900, yEnd := 450

START := A_TickCount, CountFound := 0, NumFound := Res := &quot;&quot;
; 
Loop {
    NumSearch := A_Index-1, xFound := ErrorLevel := 0
    Loop {
        ImageSearch, xFound, , xStart, yStart, xEnd, yEnd, % A_ScriptDir &quot;\newscan\&quot; NumSearch &quot;.png&quot;
        If ErrorLevel
            Break
        NumFound .= xFound NumSearch &quot;|&quot;, xStart := xFound+1, CountFound++
    }
    If (CountFound = 4 || NumSearch = 9)
        Break
    }
    
Sort, NumFound, N D|

Loop, parse, NumFound, |
    Res .= SubStr( A_LoopField, 0) 

MsgBox,, % A_TickCount - START, % Res 
return

esc::ExitApp</code></pre></div><p><span style="color: red">Работает средне!</span><br />Перепрыгивает на следующие числа.<br />Как здесь<br /></p><div class="quotebox"><blockquote><p>К примеру число &quot;6814&quot; - (те числа которые я просматриваю они чучуть размыты(по другому никак!))<br />1. Оно видит 6(откладывает число 6)<br />Вот здесь происходит прыжок.<br />2. Видит число 1(откладывает число 1)<br />3. Видит число 4(откладывает число 4)<br />В итоге получается &quot;614&quot; пропускает одну цифру.</p></blockquote></div><p>Но в этот раз я знаю что с картинками все в порядке.</p><div class="quotebox"><blockquote><p>(как у ТС):</p></blockquote></div><p>Кто такой ТС ?</p>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Wed, 21 Aug 2013 10:16:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74813#p74813</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74787#p74787</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>NumFound .= xFound NumSearch &quot;|&quot; - Это непонятно!</p></blockquote></div><p>Записывается Х координата найденного числа и само число в конце. В конце - чтобы не влиять на дальнейшую сортировку<br /></p><div class="quotebox"><blockquote><p>xStart := xFound+1 ; xStart идет присвоение xFound+1 зачем ?</p></blockquote></div><p>В xStart запись Х координаты +1. След. поиск этого же числа начнётся с позиции в которой это число было найдено перед этим + 1 пиксель. Тут можно прибавить больше для улучшения скорости, точно зная минимальную ширину картинки.<br /></p><div class="quotebox"><blockquote><p>Sort, NumFound, N D| ; Происходит сортирование не понятно...</p></blockquote></div><p>Сортируем подстроки по Х координатам, <strong>N</strong> - как цифры, <strong>D|</strong> через разделитель &quot;|&quot;, чтобы они были слева на право. То есть суть алгоритма. Находя число, мы узнаем его координату в области, но незнаем какое оно по порядку в строке. Сортировка раставляет цифры на свои места. <br /></p><div class="quotebox"><blockquote><p>Loop, parse, NumFound, | ; происходит какой-то цикл<br />&nbsp; &nbsp; Res .= SubStr( A_LoopField, 0)</p></blockquote></div><p>Вырезает последний символ в отсортированных подстроках</p><div class="codebox"><pre><code>NumFound .= xFound NumSearch &quot;|&quot;</code></pre></div><p>то есть найденную цифру в подстроках, расположенных теперь слева на право как они есть на картинке исходя из координаты её нахождения в области поиска.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Для наглядности, проведи такую отладку:</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
Loop 10 {
    NumSearch := A_Index-1, xStartPos := xStart
    Loop {
        ImageSearch, xFound, , xStartPos, yStart, xEnd, yEnd, % NumSearch &quot;.png&quot;
        If ErrorLevel 
            Break
        NumFound .= xFound &quot;&gt;&quot; NumSearch &quot;|&quot;, xStartPos := xFound+1, CountFound++ 
        }  Until CountFound = CountDigit
    } Until CountFound = CountDigit
MsgBox % NumFound ; Результат всего цикла, переменная NumFound
Sort, NumFound, N D|  
MsgBox % NumFound ; Сортированная по координатам переменная NumFound
Loop, parse, NumFound, |
    MsgBox % Res .= SubStr( A_LoopField, 0) ; Смотри цикл
    
MsgBox,, % A_TickCount - START &quot;ms&quot;, % Res  
Return
</code></pre></div></div></div><p>-----<br /></p><div class="quotebox"><blockquote><p>Испробовал 3 вариант скрипта который в архиве(почему то не получилось)</p></blockquote></div><p>Так и написано</p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>В аттаче архив с картинками. Но у меня 125% шрифт, потому может неработать у других с моими картинками.</p></blockquote></div><p>Там не 3, а 1 вариант в черновом виде.<br /></p><div class="quotebox"><blockquote><p>Попробовал 1 вариант скрипта(работает)</p></blockquote></div><p>Попробуй и 2 вариант. Там кардинально другой алгоритм, <span class="bbu">может быть</span> лучше в отдельных случаях.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 20 Aug 2013 22:50:09 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74787#p74787</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74781#p74781</link>
			<description><![CDATA[<p>Проблема решена!<br />Не находило число &quot;8&quot;)<br />Безумно благодарен, я все нарадоваться не могу))</p>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Tue, 20 Aug 2013 21:47:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74781#p74781</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74779#p74779</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />О боги! Максимум 15-30мл(Размер одного числа 7х11(максимум))<br />Огромное спасибо!)<br />Испробовал 3 вариант скрипта который в архиве(почему то не получилось)<br />Попробовал 1 вариант скрипта(работает)<br />Но есть ошибка, почему то иногда перепрыгивает на другое число, если оно меньше.</p><p>К примеру число &quot;6814&quot; - (те числа которые я просматриваю они чучуть размыты(по другому никак!))<br />1. Оно видит 6(откладывает число 6)<br />Вот здесь происходит прыжок.<br />2. Видит число 1(откладывает число 1)<br />3. Видит число 4(откладывает число 4)<br />В итоге получается &quot;614&quot; пропускает одну цифру.<br />А вообще Результат супер.<br />Можешь пожалуйста объяснить <span style="color: red">красные строки ?</span>:</p><div class="quotebox"><blockquote><p>NumFound .= xFound NumSearch &quot;|&quot; <span style="color: red">- Это непонятно!</span><br />xStart := xFound+1 <span style="color: red">; xStart идет присвоение xFound+1 зачем ?</span><br />CountFound++ <span style="color: green">; А здесь все ясно))</span></p><p>Sort, NumFound, N D| <span style="color: red">; Происходит сортирование не понятно...</span><br />Loop, parse, NumFound, | <span style="color: red">; происходит какой-то цикл</span><br />	Res .= SubStr( A_LoopField, 0)<br />MsgBox,, % A_TickCount - START, % Res <span style="color: green">- здесь все ясно.</span></p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Tue, 20 Aug 2013 21:13:27 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74779#p74779</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74659#p74659</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Не появлялся на форуме потому что, <br />решил перейти на C# и узнать больше про нейронные сети.<br />Чтобы осуществить чтение чисел. - (не вышло)<br />С# Очень трудный язык и выучить его за 2 недели просто не смог. Выучу чуть позже.</p><p>Сейчас поем и испробую все! Спс.</p><p>Еще забыл добавить, прыгну с парашютом в честь своего день рожденья.<br />Встречусь со своей девушкой. Съезжу на море в Крым. и Заберу человека с Ялты.</p>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Sat, 17 Aug 2013 12:25:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74659#p74659</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74283#p74283</link>
			<description><![CDATA[<p>Заинтересовала задача. Попробовал сократить \ упростить код:</p><p> Вариант с областью под всё число (мне нравится больше): <br /></p><div class="codebox"><pre><code> 
#SingleInstance Force 
SetBatchLines -1 
SetWorkingDir %A_ScriptDir% 

Gui, Font, s99, Verdana
Gui, Add, Text, cGreen Border x0 y0, 3469
Gui, Show, x1 y1
Return

1:: 
 ; Эти координаты задают всю область поиска 
 ; т.е. после нахождения dollar2.png 
xStart := 0, yStart := 0, xEnd := 450, yEnd := 250
CountDigit := 4 ; Максимальная длинна искомого числа. -1 любая длинна.
START := A_TickCount, CountFound := 0, NumFound := Res := &quot;&quot;

Loop 10 
{
    NumSearch := A_Index-1, xStartPos := xStart
    Loop 
    {
        ImageSearch, xFound, , xStartPos, yStart, xEnd, yEnd, % NumSearch &quot;.png&quot; 
        If ErrorLevel 
            Break
        NumFound .= xFound &quot;&gt;&quot; NumSearch &quot;|&quot;, xStartPos := xFound+1, CountFound++
    }  Until CountFound = CountDigit 
} Until CountFound = CountDigit

NumFound := SubStr( NumFound, 1, -1)
Sort, NumFound, N D| 
Loop, parse, NumFound, |
    Res .= SubStr( A_LoopField, 0)
MsgBox,, % A_TickCount - START &quot;ms&quot;, % Res 
Return

GuiClose:
    ExitApp  
</code></pre></div><p>&nbsp; <br /> Вариант с областью под каждую цифру (как у ТС):<br /></p><div class="codebox"><pre><code>
#SingleInstance Force 
SetBatchLines -1 
SetWorkingDir %A_ScriptDir%

Gui, Font, s99, Verdana
Gui, Add, Text, cGreen Border x0 y0, 9876
Gui, Show, x1 y1
Return
     
2::
 ; Эти координаты задаются после нахождения dollar2.png 
xStart1 := 0, yStart1 := 0, xEnd1 := 150, yEnd1 := 250
xStart2 := 100, yStart2 := 0, xEnd2 := 250, yEnd2 := 250
xStart3 := 200, yStart3 := 0, xEnd3 := 350, yEnd3 := 250
xStart4 := 300, yStart4 := 0, xEnd4 := 450, yEnd4 := 250
START := A_TickCount, Res := &quot;&quot;
CountDigit := 4 ; Количество областей поиска.

Loop %CountDigit% 
{
    I := A_Index
    Loop 10 
    { 
        ImageSearch, , , xStart%I%, yStart%I%, xEnd%I%, yEnd%I%, % A_Index-1 &quot;.png&quot; 
        If ErrorLevel 
            Continue
        Res .= A_Index-1
        Break 
    }  
} 
    
MsgBox,, % A_TickCount - START &quot;ms&quot;, % Res 
Return    
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 06 Aug 2013 22:58:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74283#p74283</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74194#p74194</link>
			<description><![CDATA[<p><strong>Irbis</strong><br />Спасибо большое!<br />1. Можно по конкретней ? я так понимаю скорость будет что-то подобное 100мс<br />2. Убрал Aero - скорость стала 500-800<br />3. На скорую руку делал, убрал. Спасибо!<br />Сейчас все до делаю, и буду копать по первому вопросу.</p>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Sat, 03 Aug 2013 17:46:03 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74194#p74194</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74193#p74193</link>
			<description><![CDATA[<p>Время нахождения соответствия пропорционально размеру X*Y вырезанного изображения. Для ускорения лучше использовать минимально возможный кусок картинки, при котором не будет ложных срабатываний, то есть например &quot;8&quot; не будет приниматься за &quot;3&quot; и т.д. Можно поэкспериментировать со спрайтами шириной в 1-2 пикселя и высотой в цифру, и наоборот. </p><p>Если используешь Win7, проверь скорость с отключенным Aero.</p><p>Upd: Можешь пояснить смысл конструкции из поста #1 ?<br />&nbsp; &nbsp; &nbsp; Видимо, в ней есть некий тайный смысл, мне не доступный.<br /></p><div class="codebox"><pre><code>loop {
    ...
    if !ErrorLevel
        {
break
        }
    if ErrorLevel
    break
}
...
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sat, 03 Aug 2013 15:38:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74193#p74193</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74192#p74192</link>
			<description><![CDATA[<p>Изменил первый код:<br />сделал различие поиска &quot;1&quot; цифры и &quot;2&quot; &quot;3&quot; &quot;4&quot; цифры.<br />Находит полное число за 800 - 1500мс<br />Хотелось бы быстрее.</p>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Sat, 03 Aug 2013 15:13:16 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74192#p74192</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74191#p74191</link>
			<description><![CDATA[<p>В теории есть идея. Реализовать опыта нет.<br />1. PixelGetColor&nbsp; - Сделать 10 точек по таким-то координатам.<br />2. Эти 10 точек он будет сравнивать с тем что имеет.<br />По принципу:<br />если 1 точка такого цвета, 2 точка такого цвета, 3 точка такого цвета, 4 точка такого цвета, 5 точка такого цвета, 6 точка такого цвета, 7 точка такого цвета, 8 точка такого цвета, 9 точка такого цвета, 10точка такого цвета,<br />то это цифра = (к примеру 8)</p><p>По мойму это будет короче, без фото. А раз &quot;без фото&quot; то должно быть быстрее в 2 раза полюбому.</p>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Sat, 03 Aug 2013 13:42:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74191#p74191</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Генератор 4 чисел.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74190#p74190</link>
			<description><![CDATA[<p>Есть такая задача. <br />Нужно найти 4 значное число в окне. <br />Я подумал и придумал самый примитивный способ &quot;обычный перебор&quot;.<br />Сделал фото 10 цифр от 0-9<br />И задал координаторы поиска: по 1 цифре; по 2 цифре; по 3 цифре; и 4 цифре.<br />В конце все цифры складываются в одно. <br />И я получаю ответ. Все просто и все работает!</p><p>Теперь задача в другом. <br />Этот код находит 1 цифру в диапазоне 250млс- 900млс.<br />При нахождении 4 цифр диапазон ожидания возрастает от 1сек до 4 сек.</p><p>Мне нужно максимально ускорить работу скрипта. <br />Чтобы до 1 секунды.</p><div class="codebox"><pre><code>
setbachline, -1

loop {
    WinGetPos,,, W, H, A
    ImageSearch, xD, yD, 499, 430, 551, 456, C:\image\NZT_Start\scan_X\dollar2.png
    if !ErrorLevel
        {
break
        }
    if ErrorLevel
    break
}

; !!! находка кординатов 1 цифры
S1_x1:=xd+5, S1_x2:=S1_x1+15
; !!! находка кординатов 2 цифры
S2_x1:=S1_x2-5, S2_x2:=S1_x2+10
; !!! находка кординатов 3 цифры
s3_x1:=S2_x2-4, s3_x2:=S2_x2+12
; !!! находка кординатов 4 цифры
s4_x1:=S3_x2-5, s4_x2:=S3_x2+8
; !!! находка кординатов по вертикале
S1_y1:=yd-4, 
S1_y2:=S1_y1+20

s_num1:= ;
s_num2:= ;
s_num3:= ;
s_num4:= ;

num:=1 ; 1 включить/ 0 - выключить
Generation:
WinActivate, Ahk_class #########
if num = 1
scan_x1 := S1_x1, scan_x2 := S1_x2
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n2
if num = 2
scan_x1 := S2_x1, scan_x2 := S2_x2
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n3
if num = 3
scan_x1 := s3_x1, scan_x2 := s3_x2
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n4
if num = 4
scan_x1 := s4_x1, scan_x2 := s4_x2

scan_y1 := S1_y1
    scan_y2 := S1_y2
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\0.png
    if !ErrorLevel
        {
stack_n = 0
goto, boomnumber
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\00.png
    if !ErrorLevel
        {
stack_n = 0
goto, boomnumber
        }
    if ErrorLevel
    break
}
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\1.png
    if !ErrorLevel
        {
stack_n = 1
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\11.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 1
goto, boomnumber
        }
    if ErrorLevel
    break
}

;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\2.png
    if !ErrorLevel
        {
stack_n = 2
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\22.png
    if !ErrorLevel
        {
stack_n = 2
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\22.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 2
goto, boomnumber
        }
    if ErrorLevel
    break
}
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\3.png
    if !ErrorLevel
        {
stack_n = 3
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\33.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 3
goto, boomnumber
        }
    if ErrorLevel
    break
}

;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\4.png
    if !ErrorLevel
        {
stack_n = 4
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\44.png
    if !ErrorLevel
        {
stack_n = 4
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\44.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 4
goto, boomnumber
        }
    if ErrorLevel
    break
}
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\5.png
    if !ErrorLevel
        {
stack_n = 5
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\55.png
    if !ErrorLevel
        {
stack_n = 5
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\55.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 5
goto, boomnumber
        }
    if ErrorLevel
    break
}
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\6.png
    if !ErrorLevel
        {
stack_n = 6
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\66.png
    if !ErrorLevel
        {
stack_n = 6
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\66.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 6
goto, boomnumber
        }
    if ErrorLevel
    break
}
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 7
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\7.png
    if !ErrorLevel
        {
stack_n = 7
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\77.png
    if !ErrorLevel
        {
stack_n = 7
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\77.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 7
goto, boomnumber
        }
    if ErrorLevel
    break
}

;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\8.png
    if !ErrorLevel
        {
stack_n = 8
goto, boomnumber
        }
    if ErrorLevel
    break
}
;~!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 9
loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\9.png
    if !ErrorLevel
        {
stack_n = 9
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\99.png
    if !ErrorLevel
        {
stack_n = 9
break
        }
    if ErrorLevel
    break
}

loop {
    WinGetPos,,, W, H, A
    ImageSearch, X, Y, scan_x1, scan_y1, scan_x2, scan_y2, C:\image\NZT_Start\scan_X\point\99.png
    if !ErrorLevel
        {
            s_num4 := 0
stack_n = 9
goto, boomnumber
        }
    if ErrorLevel
    break
}

boomnumber:
if num = 1
{
s_num1 := stack_n, num := 2
goto, generation
}
if num = 2
{
s_num2 := stack_n, num :=3
goto, generation
}
if num = 3
{
s_num3 := stack_n, num :=4
goto, generation
}

number = %s_num1%%s_num2%%s_num3%%s_num4%</code></pre></div><p>Чтобы не думали что просто жду ответа.<br />С горем пополам разбираю этот сканер. Он не мой ... Нашел.<br /></p><div class="codebox"><pre><code>#persistent ; Делает скрипт постоянно выполняющимся
#NoEnv ; Отменяет проверку для пустых переменных
menu, tray, NoStandard
menu, tray, add,Add Scale,MenuHandler
menu, tray, add,Dec Scale,MenuHandler
menu, tray, add,Exit,MenuHandler 

SetBatchLines -1
CoordMode, Mouse, Screen
CoordMode, Tooltip, Screen
CoordMode, Pixel, Screen

Data:=&quot;#803+;|,..&quot;
;~ Data:=&quot;#&quot;

Length:=StrLen(Data)
nScale:=1

 
Gui,+Resize
Gui, font,s5,Terminal
;~ Gui, font,s5, Consolas 
Gui, Add, Edit, x0 y0 w600 h400 -wrap +HScroll +VScroll vResultText



MsgBox,Ctrl+LButton to start

^LButton::

MouseGetPos, scan_x_start, scan_y_start
currentXpos=%scan_x_start%
currentYpos=%scan_y_start%
ToolTip,``, scan_x_start, scan_y_start
WinGet,TipId,ID,ahk_class tooltips_class32
WinSet, Transparent, 100, ahk_id %TipId%

loop
{
    MouseGetPos, scan_x, scan_y
    scan_x-=currentXpos
    scan_y-=currentYpos
    
    WinMove,ahk_id %TipId%, , , , %scan_x%, %scan_y%
    GetKeyState, state, LButton,P
;~     ToolTip,%scan_x% * %scan_y%,,2
    TrayTip,Size,%scan_x% * %scan_y%
    if state=u
    {
        ToolTip
        TrayTip
        break
    }
}


CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
MouseGetPos, scan_x_end, scan_y_end

scan_current_y=%scan_y_start%
scan_current_x=%scan_x_start%
scan_current_line:=&quot;&quot;
Loop
{
    scan_current_x++
    if scan_current_x &gt; %scan_x_end%
    {
        scan_current_line =%scan_current_line%`r`n
        scan_current_y:=scan_current_y+nScale
        if scan_current_y &gt; %scan_y_end%
        {            
            break
        }
        Else           
        {
            scan_current_x = %scan_x_start%
            Proce:=Ceil(scan_current_y/scan_y_end*100)
            TrayTip, ,???? %Proce% `%, , 1
            continue
        }
        
    }
    PixelGetColor, ColorV, %scan_current_x%, %scan_current_y%
    
    b := ColorV &gt;&gt; 16 
    g := (ColorV &gt;&gt; 8) &amp; 0xFF 
    r := ColorV &amp; 0xFF
    

    YB:=Ceil((0.3*r)+(0.6*g)+(0.1*b))
    dot:=Ceil(YB/255*Length)
    StringMid,dot,Data,dot,1
    
    ColorV:=&quot;#&quot; . r . g . b
;~     scan_current_line =%scan_current_line%`[color=%ColorV%`]%dot%`[`/color`]
    scan_current_line =%scan_current_line%%dot%

}

TrayTip, ,????, , 1
sleep, 1000
TrayTip

GuiControl,,ResultText,%scan_current_line% 
Gui, Show,,Reg2Text 
return

GuiClose:
GuiControl,,ResultText,,
Gui,Hide

GuiSize:
If (ErrorLevel&lt;&gt;1) And (A_GuiWidth&lt;&gt;0)
{
    GuiControl,Move,ResultText,x0 y0 w%A_GuiWidth% h%A_GuiHeight%
}
Return

MenuHandler:
If (A_ThisMenuItemPos=1)
{
    nScale+=0.2
    TrayTip,,YScale:%nScale%
    Sleep 3000
    TrayTip,,
}
Else If (A_ThisMenuItemPos=2)
{
    nScale-=0.2
    TrayTip,,YScale:%nScale%
    Sleep 3000
    TrayTip,,
}
Else
{
    ExitApp
}    
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (OwnCorporation)]]></author>
			<pubDate>Sat, 03 Aug 2013 13:21:19 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74190#p74190</guid>
		</item>
	</channel>
</rss>
