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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Поиск цвета в перекрытом окне
MixidFinder
сообщение 13.11.2020, 1:11
Сообщение #1


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Здравствуйте, посмотрев пару тем с такой же проблемой, решения так и не нашел. Суть в том, что бы пилот находил цвет пикселя в перекрытом окне, но он его не видит, причем даже если перекрыть это окно совсем немного в том месте, где нужно найти пиксель. Тоесть сама графика в окне спокойно работает, но при этом пилот не видит цвета в том месте, где другое окно перекрыло рабочее. Возможно ли все же решить как то эту проблему?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 13.11.2020, 3:48
Сообщение #2


**********

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



Скрин нормально сделает с окна?
Скрин окна
Код
--lua
local ffi = require("ffi")
local shell = ffi.load('Shell32.dll')
local C = ffi.C
local GA_ROOTOWNER = 3
local SW_SHOW = 5
ffi.cdef[[
    int GetAncestor(int hwnd, unsigned int gaFlags);
    typedef struct { long left; long top; long right; long bottom;} RECT;
    typedef struct { int cbSize; RECT rcWindow; RECT rcClient; int dwStyle; int dwExStyle;
        int dwWindowStatus; int cxWindowBorders;  int cyWindowBorders; short atomWindowType; short wCreatorVersion;} WINDOWINFO;
    bool GetWindowInfo(int hwnd, WINDOWINFO* pwi);
    int ShellExecuteA(int hwnd, const char* lpOperation, const char* lpFile, const char* lpParameters, const char* lpDirectory, int nShowCmd);
]]
local wi = ffi.new('WINDOWINFO')
C.GetWindowInfo(C.GetAncestor(workwindow(), GA_ROOTOWNER), wi)
local pos_client_x = wi.rcClient.left - wi.rcWindow.left
local pos_client_y = wi.rcClient.top - wi.rcWindow.top
local width_client = wi.rcClient.right - wi.rcClient.left
local height_client = wi.rcClient.bottom - wi.rcClient.top


-- привязка к окну Ctrl+A
local path_to_screen = [[C:\window.bmp]]  -- путь для скрина
printscreen (C.GetAncestor(workwindow(), GA_ROOTOWNER), pos_client_x, pos_client_y, width_client, height_client, path_to_screen)
shell.ShellExecuteA(0, 'open', path_to_screen, '', '', SW_SHOW)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.11.2020, 7:05
Сообщение #3


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



А код ваш можно увидеть? Методом поиска должен быть указан хэндл.
Обычно оно или работает всегда или не работает никогда(для конкретного приложения) =)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 13.11.2020, 15:55
Сообщение #4


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(cirus @ 13.11.2020, 3:48) *

Скрин нормально сделает с окна?


Да, все норм, даже если чем то перекрыть, тоже все отлично

Цитата(DarkMaster @ 13.11.2020, 7:05) *

А код ваш можно увидеть? Методом поиска должен быть указан хэндл.
Обычно оно или работает всегда или не работает никогда(для конкретного приложения) =)


Код собственно простейший

Код
left 447, 911 5 5
if color (272, 456) = 4406046
    left 273, 453 5 5
end_if


Привязываю в ручную к окну через хоткей

Сообщение отредактировал DarkMaster - 13.11.2020, 17:16
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.11.2020, 17:16
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Привязываю в ручную к окну через хоткей

Когда вы хотите дергать с перекрытого окна, то вам нужно в явном виде указать хэндл.
Чтобы выдернуть хэндл текущего рабочего окна можно использовать workwindow
Код

left 447, 911 5 5
if color (272, 456, workwindow) = 4406046
    left 273, 453 5 5
end_if



--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 13.11.2020, 17:36
Сообщение #6


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(DarkMaster @ 13.11.2020, 17:16) *

Когда вы хотите дергать с перекрытого окна, то вам нужно в явном виде указать хэндл.
Чтобы выдернуть хэндл текущего рабочего окна можно использовать workwindow
Код

left 447, 911 5 5
if color (272, 456, workwindow) = 4406046
    left 273, 453 5 5
end_if



Интересно, но почему то при таком раскладе он перестает находить цвет в пикселе вообще. Если смотреть в кнопке F, то там просто черный прямоугольник
А если привязывать хоткеем к окну, то почему то показывает только часть окна
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.11.2020, 20:47
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Извиняюсь, запамятовал. Там был какой-то косяк с color. Во времена изменения findcolor поиск через color по хендлу то ли бы поломан, то ли не дофикшен вместе в финдколором. Используйте findcolor (возможно будет необходимо задать точку чуть шире, чем один пиксель).


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 13.11.2020, 22:47
Сообщение #8


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(DarkMaster @ 13.11.2020, 20:47) *

Извиняюсь, запамятовал. Там был какой-то косяк с color. Во времена изменения findcolor поиск через color по хендлу то ли бы поломан, то ли не дофикшен вместе в финдколором. Используйте findcolor (возможно будет необходимо задать точку чуть шире, чем один пиксель).


В общем та же ситуация, только теперь в кнопке F видно нормальное обновление картинки по координатам поиска, но все так же если перекрыть окно, в F будет показываться окно, которым перекрываю. Насколько я понял это проблема с Win10 и решается она возможно установкой Aero Glass, но на 2004 обновление винды эта прога не ставится. Так что не знаю, есть ли еще какое решение)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 14.11.2020, 1:55
Сообщение #9


**********

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



Получить цвет с перекрытого окна
Код
--lua
local ffi = require("ffi")
local C = ffi.C
ffi.cdef[[  int GetDC(int hWnd);
            int ReleaseDC(int hWnd, int hDC);
            unsigned long GetPixel(int hdc, int x, int y); ]]
function getcolor(x, y, handle)
    local HDC = C.GetDC (handle or 0)
    local color=C.GetPixel(HDC, x, y)
    C.ReleaseDC(handle or 0, HDC)
    return color
end


-- ваш код
local handle = workwindow()

if getcolor(70, 153, handle) == 3866470 then  -- если в координатах 70 153 цвет 3866470  
    log ('Цвет нужный')
    left (70, 153, 5, 5)  -- клик
end

if getcolor(36, 494, handle) == 1513444 then
    log ('+++')
end

log(getcolor(36, 494, handle))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.11.2020, 7:27
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
но все так же если перекрыть окно, в F будет показываться окно, которым перекрываю.

указывайте хэндл в методе поиска


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 14.11.2020, 11:32
Сообщение #11


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(DarkMaster @ 14.11.2020, 7:27) *

указывайте хэндл в методе поиска


left 447, 911 5 5
set #en findcolor (212, 451, 329, 486, 1 1 (5918762) 198706)
if #en > 0
left 250, 468 5 5
end_if

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

Цитата(cirus @ 14.11.2020, 1:55) *

Получить цвет с перекрытого окна
Код
--lua
local ffi = require("ffi")
local C = ffi.C
ffi.cdef[[  int GetDC(int hWnd);
            int ReleaseDC(int hWnd, int hDC);
            unsigned long GetPixel(int hdc, int x, int y); ]]
function getcolor(x, y, handle)
    local HDC = C.GetDC (handle or 0)
    local color=C.GetPixel(HDC, x, y)
    C.ReleaseDC(handle or 0, HDC)
    return color
end
-- ваш код
local handle = workwindow()

if getcolor(70, 153, handle) == 3866470 then  -- если в координатах 70 153 цвет 3866470  
    log ('Цвет нужный')
    left (70, 153, 5, 5)  -- клик
end

if getcolor(36, 494, handle) == 1513444 then
    log ('+++')
end

log(getcolor(36, 494, handle))



В луа вообще не шарю если честно, поменял в вашем коде координаты на свои, единственное что происходит, это выводится какое то число в лог и больше ничего не происходит. Сорри что туплю, но только недавно перешел на пилот
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.11.2020, 12:00
Сообщение #12


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
set #en findcolor (212, 451, 329, 486, 1 1 (5918762) 198706)

Массив где?
Код
// Пример 3
set #c findcolor ( 339 501 341 631 1 1 (207) %close workwindow )    // поиск в рабочем окне (даже в перекрытом)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 14.11.2020, 12:40
Сообщение #13


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(DarkMaster @ 14.11.2020, 12:00) *

Массив где?
Код
// Пример 3
set #c findcolor ( 339 501 341 631 1 1 (207) %close workwindow )    // поиск в рабочем окне (даже в перекрытом)



С массивом привязка к рабочему окну выдает только черный цвет, но если привязать к родительскому окну, то вроде как цвет находит, правда и все координаты смещаются, собственно и возникает вопрос, как все эти координаты подправлять, не каждый же раз выверять все это? И может вопрос глупый, но как искать координаты мыши без привязки к окну?) на вкладке общее вижу сочетание клавиш ctr+A, но в скриптах оно не работает, просто выделяет весь код. А если смотреть координаты с привязкой, то не смогу узнать нормально координаты дочернего окна
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.11.2020, 14:15
Сообщение #14


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



В целом зачастую можно сделать привязку к родительскому и кликать в родительское, но работает не всегда.
Цитата
И может вопрос глупый, но как искать координаты мыши без привязки к окну?)

Особо никак. Рекомендую просто завести переменную в которой будет содержаться смещение и везде прогонять. В рамка луа проще - там можно свою функцию кликов впилить. Можете вприципе через call сделать свою функцию, которая оффсеты будет считать. Но я скорее всего бы не парился и просто делал пару set'ов или через eval подставлял.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 14.11.2020, 14:27
Сообщение #15


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(DarkMaster @ 14.11.2020, 14:15) *

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

Особо никак. Рекомендую просто завести переменную в которой будет содержаться смещение и везде прогонять. В рамка луа проще - там можно свою функцию кликов впилить. Можете вприципе через call сделать свою функцию, которая оффсеты будет считать. Но я скорее всего бы не парился и просто делал пару set'ов или через eval подставлял.



А можно пример, если не сложно?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.11.2020, 15:02
Сообщение #16


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Код
в шапку
set #offset_x 10
set #offset_y 10

где-то далеко в коде
set #a findcolor... %arr ...
set x = %arr[1 1] + #offset_x
set y = %arr[1 2] + #offset_y
left x y

либо
set #a findcolor... %arr ...
left eval(%arr[1 1] + #offset_x) eval(%arr[1 2] + #offset_y)


call не пользовался особо)

Сообщение отредактировал DarkMaster - 14.11.2020, 15:02


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MixidFinder
сообщение 14.11.2020, 15:10
Сообщение #17


*

Registred
Сообщений: 9
Регистрация: 15.9.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 16.321
Возраст: 23



Цитата(DarkMaster @ 14.11.2020, 15:02) *

Код
в шапку
set #offset_x 10
set #offset_y 10

где-то далеко в коде
set #a findcolor... %arr ...
set x = %arr[1 1] + #offset_x
set y = %arr[1 2] + #offset_y
left x y

либо
set #a findcolor... %arr ...
left eval(%arr[1 1] + #offset_x) eval(%arr[1 2] + #offset_y)


call не пользовался особо)


Спасибо большое) и последний вопрос, можно как то координаты мыши смотреть не используя хоткей привязки к окну?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.11.2020, 15:33
Сообщение #18


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



настройки/настройки/mouse/отображать координаты курсора/относительные

Сообщение отредактировал DarkMaster - 14.11.2020, 15:33


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
umba
сообщение 4.1.2021, 12:03
Сообщение #19


*

Registred
Сообщений: 2
Регистрация: 4.1.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 19.846
Возраст: 39



Здравствуйте. Имею похожую ситуацию, как у автора.
Код
set #d findcolor (0, 0 1000, 1000 1 1 (7431259 ) %arr 2)
прекрасно отрабатывает, кнопка "F" показывает содержимое окна, в котором идет поиск. Меняю на
Код
set #d findcolor (0, 0 1000, 1000 1 1 (7431259 ) %arr workwindow)
ничего не ищется, по кнопке "F" черный экран.
По сути, автоматизирую фарм в мобильной игре, которая исполняется в NOX Player. Возможно есть какая-то проблема самого NOX-а.

По рекомендации wiki поставил InqSoft Window Scanner, перебрал все окна NOX, которые он находит, для каждого из них результат разнится (где-то черный экран, где-то белый, где-то какая-то реклама) но всё равно остаётся не успешным.
Аеро тема windows включена.

Помогите пожалуйста разобраться, как мне правильно подцепить пилота к окну.

Полный текст моего незамысловатого скрипта:

Код
//set #handleWin findwindow (umbabarauma)
//set workwindow #handleWin
//set #hdl 132234
//set workwindow #hdl

// PICTURES
set $path "C:\Users\Eduard\Desktop\UoPilot\pic\"
set %picture[1] gas                     // galaxy pirate attack screen
set %picture[2] event_npc_marker        // event npc makrer
set %picture[3] error_relocate          // error marker for npc click
set %picture[4] anti_bot        // error marker for anti_bot window
//set %picture[5] search_screen        // search screen of the radar
set %picture[5] search_screen1        // search screen of the radar

set #d findcolor (0, 0 1000, 1000 1 1 (7431259 ) %arr 2)
if #d > 0                                                    // Если нашли
set logging timenow free fleet is available
left %arr [1 1], %arr[1 2]                            // Клик по месту где нашел свободный флот
wait 500 + random (50)

end_if
log workwindow -------------- #d

//set #a findimage (0, 0 1370, 960 ($path%picture[5].bmp) %crds workwindow 80 1 3)
//if #a > 0
//    set logging timenow search menu found, proceeding
//else
//    set logging timenow search menu not found, raising ERROR FLAG
//    return //find_galaxy_pirate_on_radar
//end_if
//log workwindow -------------- #a



end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 4.1.2021, 13:07
Сообщение #20


**********

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



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

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

 

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