Está en la página 1de 11

-

TUTORIAL

Crear aplicacin porttil con AutoIt v3

Una aplicacin porttil es una aplicacin informtica que puede ser utilizada en cualquier ordenador que posea el sistema operativo para el que fue programada; esto significa que no es necesaria la instalacin de bibliotecas adicionales en el sistema para su funcionamiento. Otra de las caractersticas de una aplicacin porttil es que no debe de alterar archivos, carpetas o asta el mismo registro de Windows, si sucediera esto se tendra que crear una aplicacin que elimine estas alteraciones.

http://xportables.forospanish.com/

Herramientas necesarias: AutoIt v3 Editor de imgenes (opcional) Universal Extractor 1.5 RegShot 1.8.2 (Estas ultimas 2 herramientas estn incluidas en el archivo .rar) Nota: AutoIt debe estar instalado en tu equipo.

1.- Para comenzar a crear una aplicacin porttil necesitamos elegir el programa, en este caso elegir a 7-Zip.

2.- Como el programa esta comprimido en un archivo ejecutable (.exe) necesitaremos una herramienta llamada Universal Extractor para descomprimirlo (esta viene incluida en el archivo .rar).

3.- En esta ventana presionamos el primer botn de buscar () y despus de seleccionar el ejecutable daremos click en OK

4.- Los archivos del programa se extraern en una carpeta con el mismo nombre del ejecutable.

5.- Nos dirigimos a la carpeta 7z457 y eliminamos las carpeta $PLUGINSDIR y los archivos [NSIS].nsi, copying.txt, License.txt, History.txt y readme.txt asta que nos queden solo 10 archivos y una carpeta.

6.- Ahora probaremos que el programa no modifique carpetas, archivos o el registro de Windows, para ello usaremos la herramienta RegShot.

7.- Dando click en el botn 1er. Foto y Men Foto tomaremos el primer Shot para despus compararlo.

8.- Cuando ya se all tomado la primer foto ahora podremos correr el programa 7zip para comprobar que rastros deja.

9.- Despus de correr y cerrar a 7zip podremos tomar la segunda foto dando click en 2da. Foto y al terminar de tomar la segunda daremos click en Comparar.

10.- Despus de que termine de comparar nos mostrara en el bloc de notas los resultados.

11.- Aqu lo que nos interesa son las claves aadidas y archivos o carpetas aadidas, como se puede ver en la imagen se agrego una clave en: HKEY_CURRENT_USER\Software\7-ZIP Esta clave la guardaremos para despus utilizarla en AutoIt, ahora click en limpiar y despus podremos cerrar RegShot. NOTA: Las claves que comienzan con HKU significan HKEY_CURRENT_USER Las HKLM significan HKEY_LOCAL_MACHINE En carpeta C:\WINDOWS\Prefetch se guarda un archivo .pf de cada programa que se ejecuta, as que puede que 7zip guarde un archivo o barios por lo que si desean eliminarlo o no ser su decisin.

12.- En la ventana 7z457 crearemos un nuevo archivo AutoIt, para ello daremos click derecho en la parte en blanco de la venta y despus seleccionamos Nuevo > AutoIt v3 Script

13.- Ahora editaremos el Script.

14.- Agregamos el siguiente contenido que ser la base de nuestro Script.

#NoTrayIcon #include <GUIConstants.au3> Dim $Version, $Title, $Folder, $Exe, $Windows, $Text ;Declaro variables ;Si la ventana existe entonces salir $Version = "XPortable" If WinExists($Version) Then Exit AutoItWinSetTitle($Version) ;Titulo de la ventana del ejecutable autoit $Title = "Portable " ;Carpeta de extraccin $Folder = @AppDataDir & "\" ;Nombre del ejecutable $Exe = ".exe" ;funcin animar ventana Global Const $AW_FADE_IN = 0x00080000 Global Const $AW_FADE_OUT = 0x00090000 Func _WinAnimate($v_gui, $i_mode, $i_duration = 1000) If @OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000" Or @OSVersion = "WIN_VISTA" Or @OSVersion = "WIN_2003" Then DllCall("user32.dll", "int", "AnimateWindow", "hwnd", WinGetHandle($v_gui), "int", $i_duration, "long", $i_mode) Local $ai_gle = DllCall('kernel32.dll', 'int', 'GetLastError') If $ai_gle[0] <> 0 Then SetError(1) Return 0 EndIf Return 1 EndIf EndFunc ;Minimizar todas las ventanas WinMinimizeAll() ;crea la carpeta de extraccin del portable DirCreate($Folder) ;animar ventana FileInstall("splash.jpg", $Folder & "\splash.jpg", 1) $hwnd = GUICreate($Title, 418, 251, -1, -1, $WS_POPUPWINDOW) GUICtrlCreatePic($Folder & "\splash.jpg", 0, 0, 418, 251) _WinAnimate($hwnd, $AW_FADE_IN) ConsoleWrite('er: ' & @error & @LF & 'ex: ' & @extended & @CRLF) ;Ventana de splash simepre en frente WinSetOnTop($Title, "", 1) Sleep(500) ;extrae los archivos del portable a la carpeta FileInstall(".exe", $Folder & "\" & $Exe, 1)

;Correr y esperar a que cierre el programa Run($Folder & "\" & $Exe) GUIDelete() ProcessWaitClose($Exe) ;Elimina la carpeta creada anteriormente DirRemove($Folder,1) ;Eliminar entradas del registro RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache", @ScriptFullPath) RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache", $Folder & "\" & $Exe) Exit

15.- Modificamos las siguientes variables:


$Version = "XPortable" $Title = "Portable " $Folder = @AppDataDir & "\" $Exe = ".exe"

$Version es el titulo de la ventana de AutoIt $Title ser el titulo de la ventana del Splash (Imagen). $Folder ser la carpeta de extraccin de los archivos $Exe el nombre del ejecutable de 7zip Quedara de esta forma:
$Version = "XPortable7zip" $Title = "Portable 7zip" $Folder = @AppDataDir & "\7zip" $Exe = "7zFM.exe"

16.- En la parte de:


;extrae los archivos del portable a la carpeta FileInstall(".exe", $Folder & "\" & $Exe, 1)

Modificamos en .exe para que se muestre as:


;extrae los archivos del portable a la carpeta FileInstall("7zFM.exe", $Folder & "\" & $Exe, 1)

Como tenemos una carpeta de lenguajes llamada Lang la creamos as:


DirCreate($Folder & \Lang)

17.- Ahora para integrar archivos al ejecutable de AutoIt se utiliza FileInstall(), por ejemplo integraremos los archivos faltantes de 7zip en el cdigo y tambin agregaramos solo los lenguajes por defecto y el espaol:
FileInstall("Lang\en.ttt", $Folder & "\Lang\en.ttt", 1) FileInstall("Lang\es.txt", $Folder & "\Lang\es.txt", 1) FileInstall("7z.exe", $Folder & "\7z.exe", 1) FileInstall("7z.dll", $Folder & "\7z.dll", 1) FileInstall("7z.sfx", $Folder & "\7z.sfx", 1) FileInstall("7zCon.sfx", $Folder & "\7zCon.sfx", 1) FileInstall("7zG.exe", $Folder & "\7zG.exe", 1) FileInstall("7-zip.chm", $Folder & "\7-zip.chm", 1) FileInstall("7zip_pad.xml", $Folder & "\7zip_pad.xml", 1) FileInstall("descript.ion", $Folder & "\descript.ion", 1)

Como se integrara solo 2 leguajes, dejaremos por defecto el espaol de esta forma:
RegWrite("HKEY_CURRENT_USER\Software\7-ZIP", "Lang", "REG_SZ", "es")

18.- Agregamos lo que eliminara las modificaciones que el programa 7zip agrego en el sistema para no daarlo o alentarlo, que seria solo una clave de registro, este lo colocaremos antes de Exit:
RegDelete("HKEY_CURRENT_USER\Software\7-ZIP")

Y as quedara nuestro cdigo completado:

#NoTrayIcon #include <GUIConstants.au3> Dim $Version, $Title, $Folder, $Exe, $Windows, $Text ;Declaro variables ;Si la ventana existe entonces salir $Version = "XPortable 7zip" If WinExists($Version) Then Exit AutoItWinSetTitle($Version) ;Titulo de la ventana del ejecutable autoit $Title = "Portable 7zip" ;Carpeta de extraccin $Folder = @AppDataDir & "\7zip" ;Nombre del ejecutable $Exe = " 7zFM.exe" ;funcin animar ventana Global Const $AW_FADE_IN = 0x00080000 Global Const $AW_FADE_OUT = 0x00090000 Func _WinAnimate($v_gui, $i_mode, $i_duration = 1000) If @OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000" Or @OSVersion = "WIN_VISTA" Or @OSVersion = "WIN_2003" Then DllCall("user32.dll", "int", "AnimateWindow", "hwnd", WinGetHandle($v_gui), "int", $i_duration, "long", $i_mode) Local $ai_gle = DllCall('kernel32.dll', 'int', 'GetLastError') If $ai_gle[0] <> 0 Then SetError(1) Return 0 EndIf Return 1 EndIf EndFunc ;Minimizar todas las ventanas WinMinimizeAll() ;crea la carpeta de extraccin del portable DirCreate($Folder & "\Lang") ;animar ventana FileInstall("splash.jpg", $Folder & "\splash.jpg", 1) $hwnd = GUICreate($Title, 418, 251, -1, -1, $WS_POPUPWINDOW) GUICtrlCreatePic($Folder & "\splash.jpg", 0, 0, 418, 251) _WinAnimate($hwnd, $AW_FADE_IN) ConsoleWrite('er: ' & @error & @LF & 'ex: ' & @extended & @CRLF) ;Ventana de splash simepre en frente WinSetOnTop($Title, "", 1) Sleep(500) RegWrite("HKEY_CURRENT_USER\Software\7-ZIP", "Lang", "REG_SZ", "es") ;extrae los archivos del portable a la carpeta FileInstall("7zFM.exe", $Folder & "\" & $Exe, 1) FileInstall("Lang\en.ttt", $Folder & "\Lang\en.ttt", 1) FileInstall("Lang\es.txt", $Folder & "\Lang\es.txt", 1) FileInstall("7z.exe", $Folder & "\7z.exe", 1) FileInstall("7z.dll", $Folder & "\7z.dll", 1) FileInstall("7z.sfx", $Folder & "\7z.sfx", 1) FileInstall("7zCon.sfx", $Folder & "\7zCon.sfx", 1) FileInstall("7zG.exe", $Folder & "\7zG.exe", 1) FileInstall("7-zip.chm", $Folder & "\7-zip.chm", 1) FileInstall("7zip_pad.xml", $Folder & "\7zip_pad.xml", 1) FileInstall("descript.ion", $Folder & "\descript.ion", 1) ;Correr y esperar a que cierre el programa Run($Folder & "\" & $Exe) GUIDelete() ProcessWaitClose($Exe) ;Elimina la carpeta creada anteriormente DirRemove($Folder,1) ;Eliminar entradas del registro RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache", @ScriptFullPath) RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache", $Folder & "\" & $Exe) RegDelete("HKEY_CURRENT_USER\Software\7-ZIP") Exit

19.- Crearemos una imagen .jpg de 418 x 251 pxeles y la colocamos en la carpeta que se esta trabajando con 7zip. Ejemplo:

20.- Por ultimo compilamos nuestro Script con la herramienta Compile Script to .exe:

O con AutoIt3Wrapper GUI los 2 se instalan con AutoIt y SciTe

Lo subimos y compartimos nuestra creacin.

NOTA: Para entender ms acerca de las funciones de AutoIt Recomiendo leer el manual de ayuda en espaol que se encuentra en www.autoitscript.com o Visitar www.autoit.es.

Dudas y sugerencias a: http://xportables.forospanish.com/