1 (изменено: IIoToII, 2017-11-15 10:41:01)

Тема: AHK: Счетчик изображений в GUI

Необходимо в режиме реального времени с минимальной задержкой искать на экране монитора и считать кол-во 9 разных картинок через imagesearch выводя результаты в графическое меню GUI. 
Код меню:

Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana


Gui, Add, Text, x6 y17 w80 h20 , 1
Gui, Add, Text, x6 y57 w80 h20 , 2
Gui, Add, Text, x6 y97 w80 h20 , 3
Gui, Add, Text, x6 y137 w80 h20 , 4
Gui, Add, Text, x6 y177 w80 h20 , 5
Gui, Add, Text, x6 y217 w80 h20 , 6
Gui, Add, Text, x6 y257 w80 h20 , 7
Gui, Add, Text, x6 y297 w80 h20 , 8
Gui, Add, Text, x6 y337 w80 h20 , 9

Gui, Font, S12 CDefault, Verdana


Gui, Add, ListBox, x96 y17 w30 h22 , 11
Gui, Add, ListBox, x96 y57 w30 h22 , 22
Gui, Add, ListBox, x96 y97 w30 h22 , 33
Gui, Add, ListBox, x96 y137 w30 h22 , 44
Gui, Add, ListBox, x96 y177 w30 h22 , 55
Gui, Add, ListBox, x96 y217 w30 h22 , 66
Gui, Add, ListBox, x96 y257 w30 h22 , 77
Gui, Add, ListBox, x96 y297 w30 h22 , 88
Gui, Add, ListBox, x96 y337 w30 h22 , 99



Gui, Show, x461 y277 h375 w136, Checker


Return

GuiClose:  
ExitApp 

Только вот как заставить imagesearch постоянно искать и пересчитывать найденные картинки в режиме реального времени  и выводить результаты в это меню я не знаю. Посмотрел по форуму, но ничего не нашел. Если кто разбирается покажите хотя бы на примере поиска одного изображения, как это можно организовать.

2

Re: AHK: Счетчик изображений в GUI

Ищете обычным способом. После того как нашли, ищете ещё раз, но уже не с начала, а после того места, на котором нашли предыдущий раз. При каждом нахождении прибавлять счётчик на единицу. По достижению пределов поиска занести показания счётчика в GUI и обнулить счётчик.

3

Re: AHK: Счетчик изображений в GUI

ypppu

А можно с примером кода, а то я освоил пока лишь обычный поиск по сохраненной картике и даже не представляю как выводить это в gui и искать с счетчиком.
Или мб тема какая уже была с похожей задачем, на примерах проще учиться.

4

Re: AHK: Счетчик изображений в GUI

Сначала изучите работу условия "Если... то... иначе...". И что такое цикл. И какие бывают операторы присвоения. Когда простое поймёте, будет смысл переходить к сложному.

5 (изменено: IIoToII, 2017-10-22 19:24:37)

Re: AHK: Счетчик изображений в GUI

ypppu

Перечитал я про переменные и imagesearch, но так и не нашел статьи, в которой бы объяснялось как продолжить поиск после нахождения 1 картинки и как вообще потом вывести в gui количество найденных изображений. Вообще ничего что могло бы помочь в решении моей задачи.

Ну вот присвоил я перемменно значение, а что дальше?

ImageSearch, FoundX, FoundY, 1277, 25, 1907, 492, *10, %A_WorkingDir%\image1.bmp     ;поиск поля ввода пароля
if ErrorLevel = 0
{
Found = 1
}

Как продолжить поиск так чтобы он запомнил найденную картинку и искал следующие соответствующие заданным критериям, каждый раз добавляя к найденному кол-ву еденицу?

6 (изменено: KusochekDobra, 2017-10-23 01:20:31)

Re: AHK: Счетчик изображений в GUI

IIoToII, а как Вы себе представляете помощь, если не разбираетесь в фундаментальных понятиях? Мне бы вот очень хотелось помочь, как, впрочем, этого хотелось и ypppu и всем тем, кто заглядывал в эту тему, но, боюсь, что никому так же, не хочется вновь возить пальчиком по разделам справки, открывая для Вас то, с чем, Вы, по сути, должны были прийти к этому обсуждению самостоятельно.

Пользуйтесь так же поиском и не обязательно гуглевым. Поиск по форуму тоже прекрасно выбирает нужные моменты. Например, можете почитать эту тему. Примеры от serzh82saratov уже реализуют поставленную Вами задачу, получая все искомые изображения и возвращая массив координат их расположения, из чего несложно сделать вывод и о их количестве в сканируемой области.

Рекомендую так же ознакомиться со стареньким переводом справки, материал которой актуален и ныне. Там же, среди прочего будут и примеры на великом и могучем.

UPD: Собственно, сам перевод.

7

Re: AHK: Счетчик изображений в GUI

Вот функция от serzh82saratov:

SetBatchLines -1
msgbox % SeveralSearch(0, 0, 1920, 1080, "blah-blah.png")

SeveralSearch(ix1, iy1, w, h, file)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	prY := y2, ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %file%
		If (ErrorLevel && ++ErrorCount > 1)
			Break
		If (mY = "" || mY > prY)
			x1 := ix1, y1 += 1, prY := y2
		Else
			x1 := mX + 1, ErrorCount := 0, y1 := mY, prY := mY, Coords.Push([mX, mY])
	}
	Return coords.MaxIndex()
}

С гуи разберетесь сами.

8

Re: AHK: Счетчик изображений в GUI

Cпасибо, буду разбираться.

9 (изменено: IIoToII, 2017-11-15 10:41:43)

Re: AHK: Счетчик изображений в GUI

Malcev

В общем почитал и попробовал на основе данной вами функции от serzh82saratov сделать счетчик для одной картинки для начала, но что то вообще ничего не ищет.
Запускается окно, но счетчик не работает. Понимаю что я тут всех уже достал своими вопросами, но не сочтите за наглость, объясните что не так в этом скрипте.)


#SingleInstance ignore
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana

Gui, Add, Text, x6 y7 w50 h20 , SCSC
Gui, Add, Text, vx1 x60 y9 w30 h17 , 0
Gui, Show, x380 y257 h38 w95, SC 

Return

GuiClose:
ExitApp  


Start:

SetBatchLines -1
msgbox % SeveralSearch(0, 0, 1920, 1080, "Image_0.bmp")

SeveralSearch(ix1, iy1, w, h, file)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	prY := y2, ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %A_WorkingDir%\Image_0.bmp
		If (ErrorLevel && ++ErrorCount > 1)
			Break
		If (mY = "" || mY > prY)
			x1 := ix1, y1 += 1, prY := y2
		Else
			x1 := mX + 1, ErrorCount := 0, y1 := mY, prY := mY, Coords.Push([mX, mY])
	}
	Return coords.MaxIndex()
}


Return

10

Re: AHK: Счетчик изображений в GUI

У вас сейчас скрипт равносилен этому:

return
msgbox Что не так в этом скрипте? Почему не выходит сообщение?

11 (изменено: IIoToII, 2017-10-27 19:56:33)

Re: AHK: Счетчик изображений в GUI

Так и есть, ну не понимаю я в ахк. Мой уровень это биндеры и простой поиск без сложных массивов.
Перечитывал мануалы, но все равно не понимаю, вот увы не тянет мой ум гуманитария такие вещи)
Но очень нужен такой скрипт, хотя бы 1 картинку искать и считать cколько ее копий на экране.
Нормального учебника по ахк как я понял нет, чтобы от и до все было, от простого к сложному с полным описанием всех функций, синтаксиса и прочего, а с тем что есть я не смог разобраться.

12

Re: AHK: Счетчик изображений в GUI

Ну и что по-вашему нужно закомментировать в 10 скрипте чтоб сообщение появилось?

13 (изменено: IIoToII, 2017-10-27 21:57:46)

Re: AHK: Счетчик изображений в GUI

Про какой 10 скрипт идет речь и что за SeveralSearch? Так и не нашел описания этой функции.

Если про msgbox, то  так тоже не работает.

#SingleInstance ignore
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana

Gui, Add, Text, x6 y7 w50 h20 , SCSC
Gui, Add, Text, vx1 x60 y9 w30 h17 , 0
Gui, Show, x380 y257 h38 w95, SC 

Return

GuiClose:
ExitApp  


Start:

SetBatchLines -1
SeveralSearch(ix1, iy1, w, h, file)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	prY := y2, ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %A_WorkingDir%\Image_0.bmp
		If (ErrorLevel && ++ErrorCount > 1)
			Break
		If (mY = "" || mY > prY)
			x1 := ix1, y1 += 1, prY := y2
		Else
			x1 := mX + 1, ErrorCount := 0, y1 := mY, prY := mY, Coords.Push([mX, mY])
	}
	Return coords.MaxIndex()
}


Return

14

Re: AHK: Счетчик изображений в GUI

IIoToII пишет:

Про какой 10 скрипт идет речь

Скрипт из 10 поста.

15

Re: AHK: Счетчик изображений в GUI

MsgBox, 0, qw, qwerty, 10

Но причем тут это ведь мне в  gui надо такой счетчик сделать и чтобы значение постоянно менялось в зависимости от того сколько в данный момент искомых копий картинки находится на экране?

16

Re: AHK: Счетчик изображений в GUI

У вас скрипт загружается, но до счетчика не доходит из-за return и ExitApp.

17 (изменено: IIoToII, 2017-10-27 23:22:32)

Re: AHK: Счетчик изображений в GUI

#SingleInstance ignore
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana

Gui, Add, Text, x6 y7 w50 h20 , SCSC
Gui, Add, Text, vx1 x60 y7 w30 h17 , 0
Gui, Show, x380 y257 h38 w95, SCE 

 


Start:

SetBatchLines -1
SeveralSearch(ix1, iy1, w, h, file)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	prY := y2, ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %A_WorkingDir%\Image_0.bmp
		If (ErrorLevel && ++ErrorCount > 1)
			Break
		If (mY = "" || mY > prY)
			x1 := ix1, y1 += 1, prY := y2
		Else
			x1 := mX + 1, ErrorCount := 0, y1 := mY, prY := mY, Coords.Push([mX, mY])
	}
	Return coords.MaxIndex()
}

Return

GuiClose:
ExitApp 

Поставил в конце, но все равно не ищет.
Где моя следующая ошибка?
Я ведь правильно понимаю что найденное значение совпадений записывается в переменной x1?
Я тут ее добавил,

Gui, Add, Text, vx1 x60 y7 w30 h17 , 0

но это не помогло.
PS Спасибо что не плюнули и решили помочь разобраться.

18

Re: AHK: Счетчик изображений в GUI

Помочь, это одно.
А скрипт за вас писать мне не хочется.
Вам надо понять, что такое функция, как ее вызвать и что она возвращает.
Это есть в справке.
Работа с гуи тоже там описана.

19

Re: AHK: Счетчик изображений в GUI

То есть тот скрипт что вы мне дали ранее не подходит сюда?

20

Re: AHK: Счетчик изображений в GUI

Я вам дал функцию, которое возвращает количество найденных совпадений.
Вы это значение можете присуждать переменной и вставлять в гуи.

21 (изменено: IIoToII, 2017-10-28 12:17:50)

Re: AHK: Счетчик изображений в GUI

ААА понял.))

#SingleInstance ignore
Gui, +ToolWindow +AlwaysOnTop
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana

Gui, Add, Text, x6 y7 w50 h20 , SCSC
Gui, Add, Text, vCounter x60 y7 w30 h17 , 0
Gui, Show, x380 y257 h38 w95, Checker v1.0E 


Space::
    

SetBatchLines -1
msgbox % SeveralSearch(0, 0, 1920, 1080, "Image_0.bmp")

SeveralSearch(ix1, iy1, w, h, file)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	prY := y2, ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %file%
		If (ErrorLevel && ++ErrorCount > 1)
			Break
		If (mY = "" || mY > prY)
			x1 := ix1, y1 += 1, prY := y2
		Else
			x1 := mX + 1, ErrorCount := 0, y1 := mY, prY := mY, Coords.Push([mX, mY])
	}
	Return coords.MaxIndex()
}


Return



F1:: Reload
F2:: ExitApp

Спасибо большое, все заработало, только вот  количество совпадений выводится отдельным окошком msgbox, а как здесь

msgbox % SeveralSearch(0, 0, 1920, 1080, "Image_0.bmp")

вместо msgbox сделать вывод в gui ?
И правильно ли я понимаю что в режиме реального времени(так чтобы счетчик сам пересчитывал кол-во совпадений в gui) вывод не сделать, только по хоткею?
PS Наткнулся на еще одну проблему, почему то не находит совпадения если искомая картинка больше 8х8 пикселей.

22 (изменено: IIoToII, 2017-10-28 13:27:06)

Re: AHK: Счетчик изображений в GUI

Спасибо большое за ваше терпение, разобрался c gui, все работает, в gui окно результат выводится.

#SingleInstance ignore
Gui, +ToolWindow +AlwaysOnTop
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana
Gui, Font, S10 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S9 CDefault, Verdana
Gui, Font, S12 CDefault, Verdana

Gui, Add, Text, x6 y7 w50 h20 , Units
Gui, Add, Text, vCounter x60 y7 w30 h17 , 0
Gui, Show, x380 y257 h38 w95, Checker v1.0E 

mylabel:

  GuiControlGet, Counter
 Counter := SeveralSearch(0, 0, 1920, 1080, "Image_0.bmp")   
GuiControl,, Counter, %Counter%    


SetBatchLines -1
SeveralSearch(0, 0, 1920, 1080, "Image_0.bmp") 

SeveralSearch(ix1, iy1, w, h, file)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	prY := y2, ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %file%
		If (ErrorLevel && ++ErrorCount > 1)
			Break
		If (mY = "" || mY > prY)
			x1 := ix1, y1 += 1, prY := y2
		Else
			x1 := mX + 1, ErrorCount := 0, y1 := mY, prY := mY, Coords.Push([mX, mY])
	}
	Return coords.MaxIndex()
}

goto mylabel




F1:: Reload
F2:: ExitApp

Осталась не решенной только проблема поиска картинок, почему то не хочет искать картинки разрешением больше 8x8 пикселей, не знаете с чем это связано?
PS При использовании вывода результата без хоткея, в режиме постоянного вывода, результат очень быстро моргает, можно ли убрать этот эффект, чтобы цифры сменялись плавно без эффекта моргания.

23

Re: AHK: Счетчик изображений в GUI

Зачем 2 раза код ищет картинку?
Почему функция находится в середине?
Зачем нужен GuiControlGet?
Почему не ищет не знаю.
Чтобы не мелькало можно попробовать добавить опцию BackgroundTrans к мелькающему контролу.

24

Re: AHK: Счетчик изображений в GUI

1 Это я такое кривое присвоение сделал и ведь работает и выводит правильное значение)
2 Хз, но работает)
3 Да тут я неправильно понял значение функции. Удалил ее из скрипта, хотя что так что так работает)

Еще раз спасибо огромное, проблема решена, решил остановиться на варианте поиск по хоткею, тк непрерывный поиск на 20 % нагружает ЦП.

25

Re: AHK: Счетчик изображений в GUI

Чтобы не нагружало вставьте в цикл sleep 50.

26 (изменено: IIoToII, 2017-10-29 18:22:29)

Re: AHK: Счетчик изображений в GUI

О спасибо.
А не подскажите, функцию BlockInput можно использовать для блокировки отдельных клавишь в таком виде:

BlockInput {A}, {D}

или эта функция блокирует сразу все клавиши?

Просто решил еще маленький скрипт написать для блокировки нажатия определенных клавиш пока на экране монитора находится определенная картинка

А все, нашел вашу же тему на форуме с подобным скриптом.