UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2, 3
MixidFinder
Здравствуйте, посмотрев пару тем с такой же проблемой, решения так и не нашел. Суть в том, что бы пилот находил цвет пикселя в перекрытом окне, но он его не видит, причем даже если перекрыть это окно совсем немного в том месте, где нужно найти пиксель. Тоесть сама графика в окне спокойно работает, но при этом пилот не видит цвета в том месте, где другое окно перекрыло рабочее. Возможно ли все же решить как то эту проблему?
Вверх
cirus
Скрин нормально сделает с окна?
Скрин окна
Код
--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)

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

Вверх
MixidFinder
Цитата(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
Цитата
Привязываю в ручную к окну через хоткей

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

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


Вверх
MixidFinder
Цитата(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, то там просто черный прямоугольник
А если привязывать хоткеем к окну, то почему то показывает только часть окна
Вверх
DarkMaster
Извиняюсь, запамятовал. Там был какой-то косяк с color. Во времена изменения findcolor поиск через color по хендлу то ли бы поломан, то ли не дофикшен вместе в финдколором. Используйте findcolor (возможно будет необходимо задать точку чуть шире, чем один пиксель).
Вверх
MixidFinder
Цитата(DarkMaster @ 13.11.2020, 20:47)

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


В общем та же ситуация, только теперь в кнопке F видно нормальное обновление картинки по координатам поиска, но все так же если перекрыть окно, в F будет показываться окно, которым перекрываю. Насколько я понял это проблема с Win10 и решается она возможно установкой Aero Glass, но на 2004 обновление винды эта прога не ставится. Так что не знаю, есть ли еще какое решение)
Вверх
cirus
Получить цвет с перекрытого окна
Код
--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))

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

указывайте хэндл в методе поиска
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.