Efecto Aero Glass en AMS by Agotaras123

Ejemplos y plantillas para Autoplay Media Studio.
Efecto Aero Glass en AMS by Agotaras123
Imagen

Bueno este es el efecto Aero Glass que tanto nos gusta a muchos y pues aquí les traigo una APZ con este efecto, para lograr el funcionamiento de este efecto se requiere del plugin Memory de lo contrario no les funcionara.

Sin mas que decir aquí les dejo la APZ que la disfruten.

SCRIPT
function SetLayeredWindowAttributes(hwnd, Color)    
    local ret = tonumber(DLL.CallFunction("user32.dll", "GetWindowLongA",  hwnd..", -20", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL)) + 524288
    result = DLL.CallFunction("user32.dll", "SetWindowLongA", hwnd..", -20, "..ret, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
    DLL.CallFunction("user32.dll", "SetLayeredWindowAttributes",  hwnd..", "..Color..", 0, 1", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
end
SetLayeredWindowAttributes(Application.GetWndHandle(), Math.HexColorToNumber("000000"))

function ExtendFrameIntoClientArea(nWndHnd, nLeft, nRight, nTop, nBottom)
    local sOSName = System.GetOSName();
    local nReturn = 0; -- Devuelve 0 si DWM Composición está deshabilitado, uno de la función devuelve un error, o el mal sistema operativo se está ejecutando para este.
    local sError  = "";
    if(sOSName=="Windows Vista")or(sOSName=="Windows 7")then
        Memory.OpenLibrary(1, "dwmapi.dll")
        local lpdwEnabled = Memory.Allocate(4);
        if(lpdwEnabled>0)then
            local F_DWM_ICE = Memory.OpenFunction(1, "DwmIsCompositionEnabled", DLL_CALL_STDCALL, DLL_RETURN_VOID);
            local s_ice = Memory.CallFunction(F_DWM_ICE,lpdwEnabled);
            if(Memory.GetInt(lpdwEnabled)>0)then
                lptrMARGIN = Memory.CreateStructure("int,int,int,int");
                if(lptrMARGIN>0)then
                    Memory.SetStructureData(lptrMARGIN, 1, 0, nLeft, "");
                    Memory.SetStructureData(lptrMARGIN, 2, 0, nRight, "");
                    Memory.SetStructureData(lptrMARGIN, 3, 0, nTop, "");
                    Memory.SetStructureData(lptrMARGIN, 4, 0, nBottom, "");
                    local F_DWM_EFICA = Memory.OpenFunction(1, "DwmExtendFrameIntoClientArea", DLL_CALL_STDCALL, DLL_RETURN_VOID);
                    if(Memory.CallFunction(F_DWM_EFICA, nWndHnd, lptrMARGIN)==0)then -- Devuelve S_OK (0)
                        nReturn = 1;
                        sError = "OK";
                    else
                        sError = "DwmExtendFrameIntoClientAre devolvió un código de error!"; 
                    end
                    Memory.Free(lptrMARGIN); -- .
                else
                    sError = "No se pudo asignar margen de la estructura!";
                end
            else
                sError = "Dwm Composición no está habilitada!";
            end
            Memory.Free(lpdwEnabled); -- Liberar a los 4 bytes de igual manera.
        else
            sError = "Could not allocate memory for lpdwEnabled";
        end
        Memory.CloseLibrary(1);
    end
    
    return nReturn,sError;
end

ExtendFrameIntoClientArea(Application.GetWndHandle(), 0, 0, 0, -1)
Estos números: 000000, equivalen al color negro, lo pueden cambiar por otro colo si ustedes quieren.

ImagenAPZ
HIDE: ON
Hidebb Message Hidden Description
Excelente!!!!!!!!!!!!
espero te sea de ayuda.
Tengo una duda existencial, esto hace transparente el fondo solo??? es que hace un tiempo probé uno que lo hacía pero no solo con el fondo, si no con todo lo que hubiera por medio...

EDIT: Le he estado probando y lo que hace es que la ventana sea invisible :lol:, vamos que pinchas y si hay algo detrás lo selecciona (en XP por lo menos) y todo lo que pongas que tenga negro lo hace invisible también...
Bueno esto yo lo hice hace ya tiempo, debes jugar con el chroma key, que es un color para la transparencia y por defecto viene en negro. El problema de perder el foco de la ventana lo logre solucionar haciendo un color igual en R G y B es decir por ejemplo RGB(20,20,20) De esa forma parece no perder el foco.

Al igual que digo esto, tambien debo señalar que he probado muchisimo de esto, de hecho yo escribi el primer codigo que funciono para usar aero con el memory, y desde aquello he cpgido experiencia. Hay un problema importante con el consumo de memoria por parte del DWM.EXE no entiendo bien porque pero carga ingentes cantidades de memoria con este metodo, no es nada recomendado para pcs lentos y hay algun tipo de problema con el framework de ams que lo hace trabajar de otra manera que el resto de ventanas, supongo que sera algun mensaje de windows que se ha sacado de la cadena para ser usado por otra parte, y no deja al sistema operativo terminar el procesamiento del mensaje, supongo que tendra que ver con WM_PAINT o WM_ERASEBKGND porque tambien hay problemas de flickering y muchas otras movidas.

Mi experiencia con aero siempre me acaba obligando a hacer un exe contenedor en C# o vb.net con aero nativo y un loader para el programa ams para que se cree como una ventana hija en la posicion que le defina

Por mi experiencia, trabajar con aero y ams es mas complejo de lo que parece y muy poco util, ya que para conseguir una implementacion de verdad necesitamos hacer un custom drawing de TODOS los objetos, una forma de subclassing.

Yo empeze con un plugin y lo deje parado por el tema del consumo de memoria, de que vale currarmelo todo si luego voy a tener problemas de rendimiento graves... y no tengo posibilidad de modificar el framework de ams para que deje que windows termine de procesar la cadena de los eventos...

No quiero parecer pesimista ni nada, pero creo que ams no es nada amigable con esta movida, y recomiendo a todo el que quiera usarlo que empiece a ver vb.net o delphi

salu2
Esto se escapa de mi nivel de programación (-5 :focus: ) por lo que para que aprenda yo algún sistema de programación distinto creo que llevaría mucho tiempo para mi :lol:
thanksssssss
funciona excelente amigo
gracias
gracias por enseñarme mas kosas nuevas en la vida jejejej :yeah:
interesante
gracias tio un saludo
gracias!!
Probando haber que tal y viendo el rendiemiento de memoria Muchas Gracias!! :) :pc:
gracias
:s
tz!! excelente! :D
mmm... perdon pero donde pego el script, me podrian ayudar porfabor, gracias

Saludos !!
Oh por Dios! está genial! mis respetos! :D
ahi esta la apz amigo para que te la descargues y uses.