Página 1 de 6

Efecto Aero Glass en AMS by Agotaras123

Publicado: 02 Feb 2011 04:17
por Agotaras123
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

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 02 Feb 2011 20:36
por Thedary
Excelente!!!!!!!!!!!!

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 02 Feb 2011 23:50
por Agotaras123
espero te sea de ayuda.

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 03 Feb 2011 10:35
por Daniel_Lechu
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...

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 03 Feb 2011 15:10
por Pabloko
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

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 03 Feb 2011 15:27
por Daniel_Lechu
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:

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 08 Feb 2011 15:45
por alwalidcom
thanksssssss

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 10 Feb 2011 17:30
por noureddine
funciona excelente amigo

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 18 Feb 2011 02:30
por ams2010
gracias

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 08 Mar 2011 00:54
por ikaro522
gracias por enseñarme mas kosas nuevas en la vida jejejej :yeah:

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 11 Mar 2011 06:23
por bladimir
interesante

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 07 Abr 2011 13:48
por langos69
gracias tio un saludo

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 09 Abr 2011 13:27
por er_mejor
gracias!!

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 10 Abr 2011 04:48
por Jhon24
Probando haber que tal y viendo el rendiemiento de memoria Muchas Gracias!! :) :pc:

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 16 Abr 2011 07:05
por hurt
gracias

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 25 Abr 2011 14:22
por underdead
:s

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 08 May 2011 18:39
por r34k
tz!! excelente! :D

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 08 May 2011 18:45
por r34k
mmm... perdon pero donde pego el script, me podrian ayudar porfabor, gracias

Saludos !!

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 08 May 2011 20:54
por LSVargas
Oh por Dios! está genial! mis respetos! :D

Re: Efecto Aero Glass en AMS by Agotaras123

Publicado: 09 May 2011 01:05
por Agotaras123
ahi esta la apz amigo para que te la descargues y uses.