1 (изменено: kdn14062000, 2020-10-25 04:57:28)

Тема: AHK: Поиск 3-х одинаковых картинок и тык по ним

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

F2::
Loop
{  
   ImageSearch, X,Y, 710, 310, 810, 410, *20 1.bmp
   if ErrorLevel = 0
    {
		Sleep, 4000
		Click, %X%, %Y%
    }
	
	ImageSearch, X,Y, 710, 410, 810, 510, *20 1.bmp
   if ErrorLevel = 0
    {
		Sleep, 4000
		Click, %X%, %Y%
    }
	ImageSearch, X,Y, 710, 510, 810, 610, *20 1.bmp
   if ErrorLevel = 0
    {
		Sleep, 4000
		Click, %X%, %Y%
    }
	ImageSearch, X,Y, 710, 610, 810, 710, *20 1.bmp
   if ErrorLevel = 0
    {
		Sleep, 4000
		Click, %X%, %Y%
    }
	ImageSearch, X,Y, 710, 710, 810, 810, *20 1.bmp
   if ErrorLevel = 0
    {
		Sleep, 4000
		Click, %X%, %Y%
    }

2

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Можно так:

loop 3
   ImageSearch, X%A_Index%, Y%A_Index%...
sleep 3000
loop 3
   Click, % X%A_Index%, % Y%A_Index%

3

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

MalcevПопробовал сделать ,вообще не работает .И в том коде который посоветовали оно еще ругается на знак % после клик

4

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Если так не будет работать, то не знаю почему.

ImageSearch, X1, Y1...
ImageSearch, X2, Y2...
ImageSearch, X3, Y3...
sleep 3000
Click, %X1%, %Y1%
Click, %X2%, %Y2%
Click, %X3%, %Y3%

5

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

MalcevБред чет(я про то что не работает)
Добавил по приколу Вывод 1 на экран ,и оно просто так пишет 1 ,даже когда нет изображения

F2::
Loop
{  
    ImageSearch, X1,Y1, 710, 310, 810, 410, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X2,Y2, 710, 410, 810, 510, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X3,Y3, 710, 510, 810, 610, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X4,Y4, 710, 610, 810, 710, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X5,Y5, 710, 710, 810, 810, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X6,Y6, 810, 310, 910, 410, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X7,Y7, 810, 410, 910, 510, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X8,Y8, 810, 510, 910, 610, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X9,Y9, 810, 610, 910, 710, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X10,Y10, 810, 710, 910, 810, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X11,Y11, 910, 310, 1010, 410, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X12,Y12, 910, 410, 1010, 510, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X13,Y13, 910, 510, 1010, 610, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X14,Y14, 910, 610, 1010, 710, *5 1.bmpif ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X15,Y15, 910, 710, 1010, 810, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X16,Y16, 1010, 310, 1110, 410, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X17,Y17, 1010, 410, 1110, 510, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X18,Y18, 1010, 510, 1110, 610, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X19,Y19, 1010, 610, 1110, 710, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X20,Y20, 1010, 710, 1110, 810, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X21,Y21, 1110, 310, 1210, 410, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X22,Y22, 1110, 410, 1210, 510, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X23,Y23, 1110, 510, 1210, 610, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X24,Y24, 1110, 610, 1210, 710, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
	ImageSearch, X25,Y25, 1110, 710, 1210, 810, *5 1.bmp
	if ErrorLevel = 0
    {
	MsgBox 1	
    }
Sleep, 5000
Click, %X%, %Y%
Click, %X1%, %Y1%
Click, %X2%, %Y2%
Click, %X3%, %Y3%
Click, %X4%, %Y4%
Click, %X5%, %Y5%
Click, %X6%, %Y6%
Click, %X7%, %Y7%
Click, %X8%, %Y8%
Click, %X9%, %Y9%
Click, %X10%, %Y10%
Click, %X11%, %Y11%
Click, %X12%, %Y12%
Click, %X13%, %Y13%
Click, %X14%, %Y14%
Click, %X15%, %Y15%
Click, %X16%, %Y16%
Click, %X17%, %Y17%
Click, %X18%, %Y18%
Click, %X19%, %Y19%
Click, %X20%, %Y20%
Click, %X21%, %Y21%
Click, %X22%, %Y22%
Click, %X23%, %Y23%
Click, %X24%, %Y24%
Click, %X25%, %Y25%
}
F3:: Pause
F4::ExitApp 

6 (изменено: serzh82saratov, 2020-10-25 18:10:28)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

просто так пишет 1 ,даже когда нет изображения

ImageSearch, X14,Y14, 910, 610, 1010, 710, *5 1.bmpif ErrorLevel = 0

На экране на время появляются 3 одинаковых картинки ,и через 3 секунды они пропадают ,а через 5 нам нужно нажать на места где они были.

Loop
{
	Sleep 100
	arr := SeveralSearch(0, 0, A_ScreenWidth, A_ScreenHeight, "*5 1.bmp")
	if !arr.Count()	
		Continue
	ToolTip % "Найдено " arr.Count() "`, ждём 8 секунд."
	Sleep 8000
	ToolTip
	For k, v in arr
		Click % v[1] " " v[2]
} 

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
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

7

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Забыл сказать, в вызове надо указать размеры а не конечные координаты как в ImageSearch. Если по аналогии с топиком, то на это замените.

arr := SeveralSearch(710, 310, 100, 500, "*20 1.bmp")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

8

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratovМб я не правильно объяснил что нужно ,а то это тоже не работает(
https://prnt.sc/v6gyn6
https://prnt.sc/v6gyt7

9

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov пишет:

Забыл сказать, в вызове надо указать размеры а не конечные координаты как в ImageSearch. Если по аналогии с топиком, то на это замените.

arr := SeveralSearch(710, 310, 100, 500, "*20 1.bmp")

А размеры чего ?

10

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Зоны поиска ?Т.е. начальная координата и потом высота и ширина ?

11

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000 пишет:

А размеры чего ?

Области поиска.

kdn14062000 пишет:

Мб я не правильно объяснил что нужно

Ну так объясните ещё раз другими словами.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000 пишет:

Зоны поиска ?Т.е. начальная координата и потом высота и ширина ?

Да.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

13

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
У нас есть 25 квадратиков ,и рандомно в 3 из них появляется картинка на 3 секунды .После чего все квадратики переворачиваются и нам нужно нажать на те где была та картинка .Скрины я выше отправил ссылками )

Post's attachments

3.png 242.2 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

14 (изменено: kdn14062000, 2020-10-25 19:03:02)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Вот второй скрин

Post's attachments

2.png 198.45 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

15 (изменено: serzh82saratov, 2020-10-25 19:38:44)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

А где картинка которую ищите?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

16 (изменено: kdn14062000, 2020-10-25 19:43:10)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
Вот тот код,который я кидал он находит только одну картинку и 1 раз кликает

Post's attachments

1.bmp 17.58 kb, 5 downloads since 2020-10-25 

You don't have the permssions to download the attachments of this post.

17 (изменено: serzh82saratov, 2020-10-25 19:53:05)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Эту находит 3 раза, 3.png из 13 поста.


#SingleInstance Force
#NoEnv

Gui -DPIScale -Caption
Gui Margin, 0, 0
Gui Add, Picture, vPicture x100 y100, 3.png    
Gui Show, x100 y100 w1300 h725


Loop
{
	Sleep 100
	arr := SeveralSearch(100, 100, 550, 550, "*85 2.png")
	if !arr.Count()  
		Continue
	ToolTip % "Найдено " arr.Count()  
	Sleep 800
	ToolTip
	For k, v in arr
	{
		MouseClick, , v[1]+40, v[2]+40, , 10  
	}  
}

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
}
Post's attachments

2.png
2.png 7.51 kb, 7 downloads since 2020-10-25 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

18

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Исправил: 3.png из 13 поста.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

19

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
Я скопировал ваш код,и запустил .Он просто открыл эту картинку и ничего не происходит.
Пробовал его отдельно запустить и назначить на F2 и протестить в игре ,тоже 0 реакции.

20

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Надо 3.png из 13 поста и 2.png из 17 поста положить в папку со скриптом. Тогда при запуске должно кликнуть по трём квадратам.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

21 (изменено: kdn14062000, 2020-11-07 11:51:15)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratovhttps://radikal.ru/video/nx6eX6X5Izs

22

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Тут достаточно pixelgetcolor.

23

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000
А что в ErrorLevel  после ImageSearch?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

24

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Malcev пишет:

Тут достаточно pixelgetcolor.

А смысл, по одному пикселю ведь нельзя определить.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

25

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Почему нельзя?
Те, которые надо - красные.

26

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratovА что там должно быть то ,я просто код скопировал .Или вы о чем ?

27

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Надо в коде MsgBox добавить.

		ImageSearch, mX, mY, x1, y1, x2, y2, %file% 
		MsgBox % ErrorLevel
		If (ErrorLevel && ++ErrorCount > 1)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

28

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Malcev пишет:

Те, которые надо - красные.

Но там есть участки прозрачные, в них любой цвет может быть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

29

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
Добавил ,вылезло окно ,в котором то 0 ,то 1 (если нажимать много раз ок)

30

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000
AutoHotkey у вас Unicode?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

31

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000 пишет:

Добавил ,вылезло окно ,в котором то 0

Если есть ноль, то очень странно что нет ToolTip Найдено. Попробуйте перекопировать код.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

32

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov пишет:

Но там есть участки прозрачные, в них любой цвет может быть.

Не понимаю.
Находим по одной точки у каждого квадрата красного цвета и проверяем их.
25 квадратов = 25 точек.

33 (изменено: kdn14062000, 2020-10-25 23:50:10)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratovhttps://radikal.ru/video/YsvLX57MmJi

34

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000, не лепите всё в кучу. Оформляйте ссылки тегом "URL". Исправьте Ваши сообщения.

35

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Malcev
А, да, в самих же квадратах прозрачности нет, я загнался.

kdn14062000 пишет:

serzh82saratovhttps://radikal.ru/video/YsvLX57MmJi

Не знаю тогда как так, у меня находит.
Ищите по пикселям, как Malcev советует.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

36 (изменено: serzh82saratov, 2020-10-26 00:47:10)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Написал код, чтобы автоматически разбивало область на таблицу.
Находит все совпадения за (limit или limit +2) вызова ImageSearch, в данном случае за 3 - 5 прохода.
По идее должно работать быстрее чем 25 раз pixelgetcolor (при худшем варианте если искомое находится в последней ячейке).
Есть ограничение, если искомого в ряду более одного, то более правые не должны быть выше предыдущих, иначе те что левее и ниже в этом ряду не будут найдены.


#SingleInstance Force
#NoEnv

Gui -DPIScale -Caption
Gui Margin, 0, 0
Gui Add, Picture, vPicture x100 y100, 3.png    
Gui Show, x100 y100 w700 h700

Loop
{
	Sleep 100
	arr := SeveralSearchInTable(100, 100, 490, 490, 5, 5, "*10 *TransBlack 2.png", 3)
	if !arr.Count()  
		Continue
	ToolTip % "Найдено " arr.Count()  
	Sleep 800
	ToolTip
	For k, v in arr
	{
		MouseClick, , v[1] + 25, v[2] + 25, , 10   
	}  
}

SeveralSearchInTable(ix1, iy1, w, h, col, row, file, limit = 0)  {
	x1 := ix1, y1 := iy1, x2 := ix1 + w - 1, y2 := iy1 + h - 1
	cw := w / col, ch := h / row, c := r := 1
	ErrorCount := 0, Coords := []
	Loop
	{
		ImageSearch, mX, mY, x1, y1, x2, y2, %file% 
		If (ErrorLevel && ++ErrorCount > 1)
			Break 
		If (mY = "")
		{
			x1 := ix1
			y1 := iy1 + ((r) * ch)
			y2 := iy1 + h - 1 
		}
		Else
		{
			c := Ceil((mX - ix1) / cw)
			r := Ceil((mY - iy1) / ch)
			x1 := c = col ? ix1 : ix1 + c * cw
			y1 := c = col ? iy1 + r * ch : iy1 + ((r - 1) * ch)
			y2 := c = col ? iy1 + h - 1 : y1 + ch
			ErrorCount := 0
			Coords.Push([mX, mY])
			If (limit = Coords.Count() || c = col && r = row)
				Break 
		}
	} 
	Return Coords
}

Esc::ExitApp
Post's attachments

2.png
2.png 334 b, 6 downloads since 2020-10-25 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

37 (изменено: kdn14062000, 2020-10-26 00:39:07)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
И это не работает,мб это из-за разрешения экрана(1920-1080) или из-за чего еще .
Другой скрипт работает нормально ,который наводится на картинку и жмякает на нее несколько раз .

38

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Вы 2.png новый скачали?
Может размер шрифта windows увеличенный?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

39

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
Файлик новый,размеры шрифта стандартный ,если я кншн правильно вас понял.

Post's attachments

2.png
2.png 6.66 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

40 (изменено: serzh82saratov, 2020-10-26 00:47:21)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

А AutoHotkey какой?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

41

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Забыл, фон тоже поменял.

Post's attachments

3.png 148.73 kb, 1 downloads since 2020-10-25 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

42 (изменено: kdn14062000, 2020-10-26 00:51:23)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
Сейчас попробую обновить до последней ,а была 1.1.24.01.
Да ну нафиг,это реально было из-за версии.А моя версия вышла 3- 4 месяца назад(

43

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

https://poster.radikal.ru/2010/5a/e212bf854956.jpg

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

44

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000 пишет:

Да ну нафиг,это реально было из-за версии.А моя версия вышла 3- 4 месяца назад(

Не месяца, а 4+ года.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

45

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
Хм,а установил я его в 6 месяце.
А так большое вам спасибо ,вроде все заработало )

46

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov пишет:

По идее должно работать быстрее чем 25 раз pixelgetcolor (при худшем варианте если искомое находится в последней ячейке).

Если нужна скорость, то думаю, самое быстрое будет получать 25 раз цвет через lockbits.

47

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

C GDI понятно что вариантов много.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

48

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

ImageSearch как-раз через GDIский GetDIBits и работает.

49

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Добавить бы туда параметр поиска нескольких совпадений, и нескольких картинок. Если file массив, то искать каждое со своими параметрами в одном снимке. Думаю такое совсем не сложно было сделать из коробки.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

50

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Можно было бы много чего добавить, например получение конкретных окон, а не как сейчас getdc(0).
Но только вряд ли lexikosa это заинтересует, так как он погряз в ahk2.

51 (изменено: Malcev, 2020-10-28 06:48:30)

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Кстати из gdi/gdi+ самый быстрый вариант получать scan через CreateDIBSection (до 1.5 раз быстрее, чем GetDIBits и до 2 раз, чем gdi+ lockbits).

setbatchlines -1
DllCall("LoadLibrary", "str", "gdiplus")
VarSetCapacity(si, 8+2*A_PtrSize, 0)
NumPut(0x1, si, "uint")
DllCall("gdiplus\GdiplusStartup", "ptr*", pToken, "ptr", &si, "ptr", 0)
hDC := DllCall("GetDC", "ptr", 0, "ptr")
pDC := DllCall("CreateCompatibleDC", "ptr", hDC, "ptr")
VarSetCapacity(bi, 40, 0)
NumPut(40, bi, 0, "int")
NumPut(A_ScreenWidth, bi, 4, "int")
NumPut(A_ScreenHeight, bi, 8, "int")
NumPut(1, bi, 12, "short")
NumPut(bpp:=32, bi, 14, "short")
hBM := DllCall("CreateDIBSection", "ptr", pDC, "ptr", &bi, "int", 0, "ptr*", Scan, "int", 0, "int", 0, "ptr")
Stride:=((A_ScreenWidth*bpp+31)//32)*4
oBM := DllCall("SelectObject", "ptr", pDC, "ptr", hBM, "ptr")

a := a_tickcount
loop 100
   DllCall("BitBlt", "ptr", pDC, "int", 0, "int", 0, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr", hDC, "int", 0, "int", 0, "uint", 0x00CC0020|0x40000000) ; SourceCopy | CaptureBlt
msgbox % a_tickcount - a


hBM := DllCall("CreateCompatibleBitmap", "ptr", hDC, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr")
oBM := DllCall("SelectObject", "ptr", pDC, "ptr", hBM, "ptr")
VarSetCapacity(bi, 40, 0)
NumPut(40, bi, 0, "int")
NumPut(A_ScreenWidth, bi, 4, "int")
NumPut(-A_ScreenHeight, bi, 8, "int")
NumPut(1, bi, 12, "short")
NumPut(bpp:=32, bi, 14, "short")
Stride:=((A_ScreenWidth*bpp+31)//32)*4

a := a_tickcount
loop 100
{
   VarSetCapacity(bits, A_ScreenWidth*A_ScreenHeight*4, 0)
   DllCall("BitBlt", "ptr", pDC, "int", 0, "int", 0, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr", hDC, "int", 0, "int", 0, "uint", 0x00CC0020|0x40000000) ; SourceCopy | CaptureBlt
   DllCall("GetDIBits", "ptr", pDC, "ptr", hBM, "int", 0, "int", A_ScreenHeight, "ptr", &bits, "ptr", &bi, "int", 0)
   Scan := &bits
}
msgbox % a_tickcount - a


hBM := DllCall("CreateCompatibleBitmap", "ptr", hDC, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr")
oBM := DllCall("SelectObject", "ptr", pDC, "ptr", hBM, "ptr")
VarSetCapacity(Rect, 16, 0)
NumPut(A_ScreenWidth, Rect, 8, "uint")
NumPut(A_ScreenHeight, Rect, 12, "uint")

a := a_tickcount
loop 100
{
   DllCall("BitBlt", "ptr", pDC, "int", 0, "int", 0, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr", hDC, "int", 0, "int", 0, "uint", 0x00CC0020|0x40000000) ; SourceCopy | CaptureBlt
   DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "ptr", hBM, "ptr", 0, "ptr*", pBitmap)
   VarSetCapacity(BitmapData, 16+2*A_PtrSize, 0)
   DllCall("gdiplus\GdipBitmapLockBits", "ptr", pBitmap, "ptr", &Rect, "uint", ReadWrite := 3, "int", Format32bppArgb := 2498570, "ptr", &BitmapData)
   Stride := NumGet(BitmapData, 8, "int")
   Scan := NumGet(BitmapData, 16, "ptr")
   DllCall("gdiplus\GdipBitmapUnlockBits", "ptr", pBitmap, "ptr", &BitmapData)
   DllCall("gdiplus\GdipDisposeImage", "ptr", pBitmap)
}
msgbox % a_tickcount - a

52

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

А метод получения снимка может как то влиять на скорость поиска в нём?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

53

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Malcev пишет:

Но только вряд ли lexikosa это заинтересует, так как он погряз в ahk2.

Можно предложить ему туда добавить.
Кстати не в курсе как у него дела со второй версией, стабильный релиз ещё не планируется?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

54

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov пишет:

А метод получения снимка может как то влиять на скорость поиска в нём?

Нет, так это просто участок памяти к которой мы получаем доступ.

setbatchlines -1
DllCall("LoadLibrary", "str", "gdiplus")
VarSetCapacity(si, 8+2*A_PtrSize, 0)
NumPut(0x1, si, "uint")
DllCall("gdiplus\GdiplusStartup", "ptr*", pToken, "ptr", &si, "ptr", 0)
hDC := DllCall("GetDC", "ptr", 0, "ptr")
pDC := DllCall("CreateCompatibleDC", "ptr", hDC, "ptr")
VarSetCapacity(bi, 40, 0)
NumPut(40, bi, 0, "int")
NumPut(A_ScreenWidth, bi, 4, "int")
NumPut(A_ScreenHeight, bi, 8, "int")
NumPut(1, bi, 12, "short")
NumPut(bpp:=32, bi, 14, "short")
hBM := DllCall("CreateDIBSection", "ptr", pDC, "ptr", &bi, "int", 0, "ptr*", Scan, "int", 0, "int", 0, "ptr")
Stride:=((A_ScreenWidth*bpp+31)//32)*4
oBM := DllCall("SelectObject", "ptr", pDC, "ptr", hBM, "ptr")


DllCall("BitBlt", "ptr", pDC, "int", 0, "int", 0, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr", hDC, "int", 0, "int", 0, "uint", 0x00CC0020|0x40000000) ; SourceCopy | CaptureBlt
a := a_tickcount
loop % A_ScreenHeight
{
   A_IndexY := A_Index-1
   loop % A_ScreenWidth
      NumGet(Scan+0, (A_Index-1)*4 + A_IndexY*Stride, "uint")
}
msgbox % a_tickcount - a


hBM := DllCall("CreateCompatibleBitmap", "ptr", hDC, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr")
oBM := DllCall("SelectObject", "ptr", pDC, "ptr", hBM, "ptr")
VarSetCapacity(bi, 40, 0)
NumPut(40, bi, 0, "int")
NumPut(A_ScreenWidth, bi, 4, "int")
NumPut(-A_ScreenHeight, bi, 8, "int")
NumPut(1, bi, 12, "short")
NumPut(bpp:=32, bi, 14, "short")
Stride:=((A_ScreenWidth*bpp+31)//32)*4

VarSetCapacity(bits, A_ScreenWidth*A_ScreenHeight*4, 0)
DllCall("BitBlt", "ptr", pDC, "int", 0, "int", 0, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr", hDC, "int", 0, "int", 0, "uint", 0x00CC0020|0x40000000) ; SourceCopy | CaptureBlt
DllCall("GetDIBits", "ptr", pDC, "ptr", hBM, "int", 0, "int", A_ScreenHeight, "ptr", &bits, "ptr", &bi, "int", 0)
Scan := &bits
a := a_tickcount
loop % A_ScreenHeight
{
   A_IndexY := A_Index-1
   loop % A_ScreenWidth
      NumGet(Scan+0, (A_Index-1)*4 + A_IndexY*Stride, "uint")
}
msgbox % a_tickcount - a


hBM := DllCall("CreateCompatibleBitmap", "ptr", hDC, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr")
oBM := DllCall("SelectObject", "ptr", pDC, "ptr", hBM, "ptr")
VarSetCapacity(Rect, 16, 0)
NumPut(A_ScreenWidth, Rect, 8, "uint")
NumPut(A_ScreenHeight, Rect, 12, "uint")

DllCall("BitBlt", "ptr", pDC, "int", 0, "int", 0, "int", A_ScreenWidth, "int", A_ScreenHeight, "ptr", hDC, "int", 0, "int", 0, "uint", 0x00CC0020|0x40000000) ; SourceCopy | CaptureBlt
DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "ptr", hBM, "ptr", 0, "ptr*", pBitmap)
VarSetCapacity(BitmapData, 16+2*A_PtrSize, 0)
DllCall("gdiplus\GdipBitmapLockBits", "ptr", pBitmap, "ptr", &Rect, "uint", ReadWrite := 3, "int", Format32bppArgb := 2498570, "ptr", &BitmapData)
Stride := NumGet(BitmapData, 8, "int")
Scan := NumGet(BitmapData, 16, "ptr")
a := a_tickcount
loop % A_ScreenHeight
{
   A_IndexY := A_Index-1
   loop % A_ScreenWidth
      NumGet(Scan+0, (A_Index-1)*4 + A_IndexY*Stride, "uint")
}
msgbox % a_tickcount - a
DllCall("gdiplus\GdipBitmapUnlockBits", "ptr", pBitmap, "ptr", &BitmapData)
DllCall("gdiplus\GdipDisposeImage", "ptr", pBitmap)

Можно предложить ему туда добавить.

Попробуй.

serzh82saratov пишет:

Кстати не в курсе как у него дела со второй версией, стабильный релиз ещё не планируется?

Не знаю.

55

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Malcev
А есть вариант сделать так,чтобы искать изображения на экране немного увеличенные или уменьшенные ?

56

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

Да. Через opencv.

57

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

serzh82saratov
я взял этот код ,и он работает ,но иногда он находит вместо трех один или 2 .В чем может быть прикол

58

Re: AHK: Поиск 3-х одинаковых картинок и тык по ним

kdn14062000 пишет:

я взял этот код

Не ясно какой этот, вам тут и картинки приложили, и много кода написали, и разжевали всё, честно говоря не охота будет в будущем вам отвечать на сообщения в стиле - догадайся сам, а то мне для тебя в падло оформить ссылку, и вобще что то толком объяснять, сам всё спросишь чё тебе там надо задрот.

kdn14062000 пишет:

иногда он находит вместо трех один или 2

Скорее всего не хватает variation.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui