<?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>http://forum.script-coding.com/viewtopic.php?id=18115</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18115&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Поиск по экрану».]]></description>
		<lastBuildDate>Sun, 25 Feb 2024 21:49:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160403#p160403</link>
			<description><![CDATA[<p><strong>__Михаил__</strong><br />Большое спасибо за помощь в моем обучении. У меня получилось сделать самому, и вот что у меня получилось.<br /></p><div class="codebox"><pre><code>#Persistent

F2:: ; При нажатии на F2 анализирует экран и находит изображения
    AnalyzeScreen()
return

F3:: ; При нажатии на F3 выполняет клики по ранее найденным изображениям
    ClickSavedImages()
return

AnalyzeScreen() {
    ; Создаем или очищаем файл .ini для записи координат
    FileDelete, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
    ; Проходим по всем изображениям от number_1.jpg до number_20.jpg
    Loop, 20 {
        ; Формируем путь к текущему изображению
        currentImagePath := &quot;C:\Users\Влад\Desktop\td\number_&quot; . A_Index . &quot;.jpg&quot;
        ; Ищем изображение на экране
        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %currentImagePath%
        ; Если изображение найдено, записываем его координаты в файл .ini
        if !ErrorLevel {
            ; Добавляем смещение +15 к координатам X и +10 к Y
            FoundX += 15
            FoundY += 10
            Coord := FoundX &quot;,&quot; FoundY
            ; Записываем координаты в файл .ini
            if (A_Index = 1 or A_Index = 20) {
                FileAppend, %Coord%`n, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
            } else {
                FileAppend, %Coord%`n%Coord%`n, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
            }
        }
    }
}
!ErrorLevel
ClickSavedImages() {
    ; Открываем файл .ini для чтения координат
    FileRead, Coord, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
    ; Проходим по строкам файла
    Loop, Parse, Coord, `n
    {
        ; Разделяем строку на координаты
        CoordArray := StrSplit(A_LoopField, &quot;,&quot;)
        ClickX := CoordArray[1]
        ClickY := CoordArray[2]
        ; Кликаем по каждой координате
        if (A_Index = 1 or A_Index = 20){    ;1 и 20 нажатие только 1 раз
             MouseClick, Left, %ClickX%, %ClickY%
        Sleep, 700 ; Пауза между кликами
        }
         else{
        MouseClick, Left, %ClickX%, %ClickY%
        Sleep, 700 ; Пауза между кликами
        ; Если это не последняя координата, кликаем еще раз
        if (A_Index &lt; CoordArray.MaxIndex()) {
            MouseClick, Left, %ClickX%, %ClickY%
            Sleep, 700 ; Пауза между кликами
        }
        }
    }
}
</code></pre></div><br /><p>Ещё я пытаюсь написать код для поиска пикселя с возможностью изменения его цвета и положения. И у меня возник вопрос: если я создам тему по этому вопросу, смогу ли я получить поддержку от вас или кого-то ещё? Я имею в виду именно поддержку в идеях, а не просто коде, так как из простого кода я мало чему научусь и не смогу продвигаться дальше.</p>]]></description>
			<author><![CDATA[null@example.com (ANTONIO)]]></author>
			<pubDate>Sun, 25 Feb 2024 21:49:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160403#p160403</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160402#p160402</link>
			<description><![CDATA[<p><strong>ANTONIO</strong><br />Быстрее сохранять не выйдет если картинки большие, комп слабый, зона поиска - весь экран ещё и *50 точность поиска.<br />Подправил код (1 и 20 клик по одному клику, остальные по 2).<br />Я для поиска использую малые .png картинки ~20 пикселей макс. Сохранение менее чем за секунду.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sun, 25 Feb 2024 18:23:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160402#p160402</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160401#p160401</link>
			<description><![CDATA[<p><strong>__Михаил__</strong><br />Добрый день! Я попробовал и да, оно работает, но при работе есть один минус: оно кликает один раз, а нужно было два раза, начиная со второй точки и до девятнадцатой включительно (на первой и двадцатой точках по одному нажатию). И второе, после нажатия F2 координаты сохраняются в течение примерно 15 секунд. Можно ли это время как-то сократить?</p>]]></description>
			<author><![CDATA[null@example.com (ANTONIO)]]></author>
			<pubDate>Sun, 25 Feb 2024 17:41:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160401#p160401</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160399#p160399</link>
			<description><![CDATA[<p><strong>ANTONIO</strong><br />Проверьте этот код:</p><br /><div class="codebox"><pre><code>SetBatchLines,-1
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
SetDefaultMouseSpeed, 0

Global Path := &quot;C:\Users\Влад\Desktop\td\&quot;	; Путь к папке.
Global Ini := Path &quot;ImageCoordinates.ini&quot;		; Путь +название файл настроек.
Global Coord := 0
Return

F2:: AnalyzeScreen()	; F2 поиск картинок, запись координат +размера картинки.
F3:: ClickSavedImages()	; F3 выполняет клики.

AnalyzeScreen(){
 FileDelete, % Ini
 Coord := &quot;&quot;
 Loop, 20{
  Img := Path &quot;number_&quot; A_Index &quot;.jpg&quot;
  Img_Size(Width, Height, Img)	; Определить размеры.
  ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, % &quot;*50 &quot; Img
  If (ErrorLevel = 0)
   Coord .= FoundX &quot;,&quot; FoundY &quot;,&quot; Width &quot;,&quot; Height &quot;`n&quot;
  Else
   Coord .= &quot;None`n&quot;	; Нет позиции.
 }
 FileAppend, % Coord := RTrim(Coord, &quot;`n&quot;), % Ini	; Запись данных в файл и в переменную.
 MsgBox, 0, Поиск картинок, Координаты сохранены, 1	; Уведомление можно убрать если мешает.
}


ClickSavedImages(){
 If (Coord = 0)		; Если координат нет - прочесть файл.
  FileRead, Coord, % Ini
 Loop, Parse, Coord, `n, `r	; &#039;`r&#039; для игнорирования символа переноса каретки.
 {
  If !(A_LoopField = &quot;None&quot;){	; Данных нет - пропускаем.
   Pos := StrSplit(A_LoopField, &quot;,&quot;)	; Разделить по запятой.
   Click, % Pos.1 + (Pos.3 // 2) &quot; &quot; Pos.2 + (Pos.4 // 2) &quot; &quot; (A_Index &gt; 1 And A_Index &lt; 20 ? 2:1)	; Позиция +смещение +клик (1 или 2 раза учитываем).
   Sleep, 700
  }
 }
}

;[Malcev] 28.12.2012 21:16:25	https://forum.script-coding.com/viewtopic.php?pid=67981#p67981
Img_Size(ByRef Width, ByRef Height, Img){
 Gui, Add, Picture, hwndMyPic, % Img
 ControlGetPos,,, Width, Height,, ahk_id %MyPic%
 Return [Width, Height]
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sun, 25 Feb 2024 14:53:51 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160399#p160399</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160397#p160397</link>
			<description><![CDATA[<p><strong>__Михаил__</strong><br />Я попробовал вчера немного изменить подход. Вместо того, чтобы центрировать изображение, я просто записал данные об отдалении в пикселях и сделал двойной щелчок мышью для инициализации. Однако теперь возникла проблема: при нажатии F3 один раз он нажимает только четыре координаты, а затем останавливается. При повторном нажатии на F3 он уже нажимает до десяти координат, иногда до шестнадцати. Не понимаю, почему сначала не все сразу, а затем почему вообще не до конца считывает.</p><br /><div class="codebox"><pre><code>#Persistent

F2::
    AnalyzeScreen()
return

F3:: 
    ClickSavedImages()
return

AnalyzeScreen() {
   
    FileDelete, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
  
    Loop, 20 {
     
        currentImagePath := &quot;C:\Users\Влад\Desktop\td\number_&quot; . A_Index . &quot;.jpg&quot;
       
        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %currentImagePath%
       
        if !ErrorLevel {
         
            FoundX += 15
            FoundY += 10
            Coord := FoundX &quot;,&quot; FoundY
            ; Если это первая или последняя координата, записываем ее один раз
            if (A_Index = 1 or A_Index = 20) {
                FileAppend, %Coord%`n, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
            } else {
                ; В противном случае записываем координату дважды
                FileAppend, %Coord%`n%Coord%`n, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
            }
        }
    }
}

ClickSavedImages() {

    FileRead, Coord, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
   
    Loop, Parse, Coord, `n
    {
        ; Разделяем строку на координаты
        CoordArray := StrSplit(A_LoopField, &quot;,&quot;)
        ClickX := CoordArray[1]
        ClickY := CoordArray[2]
        ; Кликаем по каждой координате
        MouseClick, Left, %ClickX%, %ClickY%
        Sleep, 700 
    }
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (ANTONIO)]]></author>
			<pubDate>Sun, 25 Feb 2024 13:06:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160397#p160397</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160393#p160393</link>
			<description><![CDATA[<p>Команда &#039;ImageSearch&#039; при нахождении записывает координаты слева-сверху. Если нужен клик в центр картинки - нужно заранее узнать размеры. Для этого открыть картинку, прочесть размеры, записать в переменные. Но лучше записать один раз в скрипт и не париться с этим.<br />Для двойного клика нужно делать проверку итерации в цикле, иначе АХК не сможешь узнать когда ему нужно делать 1 или 2 клика.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Sat, 24 Feb 2024 22:04:49 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160393#p160393</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Поиск по экрану]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=160390#p160390</link>
			<description><![CDATA[<p>Доброго времени суток.<br />Я в ahk не очень силен, даже наверное слаб.Я написал код и подробно расписал его, насколько смог, чтобы он был понятен. Проблема заключается в том, что клик по фото происходит в верхнем левом углу, а не в центре. Также требуется двойной клик, начиная со вторых координат.</p><p>Вот целый код:</p><br /><div class="codebox"><pre><code>#Persistent

F2:: ; При нажатии на F2 анализирует экран и находит изображения
    AnalyzeScreen()
return

F3:: ; При нажатии на F3 выполняет клики по ранее найденным изображениям
    ClickSavedImages()
return

AnalyzeScreen() {
    ; Создаем или очищаем файл .ini для записи координат
    FileDelete, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
    ; Проходим по всем изображениям от number_1.jpg до number_20.jpg
    Loop, 20 {
        ; Формируем путь к текущему изображению
        currentImagePath := &quot;C:\Users\Влад\Desktop\td\number_&quot; . A_Index . &quot;.jpg&quot;
        ; Ищем изображение на экране
        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %currentImagePath%
        ; Если изображение найдено, записываем его координаты в файл .ini
        if !ErrorLevel {
            Coord := FoundX &quot;,&quot; FoundY
            FileAppend, %Coord%`n, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
        }
    }
}

ClickSavedImages() {
    ; Открываем файл .ini для чтения координат
    FileRead, Coord, C:\Users\Влад\Desktop\td\ImageCoordinates.ini
    ; Проходим по строкам файла
    Loop, Parse, Coord, `n
    {
        ; Разделяем строку на координаты
        CoordArray := StrSplit(A_LoopField, &quot;,&quot;)
        ClickX := CoordArray[1]
        ClickY := CoordArray[2]
        MouseClick, Left, %ClickX%, %ClickY%, 2 ; клик левой кнопкой мыши
        Sleep, 1000
    }
}</code></pre></div><p>Идея кода заключается в том, что при анализе экрана он найдет на нем 20 различных фотографий и уже затем запишет их координаты в файл .ini. Затем он будет последовательно кликать на эти координаты на экране.</p>]]></description>
			<author><![CDATA[null@example.com (ANTONIO)]]></author>
			<pubDate>Sat, 24 Feb 2024 18:13:10 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=160390#p160390</guid>
		</item>
	</channel>
</rss>
