Здравствуйте, посмотрев пару тем с такой же проблемой, решения так и не нашел. Суть в том, что бы пилот находил цвет пикселя в перекрытом окне, но он его не видит, причем даже если перекрыть это окно совсем немного в том месте, где нужно найти пиксель. Тоесть сама графика в окне спокойно работает, но при этом пилот не видит цвета в том месте, где другое окно перекрыло рабочее. Возможно ли все же решить как то эту проблему?
Скрин нормально сделает с окна?
--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)
А код ваш можно увидеть? Методом поиска должен быть указан хэндл.
Обычно оно или работает всегда или не работает никогда(для конкретного приложения) =)
left 447, 911 5 5
if color (272, 456) = 4406046
left 273, 453 5 5
end_if
left 447, 911 5 5
if color (272, 456, workwindow) = 4406046
left 273, 453 5 5
end_if
left 447, 911 5 5
if color (272, 456, workwindow) = 4406046
left 273, 453 5 5
end_if
Извиняюсь, запамятовал. Там был какой-то косяк с color. Во времена изменения findcolor поиск через color по хендлу то ли бы поломан, то ли не дофикшен вместе в финдколором. Используйте findcolor (возможно будет необходимо задать точку чуть шире, чем один пиксель).
--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))
--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))
// Пример 3
set #c findcolor ( 339 501 341 631 1 1 (207) %close workwindow ) // поиск в рабочем окне (даже в перекрытом)
// Пример 3
set #c findcolor ( 339 501 341 631 1 1 (207) %close workwindow ) // поиск в рабочем окне (даже в перекрытом)
В целом зачастую можно сделать привязку к родительскому и кликать в родительское, но работает не всегда.
в шапку
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)
в шапку
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)
настройки/настройки/mouse/отображать координаты курсора/относительные
Здравствуйте. Имею похожую ситуацию, как у автора.
set #d findcolor (0, 0 1000, 1000 1 1 (7431259 ) %arr 2)
set #d findcolor (0, 0 1000, 1000 1 1 (7431259 ) %arr workwindow)
//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
Вместо nox попробуйте LDPlayer.
Здравствуйте, имеется несколько схожая проблема, потому отпишу в этой теме как продолжение. При попытке перенести функционал рабочего скрипта с привязкой к окну браузера со старого компа на новый как-то не выходит нормально привязать пилот к окну браузера. Пользовался схемой привязки:
set #handle findwindow (...)
set workwindow #handle
Дополнение - при логировании хендла окна после попытки привязки выдает 0
Благодарю за помощь - на хроме к сожалению и режим совместимости не помог по каким-то причинам, с другими браузерами сработало
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)