Помощь - Поиск - Пользователи - Календарь
Полная версия: Изменить прозрачность окна
UoKit.com Форумы > Кликер > UO Pilot
cirus
Пример как изменить прозрачность окна. Пилот 2.41. Запускать от админа.
Код
--lua
local ffi = require("ffi")
local user = ffi.load('User32.dll')
ffi.cdef[[
struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
bool SetLayeredWindowAttributes(HWND hwnd, unsigned long crKey, unsigned char bAlpha, unsigned long dwFlags);
long GetWindowLongA(HWND hWnd, int nIndex);
long SetWindowLongA(HWND hWnd, int nIndex, long dwNewLong);
]]
local LWA_ALPHA, GWL_EXSTYLE, WS_EX_LAYERED = 2, -20, 524288
function transparency(hWnd, transp)
    local h = ffi.cast('HWND', hWnd)
    user.SetWindowLongA(h, GWL_EXSTYLE, bit.bor(user.GetWindowLongA(h, GWL_EXSTYLE), WS_EX_LAYERED))
    user.SetLayeredWindowAttributes(h, 0, transp, LWA_ALPHA)
end

-- указать нужное окно Ctrl+A
transparency(workwindow(), 120)  -- передавать хендл окна и уровень прозрачности от 0 до 255
wait (3000)
transparency(workwindow(), 255)

Прозрачность окна не влияет на клики left и нажатия send, также будут работать findimage/findcolor с типом поиска workwindow. Т. е. можно полностью скрыть окно, при этом можно искать картинки, делать клики и прочее.
Fors1k
Цитата(cirus @ 3.4.2020, 0:10) *

Можно полностью скрыть окно, при этом можно искать картинки, делать клики и прочее.

Затестил файндколором - все работает Изображение
Проверил left - тоже работает, но только пилотовский. Left на lua почему-то не работает ни в видимом ни в невидимом окне.

И при прозрачности 0 окно не просто скрывается и становится невидимым, а вообще исчезает, так как можно спокойно кликать в то, что находится под ним - что тоже очень интересно.
FREEON
Мои желания начинает потиху сбываться... Осталось прикрутить к пилоту экранную лупу и возможность нажатия кнопок по их имени класссу rolleyes.gif
cirus
Цитата
Left на lua почему-то не работает

Работает.
Цитата
Осталось прикрутить к пилоту экранную лупу

Это не проблема. Только зачем она в пилоте? В InqSoft Window Scanner есть лупа.
Цитата
возможность нажатия кнопок по их имени класссу

Клик в окно блокнота без привязки
Код
--lua
local ffi = require("ffi")
local user = ffi.load('User32.dll')
ffi.cdef[[
struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
HWND FindWindowA(const char* lpClassName, const char* lpWindowName);
HWND FindWindowExA(HWND hWndParent, HWND hWndChildAfter, const char* lpszClass, const char* lpszWindow);
]]

log "clear" log "mode compact"

local owned = user.FindWindowA("notepad", nil)   -- поиск окна по классу, вместо nil можно указать имя
if owned then
    log ('Хендл главного окна:'    .. tonumber(ffi.cast('int', owned)))
    local child = user.FindWindowExA(owned, nil, "edit", nil)    -- поиск по классу относительно родительского окна
    if child then
        log ('Хендл дочернего окна:'    .. tonumber(ffi.cast('int', child)))
        local handle = tonumber(ffi.cast('int', child))
        left (150, 80, handle)  -- клик в координаты 150 80 (поставит курсор в эти координаты)
    end
end
FREEON
Цитата(cirus @ 3.4.2020, 9:59) *
Это не проблема. Только зачем она в пилоте? В InqSoft Window Scanner есть лупа.

Иметь свой набор инструментов, ключей и отверток целесобразней(без хлопотней, правильней и быть независимым) чем ходить постоянно просить у соседей.
Fors1k
Цитата(cirus @ 3.4.2020, 9:59) *

Работает.

Сейчас заработал.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.