Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Findimage перекрытом окне
neves
сообщение 19.12.2021, 18:14
Сообщение #1


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



Привет всем.
Используя этот пример из документации findimage.

Код
--lua
-- поиск нескольких одинаковых изображений
-- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5%
local arr, a = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, 2, 70, 20, 5)  -- поиск картинки, должна быть в папке с пилотом
hint (a)     -- результат поиска, подсказка в правом нижнем углу
if arr then  -- если найдена
    log ("Найдено картинок: " .. #arr)
    for i=1, #arr do
        kleft (arr[i][1], arr[i][2])  -- кликнули на каждой
        wait (1000)  -- пауза 1000 мсек (1 сек)
    end
end


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

https://uopilot.uokit.com/wiki/index.php?ti...Findimage_(Lua)

Простите за плохой русский язык. Я использую переводчик.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 19.12.2021, 23:20
Сообщение #2


****

Apprentice
Сообщений: 283
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 8459
Пользователь №: 19.451
Возраст: 32



Код
--lua
-- поиск нескольких одинаковых изображений
-- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5%
local handle = findwindow('Firefox')
if not handle then
  log('not found window')
end
local arr, a = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, handle[1][1], 70, 20, 5)  -- поиск картинки, должна быть в папке с пилотом
hint (a)     -- результат поиска, подсказка в правом нижнем углу
if arr then  -- если найдена
  log ("Найдено картинок: " .. #arr)
  for i=1, #arr do
    kleft (arr[i][1], arr[i][2])  -- кликнули на каждой
    wait (1000)  -- пауза 1000 мсек (1 сек)
  end
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 20.12.2021, 0:11
Сообщение #3


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



Цитата(Madeus @ 19.12.2021, 22:20) *

Код
--lua
-- поиск нескольких одинаковых изображений
-- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5%
local handle = findwindow('Firefox')
if not handle then
  log('not found window')
end
local arr, a = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, handle[1][1], 70, 20, 5)  -- поиск картинки, должна быть в папке с пилотом
hint (a)     -- результат поиска, подсказка в правом нижнем углу
if arr then  -- если найдена
  log ("Найдено картинок: " .. #arr)
  for i=1, #arr do
    kleft (arr[i][1], arr[i][2])  -- кликнули на каждой
    wait (1000)  -- пауза 1000 мсек (1 сек)
  end
end


Спасибо, но это не работает при поиске изображений в определенном регионе. Например, у меня есть 17 изображений, расположенных в (437, 588, 652, 729), а ваш пример находит только 11.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.12.2021, 0:33
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
437, 588, 652, 729

Нужно прибавить к координатам высоту заголовка окна и толщину рамки окна.
Код
--lua
local ffi = require("ffi")
local GA_ROOTOWNER = 3
ffi.cdef[[
typedef unsigned int  UINT;
typedef unsigned long DWORD;
typedef struct {long left; long top; long right; long bottom;} RECT;
typedef struct {DWORD cbSize; RECT rcWindow; RECT rcClient; DWORD dwStyle; DWORD dwExStyle; DWORD dwWindowStatus;
                UINT cxWindowBorders; UINT cyWindowBorders; short atomWindowType; short wCreatorVersion;
               } WINDOWINFO, *PWINDOWINFO;
int GetWindowInfo(int hWnd, PWINDOWINFO pwi);
int GetAncestor(int hwnd, UINT gaFlags);
]]

log "clear" log "mode compact"
local wi = ffi.new('WINDOWINFO', ffi.sizeof('WINDOWINFO'))
local result = ffi.C.GetWindowInfo(ffi.C.GetAncestor(workwindow(), GA_ROOTOWNER), wi)
local width = wi.rcClient.left - wi.rcWindow.left
local height = wi.rcClient.top - wi.rcWindow.top

log(width, height)
log(437+width, 588+height, 652+width, 729+height)


-- local arr, a = findimage (437+width, 588+height, 652+width, 729+height, .....
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
neves
сообщение 20.12.2021, 19:06
Сообщение #5


***

Novice
Сообщений: 64
Регистрация: 4.10.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.419
Возраст: 19



Цитата(cirus @ 19.12.2021, 23:33) *

Нужно прибавить к координатам высоту заголовка окна и толщину рамки окна.
Код
--lua
local ffi = require("ffi")
local GA_ROOTOWNER = 3
ffi.cdef[[
typedef unsigned int  UINT;
typedef unsigned long DWORD;
typedef struct {long left; long top; long right; long bottom;} RECT;
typedef struct {DWORD cbSize; RECT rcWindow; RECT rcClient; DWORD dwStyle; DWORD dwExStyle; DWORD dwWindowStatus;
                UINT cxWindowBorders; UINT cyWindowBorders; short atomWindowType; short wCreatorVersion;
               } WINDOWINFO, *PWINDOWINFO;
int GetWindowInfo(int hWnd, PWINDOWINFO pwi);
int GetAncestor(int hwnd, UINT gaFlags);
]]

log "clear" log "mode compact"
local wi = ffi.new('WINDOWINFO', ffi.sizeof('WINDOWINFO'))
local result = ffi.C.GetWindowInfo(ffi.C.GetAncestor(workwindow(), GA_ROOTOWNER), wi)
local width = wi.rcClient.left - wi.rcWindow.left
local height = wi.rcClient.top - wi.rcWindow.top

log(width, height)
log(437+width, 588+height, 652+width, 729+height)
-- local arr, a = findimage (437+width, 588+height, 652+width, 729+height, .....



Спасибо!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 22:36
Designed by Nickostyle