виндовс диалог

fsrxvdd

Активный
Автор темы
260
66
Версия MoonLoader
.026-beta
использую такую функцию:

Lua:
local effil = require('effil')

function ShowMessage(text, title, style)
    local messageboxathread = effil.thread(function(text, title, style)
        local ffi = require('ffi')
        ffi.cdef('int MessageBoxA( void* hWnd, const char* lpText, const char* lpCaption, unsigned int uType); ')
        ffi.C.MessageBoxA(nil, text, title, style and (style + 327680) or 327680)
    end)(text, title, style)

    lua_thread.create(function()
        while true do
            wait(0)
            local status, err = messageboxathread:status()
            if not err and status == 'completed' then
                return
            end
        end
    end)
end

почему то при вызове функции если игра не сфокусирована, то окно выводится на самом заднем плане из всех активных. как сделать так, чтобы оно сразу же показывалось на переднем плане?
 
Решение
Вроде бы никак, надо сначала фокусироваться на нём. Это особенность игры и самой windows. Игра старая, там какая-то залупа с фокусировкой, а на лаунчерах вообще хуй поймёшь что как они сделали с их 100500 патчами.

По итогу самым рабочим и стабильным методом (без крашей) оказалось сначала переразвернуть:
Lua:
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]

local fore = ffi.C.GetForegroundWindow()
if fore ~= hwnd then
    lua_thread.create(function()
        ffi.C.ShowWindow(fore, 6) -- полностью его сворачиваем (если так не делать то при каких-то обстоятельствах не сработает)
        wait(500) -- если не ждать то может крашить
        ffi.C.ShowWindow(hwnd, 3) -- разворачиваем и фокусируемся
    end)
end

P.S. я не уверен...

Tema05

Известный
1,603
526
Вроде бы никак, надо сначала фокусироваться на нём. Это особенность игры и самой windows. Игра старая, там какая-то залупа с фокусировкой, а на лаунчерах вообще хуй поймёшь что как они сделали с их 100500 патчами.

По итогу самым рабочим и стабильным методом (без крашей) оказалось сначала переразвернуть:
Lua:
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]

local fore = ffi.C.GetForegroundWindow()
if fore ~= hwnd then
    lua_thread.create(function()
        ffi.C.ShowWindow(fore, 6) -- полностью его сворачиваем (если так не делать то при каких-то обстоятельствах не сработает)
        wait(500) -- если не ждать то может крашить
        ffi.C.ShowWindow(hwnd, 3) -- разворачиваем и фокусируемся
    end)
end

P.S. я не уверен, что это лучшее решение (думаю костыль) и то что тебе нужно, просто делюсь, мб решает твою задачу и захочешь взять. надеюсь хотя бы натолкнёт на решение
 
Последнее редактирование:
  • Влюблен
Реакции: fsrxvdd