Puedes reportar errores, proponer nueva funcionalidad o hacer cualquier otro tipo de comentarios acerca del compilador en el sitio en el foro de AutoHotkey: autohotkey.com/boards/viewtopic.php?f=44&t=48953.
Para descargar únicamente el compilador (archivo binario exe) diríjase a la página de Releases. Allí encontrará la última versión de Ahk2Exe.
Durante el procesado del script, se tienen en cuenta los siguientes factores, ordenados en forma descendente de importancia.
Mejorar el rendimiento
, por más insignificante que éste sea. Este es el objetivo más importante, debido a la lentitud extrema de los lenguajes interpretados como lo es AHK.- Lograr
reducir al máximo el tamaño del código
, quitando espacios y utilizando equivalentes más cortos en expresiones.
- La compilación no garantiza la protección del código fuente.
- La compilación no garantiza mejoras significativas de rendimiento.
- AutoHotkey es un lenguaje interpretado, por lo que realmente no posee un compilador real,
Ahk2Exe
no realiza ningún pasaje de código AHK a código máquina, realmente no compila nada, sino que procesa el script para reducir su tamaño y facilita la adición de recursos en el archivo destino EXE. Al momento de "Compilar" un script, lo que en realidad se esta haciendo, es copiar el archivoBIN
al destino especificado con la extensiónEXE
, y luego se le añade el script como un recurso enRT_RCDATA
.
- Microsoft Windows Vista en adeltante.
- El compilador es únicamente para AutoHotkey_L versión 2.
- La interfaz gráfica de usuario (GUI) no ha sido probada en pantallas con un DPI (PPP) alto (mayor a 96).
- Los archivos
Ahk2Exe.exe
yAhk2Exe64.exe
son totalmente independientes, no requieren de ningún otro archivo para su funcionamiento, aunque para poder compilar los scripts es necesario tener los archivosBIN
en el mismo directorio queAhk2Exe.exe
. - Para poder comprimir el archivo
EXE
resultante, es necesario tenerUPX
y/oMPRESS
en el mismo directorio queAhk2Exe.exe
. Tenga en cuenta que comprimir un script puede aumentar la probabilidad de ser detectado por los antivirus, por lo que no se recomienda. - La versión de 64-bit (
Ahk2Exe64.exe
) no soporta el efecto de agua en el logoAHK
. La funcionalidad es exactamente la misma que en la de 32-bit. - Por lo general, la compilación no mejora el rendimiento de un script.
- En el caso de una falla,
Ahk2Exe
tiene códigos de salida que indican el tipo de error que ocurrió. - La codificación por defecto utilizada es
UTF-8 con BOM
(unicode), esto quiere decir que, si va a compilar un script sinBOM
, el script compilado lo incluirá automáticamente, para asegurarse de que todos los caracteres (ej.á
) se visualizen correctamente. - Para habilitar la detección de errores de sintaxis (analizar el código fuente), debe tener
AutoHotkey.exe
en uno de los directorios listados a continuación, ordenados en orden descendente de prioridad. Además del orden de directorios, también se le da prioridad a la arquitectura deAutoHotkey.exe
dependiendo de la arquitectura del sistema (ej. si el sistema es de 64-Bit, se busca primeroAutoHotkeyU64.exe
).- [directorio_superior_compilador]\AutoHotkey.exe
- [directorio_compilador]\AutoHotkey.exe
- [archivos_de_programa]\AutoHotkey\AutoHotkey.exe
- [HKLM\SOFTWARE\AutoHotkey->InstallDir]
- [HKCU\SOFTWARE\AutoHotkey->InstallDir]
- Compilar Scripts (función principal).
- La configuración se guarda en el registro, en donde se incluye las últimas opciones conocidas al momento de cerrar el compilador y además, almacena una lista con los 10 primeros archivos fuente e iconos en el control.
- Detección de errores y registro de los mismos. Se incluye un control
ListView
dedicado explícitamente a guardar los registros de la compilación, para ayudarle a detectar los errores. - Detectar errores de sintaxis mediante
AutoHotkey.exe
. - Detectar y remover comentarios en bloque y comentarios en línea.
- Detectar y remover espacios innecesarios de cada línea.
- Detectar y optimizar secciones de continuación.
- Detectar y optimizar expresiones y cadenas.
- Soporte para compilar por medio de la línea de comandos + códigos de errores.
- Soporte para cambiar el icono principal.
- Soporte para añadir cualquier tipo de iconos y cursores.
- Soporte variado para añadir recursos en el ejecutable y crear nuevos tipos.
- Soporte para establecer el lenguaje de los recursos añadidos
- Soporte para cambiar la información de la versión.
- Soporte para cambiar el sub-sistema del ejecutable a modo consola.
- Soporte completo para las directivas
#Include
y#IncludeAgain
. Soporte para variables (debe encerrarlas entre%
). - Soporte para inclusión automática de biblioteca (incluir funciones automáticamente sin la declaración explícita de
#Include
). - Soporte parcial para la función
FileInstall
. Evite los parentesis, expresiones (que no sean variables) y escriba la función en una línea completamente dedicada a ella. Soporte para variables. - Soporte para compresión del archivo compilado con
UPX
yMPRESS
.
Aquí se detalla la sintaxis para poder compilar por medio de la línea de comandos. Puede ver los códigos de salida más abajo.
El orden de los parámetros especificados importa, por ejemplo, si especifica primero iconfile.ahk
sin una ruta absoluta, se tendra en cuenta el directorio del compilador si se especifica una ruta parcial en iconfile
; por el contrario, si especifica infile.ahk
antes, se tendra en cuenta el directorio de infile.ahk
. Para indicar el comando puede utilizar /
como se describe a continuación, o -
también es válido.
-
Ahk2Exe.exe [/in] infile.ahk [/out outfile.exe] [/icon iconfile.ico] [/bin binfile.bin] [/upx] [/mpress] [/nocheck] [/quiet]
Parámetro | Descripción | Directorio de trabajo |
---|---|---|
infile.ahk | Archivo fuente AHK (script) que se va a compilar. Este es el único parámetro obligatorio. | Compilador |
[*]outfile.exe | Archivo destino EXE compilado. Si no se especifica, se establece en infile.exe . Si se especifica un directorio se establece en \infile.exe . Si no se especifica la extensión se añade automáticamente .exe ; puede especificar cualquier extensión. Si el archivo ya existe, lo intenta sobreescribir. Si el directorio no existe la compilación falla. Para forzar la creación del directorio destino en caso de que no exista especifique como prefijo * . |
infile.ahk o compilador |
[*]iconfile.ico | Icono principal del archivo compilado. Si no se especifica se mantiene el icono por defecto de AutoHotkey. Si se especificó la directiva @Ahk2Exe-SetMainIcon se utilizará el icono allí especificado. Puede añadir el caracter * como prefijo para ignorar la directiva @Ahk2Exe-SetMainIcon y forzar el uso de este icono. Tenga en cuenta que establecer un icono elimina todos los iconos por defecto de AHK, incluyendo iconos de pausa (pause) y suspensión (suspend). |
infile.ahk o compilador |
[*]binfile.bin | Archivo BIN AutoHotkey. Si no se especifica utiliza el último archivo BIN utilizado. En caso de no haber una configuración válida guardada se establece dependiendo de la arquitectura del compilador Unicode %8*A_PtrSize%-bit . Por ejemplo: Unicode 64-bit (la extensión es opcional). Si se especificó la directiva @Ahk2Exe-Bin se utilizará el archivo BIN allí especificado. Puede añadir el caracter * como prefijo para ignorar la directiva @Ahk2Exe-Bin y forzar el archivo BIN aquí especificado. |
Compilador |
/upx o /mpress | Especifica el método de compresión del archivo EXE resultante. Los archivos upx.exe y mpress.exe deben estar en el directorio junto al compilador. |
Compilador |
/nocheck | Omite la comprobación de sintaxis por medio de AutoHotkey.exe . Si especifica este parámetro, no se incluirá ninguna función automáticamente. |
- |
/quiet o /q | Especifica que deben suprimirse todos los mensajes, diálogos y ventanas durante la compilación. Esta opción es útil si se aprovecha el código de salida, que le permite identificar el error ocurrido, si lo hubo. | - |
El compilador acepta ciertas directivas que le permiten personalizar aún más el script compilado .exe
.
Para asegurarse de que todas las directivas funcionen correctamente, considere utilizar solo espacios (y no tabulaciones).
En ciertas directivas, se permiten comentarios únicamente mediante el uso del caracter ;
y/o los parámetros se saparan por medio de comas, puede añadir un caracter de estos de forma literal utilizando el caracter de escape de AHK ```.
-
-
;@Ahk2Exe-IgnoreBegin
[Lines]
Es posible eliminar secciones de código del script compilado al encerrarlas en las directivas
@Ahk2Exe-IgnoreBegin
y@Ahk2Exe-IgnoreEnd
como si fueran comentarios multilinea en bloque/**/
.Lines
Es la cantidad de líneas a ignorar a partir deIgnoreBegin
. Las líneas en blanco y comentarios no se tienen en cuenta (no cuentan como una línea). Si no se especifica, se ignora todo el código hasta encontrar unIgnoreEnd
. Si se encuentra unIgnoreEnd
antes de terminar el conteo de líneas especificadas, se terminará en ese punto y las líneas restantes de código a excluir se terminarán incluyendo en la compilación.IgnoreBegin32
indica que el código no debe incluirse en la compilación de 32-bit; La directiva de cierre esIgnoreEnd32
.IgnoreBegin64
Indica que el código no debe incluirse en la compilación de 64-bit; La directiva de cierre esIgnoreEnd64
.MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-IgnoreBegin MsgBox "Este mensaje no aparece en el script compilado" ;@Ahk2Exe-IgnoreEnd MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado"
MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-IgnoreBegin32 MsgBox "Este mensaje solo aparecerá en la compilación AHK de 64-Bit" ;@Ahk2Exe-IgnoreEnd32 MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-IgnoreBegin64 MsgBox "Este mensaje solo aparecerá en la compilación AHK de 32-Bit" ;@Ahk2Exe-IgnoreEnd64 MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado"
MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-IgnoreBegin 2 MsgBox "Este mensaje no aparece en el script compilado" ; comentario MsgBox "Este mensaje no aparece en el script compilado" MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado"
-
;@Ahk2Exe-Keep
[Code]
Lo contrario también es posible, es decir, marcar una sección de código para que solo se ejecute en el script compilado. Esta directiva también acepta las variantes
@Ahk2Exe-Keep32
y@Ahk2Exe-Keep64
./*@Ahk2Exe-Keep MsgBox "Este mensaje aparece solo en el script compilado" MsgBox "Este mensaje aparece solo en el script compilado" */ MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-Keep MsgBox "Este mensaje aparece solo en el script compilado" MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado"
-
;@Ahk2Exe-Define
Identifier [Replacement]
Define un identificador (variable) en el valor especificado. Este identificador podrá ser utilizado con otras directivas del compilador que soporten esta característica. Algunas directivas definen automáticamente ciertos identificadores.
Identifier
Es un nombre cualquiera sin espacio que será utilizado como identificador. El nombre no puede ser una cadena vacía. Si bien el identificador puede contener cualquier texto, tenga en cuenta que éste es tratado comoRegEx
en la directivaIf
al evaluar expresiones.Replacement
Es el valor deIdentifier
. Puede ser cualquier cadena, incluyendo espacios. Si no se especifica, se establece en una cadena vacía.Cuando se va a compilar con la versión de 64-Bit se define automáticamente el identificador
_COMPILE64
en1
. -
;@Ahk2Exe-UnDef
Identifier
Elimina un identificador definido anteriormente mediante la directiva
@Ahk2Exe-Define
. Si el identificador especificado no se encuentra definido, se mostrará un error y la compilación será cancelada; Para evitar esto compruebe antes mediante la directiva;@Ahk2Exe-IfDef
si el identificador ya se encuentra definido o no. -
;@Ahk2Exe-If/EndIf/IfDef/IfNDef
Condition
Estas directivas están basadas en Preprocessor directives (C++), permiten incluir o descartar parte del código de un programa si se cumple una determinada condición.
La directiva
;@Ahk2Exe-If
soporta expresiones mediante el uso de la función Eval. Puede consultar el enlace a esa función para ver las limitantes y las características soportadas.Los identificadores en
Condition
son reemplazados por sus correspondientes valores asignados medianteIf
. Tenga en cuenta que a la hora de reemplazar los identificadores por sus correspondientes valores se utilizaRegEx
de la siguiente manera:RegExReplace(Condition, "\bIdentifier\b", Replacement)
.;@Ahk2Exe-define A ;@Ahk2Exe-define B 115 ;@Ahk2Exe-define C 255 MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-ifdef A MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-endif ;@Ahk2Exe-ifndef B MsgBox "Este mensaje no aparece en el script compilado" ;@Ahk2Exe-endif ;@Ahk2Exe-if C > (B + 58) MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado" ;@Ahk2Exe-endif ;@Ahk2Exe-if B = 125 MsgBox "Este mensaje no aparece en el script compilado" ;@Ahk2Exe-endif MsgBox "Este mensaje aparece tanto en el script compilado como en el no compilado"
Nota: Actualmente estas directivas tienen ciertas limitantes, no soporta ifs anidados y el comportamiento puede no ser el deseado.
-
;@Ahk2Exe-Include
Filename
Incluye el contenido del archivo especificado en esta posición exacta del script. Este comando es similar a la directiva de AutoHotkey
#Include
, permite incluir archivos únicamente durante la compilación.Filename
especifica el nombre del archivo a incluir. Si especifica una ruta relativa, utiliza el directorio del script en donde se utilice esta directiva. Expresiones y variables no son soportadas.
-
-
-
;@Ahk2Exe-SetProp
Value
Cambia una propiedad en la información de versión del ejecutable compilado. En la tabla siguiente se describen las propiedades disponibles y su descripción. Puede utilizar las propiedades descritas entre parentesis para evitar utilizar, por ejemplo, la propiedad
Name
, que cambia tanto el nombre del producto como el nombre interno. Si desea un mayor control sobre la información de la versión, considere utilizar las directivas@Ahk2Exe-VerInfo
,@Ahk2Exe-FileVersion
y@Ahk2Exe-ProductVersion
.Prop
Debe reemplazarse por el nombre de la propiedad a cambiar. Puede ser cualquier cadena/texto que no contenga espacios.Value
Es el valor a establecer a la propiedad. Puede ser cualquier cadena/texto con cualquier caracter, incluido espacios. Este valor puede ser una cadena vacía.Propiedad Descripción Name Cambia el nombre del producto ( ProductName
) y el nombre interno (InternalName
).Description Cambia la descripción del archivo ( FileDescription
).Version Cambia la versión del archivo ( FileVersion
) y la versión del producto (ProductVersion
). Si esta propiedad no se modifica, se usa de forma predeterminada la versión de AutoHotkey utilizada para compilar el script. Esto tambien establece la versión binaria en la estructura VS_FIXEDFILEINFO, en este caso si algún valor no es un número entero sin signo se establece en cero, por ejemplo:1.A.5 -> 1.0.5.0
. Para especificar una versión binaria diferente a este valor, utilize las directivas@Ahk2Exe-FileVersion
y@Ahk2Exe-ProductVersion
.Copyright Cambia la información legal de copyright (derechos de autor). OrigFilename Cambia la información del nombre de archivo original ( OriginalFileName
).CompanyName Cambia el nombre de la compañía. Comments Contiene cualquier información adicional que se debe mostrar con fines de diagnóstico. Este valor se establece por defecto con información sobre el compilador. XXX XXX
es cualquier otro nombre que no sea los comunes de arriba. Aquí puede ver los nombres de propiedad más comunes para la información de la versión. Puede especificar cualquier nombre excepto aquellos que interfieran con el nombre de otra directiva. -
;@Ahk2Exe-FileVersion
0.0.0.0
Establece el número de versión binaria del archivo, esto es,
VS_FIXEDFILEINFO.dwFileVersionMS
yVS_FIXEDFILEINFO.dwFileVersionLS
. Este es el número que recupera la función incorporada de AutoHotkeyFileGetVersion
. Este valor se establece automáticamente cuando se establece la propiedadFileVersion
en la directiva@Ahk2Exe-SetProp
.0.0.0.0
Especifica la versión. Debe especificar 4 numeros enteros positivos separados por un punto. Si el valor especificado es inválido se mostrará un error y la compilación será cancelada. -
;@Ahk2Exe-ProductVersion
0.0.0.0
Establece el número de versión binaria del producto con el que se distribuyó este archivo, esto es,
VS_FIXEDFILEINFO.dwProductVersionMS
yVS_FIXEDFILEINFO.dwProductVersionLS
. Este valor se establece automáticamente cuando se establece la propiedadProductVersion
en la directiva@Ahk2Exe-SetProp
. -
;@Ahk2Exe-VerInfo
PropName [, Value] [, LangID] [, Delete?]
Esta directiva es una alternativa a
@Ahk2Exe-SetProp
. Hace modificaciones en la información de la versión, permite añadir, modificar y eliminar propiedades. Esta directiva le será útil si desea eliminar las propiedades por defecto que se añaden a la información de la versión (Comments
,FileVersion
yProductVersion
), además de añadir propiedades cuyo nombre contenga espacios. También puede especificar el identificador de idioma de la propiedad.PropName
El nombre de la propiedad. A diferencia de@Ahk2Exe-SetProp
aquí se admiten espacios. Este parámetro únicamente puede ser omitido (cadena vacía) siDelete
se estableció en el número2
. No puede haber dos o más propiedades con el mismo nombre en el mismo idioma.Value
El valor de la propiedad. Si no se especifica, se establece en una cadena vacía.LangID
Número hexadecimal de 8 dígitos. Los cuatro dígitos más significativos representan el identificador de idioma. Los cuatro dígitos menos significativos representan la página de códigos para la que se formatean los datos. Este es el valor deStringTable.szKey
de la estructuraStringFileInfo
a su vez estructura deVS_VERSIONINFO
. Puede encontrar la descripción en este enlace. El valor por defecto es 040904B0 (1033/1200).Delete
Especifica si desea eliminar una propiedad o si se desea eliminar todas las propiedades. Para eliminar la propiedad especificada debe establecerse en el número1
(en este caso el segundo parámetro se ignora). Para eliminar todas las propiedades debe especificar el número2
(en este caso los dos primeros parámetros se ignoran). Si se va a añadir o modificar una propiedad, debe omitir este parámetro (el valor por defecto es0
).Cuando elimina todas las propiedades en el idioma especificado, se elimina automáticamente el idioma para evitar escribir una estructura
StringTable
vacía. La sintaxis de la información de versión de un archivo es:VS_VERSIONINFO.StringFileInfo.StringTable.String
.VS_VERSIONINFO
es la estructura principal, contiene el tamaño total y la estructura de tamaño fijoVS_FIXEDFILEINFO
con la información binaria del archivo (como la versión).StringTable
contiene el idioma (puede haber varias de estas estructuras).String
contiene una propiedad junto con sus datos/valor (una estructura por propiedad).Vea el siguiente ejemplo que demuestra todas las formas de uso de esta directiva:
; añade una propiedad llamada 'FileDescription' en el idioma '0C0A' (Spanish_Modern_Sort). ;@Ahk2Exe-VerInfo FileDescription, Descripción del archivo en español, 0C0A04B0 ; elimina la propiedad 'Comments' que se añade por defecto en el idioma '0409' (English_United_States). ;@Ahk2Exe-VerInfo Comments,,, 1 ; elimina todas las propiedades en el idioma '0419' (Russian). ; esto elimina automáticamente el idioma '0419' de la lista. ;@Ahk2Exe-VerInfo ,, 041904B0, 2
-
;@Ahk2Exe-SetMainIcon
IcoFile
Establece el icono principal, esta directiva sobreescribe el icono especificado en la interfaz y línea de parámetros del compilador. Si utiliza esta directiva, antes de añadir el icono se eliminan todos los iconos por defecto de AHK, incluyendo los iconos de
Pausa
ySuspensión
, quedando únicamente el icono por defecto especificado. El nombre del grupo enRT_GROUP_ICON
es159
, por lo que debe evitar añadir recursos iconos con este nombre medianteAddResource
. El idioma utilizado para el icono principal es 0x0409 (SUBLANG_ENGLISH_US
). Esta directiva será ignorada si se especificó un asterisco*
al inicio del nombre del archivo ICO en la línea de parámetros. -
;@Ahk2Exe-PostExec
Command [, WorkingDir] [, Options]
Especifica un comando que se ejecutará después de una compilación exitosa. El compilador no espera al nuevo proceso.
Command
el comando que será ejecutado mediante la función incorporada en AHKRun
.WorkingDir
el directorio de trabajo a utilizar. Si el directorio especificado no existe, se establecerá en el directorio del archivo compilado destino. Si se especificó un asterisco enOptions
este parámetro establece el directorio de trabajo del Script, en caso contrario actúa también como el segundo parámetro de la función incorporada en AHKRun
.Options
especifica las opciones de la funciónRun
. Para ejecutar cualquier otro código AHK especifique un asteristo, vea más abajo.Si se detecta la ruta de
AutoHotkey.exe
este comando se ejecutará en un nuevo proceso de AHK (el compilador no espera al comando). El compilador dará prioridad a la versión de 64-Bit o 32-Bit dependiendo la arquitectura del sistema en donde se ejecuta el compilador.Si desea ejecutar otro comando o varios comandos AHK, debe especificar un asterisco
*
en el parámetroOptions
, en cuyo casoCommand
representa cualquier código AHK. Tenga en cuenta que si no se puede encontrar una versión deAutoHotkey.exe
este comando se omitirá y se añadirá la información correspondiente al registro. Al ejecutar un nuevo proceso, puede que se requieran permisos administrativos. Puede separar varios comandos utilizando comas, utilize el caracter de espape para ello.Por ejemplo,
;@Ahk2Exe-PostExec "notepad.exe"
y;@Ahk2Exe-PostExec Run "notepad.exe",,*
son idénticos, ambos ejecutan el Bloc de notas, pero el último requiere deAutoHotkey.exe
ya que utiliza un nuevo proceso.También puede especificar varios comandos utilizando un comentario en bloque como se demuestra a continuación. Tenga en cuenta que esto anula cualquier otro
PostExec
anterior./*@Ahk2Exe-PostExec D: ; "D:" es el directorio de trabajo a utilizar para el nuevo proceso MsgBox "Este mensaje aparecerá despues de una compilación exitosa" MsgBox "El directorio de trabajo es " . A_WorkingDir */
-
;@Ahk2Exe-ConsoleApp
Cambia el subsistema ejecutable al modo consola. Cuando se ejecute el archivo compilado EXE, se abrirá una ventana de consola. Esto modifica el valor de
IMAGE_OPTIONAL_HEADER.Subsystem
aIMAGE_SUBSYSTEM_WINDOWS_CUI
.El uso de esta directiva define automáticamnte el identificador
_CONSOLEAPP
en1
que puede utilizar con la directiva;@Ahk2Exe-ifdef
. Esto es útil si por ejemplo, el Script, además de la línea de parámetros, tiene una interfaz gráfica, entonces puede quitar todo el código (en el archivo script compilado) correspondiente a la interfaz gráfica cuando utiliza esta directiva. -
;@Ahk2Exe-AddResource
[*Type] FileName [, ResourceName] [, LangID]
Agrega un recurso al ejecutable compilado. Si en el tipo o en el nombre especifica un número entero comprendido entre 0 y 65535 inclusive (puede ser un número hexadecimal, en cuyo caso debe tener el prefijo
0x
), se tratará como un número entero, en caso contrario se tratará como una cadena.Puede tratar una coma literal utilizando el caracter de escape de AHK.
Type
(opcional) Es el tipo de recurso (como un entero o una cadena). Ahk2Exe detecta automáticamente ciertos tipos dependiendo de la extensión del archivo especificado. Se puede especificar explícitamente anteponiendo un asterisco a él:*16 FileName, ResourceName
. En caso de que el tipo contenga espacios, debe ponerlo entre comillas:*"type x" FileName
.FileName
Es el nombre del archivo para agregar como recurso en el ejecutable. Si el archivo no existe se mostrará un error. En caso de que el archivo no pueda ser abierto para lectura se omitirá y se añadirá al registro.ResourceName
(opcional) Es el nombre que tendrá el recurso (puede ser una cadena o un número entero). Si se omite, el valor predeterminado es el nombre (sin ruta) del archivo, en mayúsculas (incluye la extensión). Puede especificar un número hexadecimal, en cuyo caso debe tener el prefijo0x
.LangID
(opcional) Es el código de idioma para este recurso. Si no se especifica, utiliza el código de idioma especificado en la directivaUseResourceLang
.Aquí hay una lista de tipos de recursos estándar comunes y las extensiones que los desencadenan de forma predeterminada.
Tipo de recurso Extensiones 2 (RT_BITMAP) .bmp; .dib 4 (RT_MENU) - 5 (RT_DIALOG) - 6 (RT_STRING) - 9 (RT_ACCELERATORS) - 10 (RT_RCDATA) Cualquier otra extensión. Este es el recurso utilizado por la función FileInstall
.11 (RT_MESSAGETABLE) - 12 (RT_GROUP_CURSOR) .cur (cursores) 14 (RT_GROUP_ICON) .ico (iconos) 23 (RT_HTML) .htm; .html; .mht 24 (RT_MANIFEST) .manifest (El nombre por defecto para este tipo de recurso es el número entero 1
)Además de los recursos especificados en la tabla de arriba, el compilador soporta los siguientes tipos de recursos que son detectados automáticamente por la extensión, o que puede especificarse de forma explícita:
*tipo
. Tenga en cuenta que en este caso se distingue entre mayúsculas y minúsculas.Tipo de recurso Descripción .PNG (RT_ICON) Imágenes PNG -
;@Ahk2Exe-RequireAdmin
La aplicación se ejecutará con permisos de administrador. El usuario que inicia la aplicación debe ser un miembro del grupo Administradores. Si el proceso de apertura no se ejecuta con permisos administrativos, el sistema solicitará credenciales.
-
;@Ahk2Exe-UseResourceLang
LangCode
Cambia el lenguaje por defecto de los recursos añadidos por medio de la directiva
@Ahk2Exe-AddResource
. Tenga en cuenta que este valor no se tendrá en cuenta si se especificó el código de idioma en la directivaAddResource
. El código de idioma utilizado por defecto es 0x0409 (SUBLANG_ENGLISH_US
). Esto también afecta al idioma del recurso de información de versión (@Ahk2Exe-SetProp
).LangCode
Es el código de idioma. Tenga en cuenta que los números hexadecimales deben tener un prefijo0x
. Si se especifica un código de idioma inválido/desconocido ocurrirá un error; Se utiliza la función LCIDToLocaleName para comprobar que el código sea válido. -
;@Ahk2Exe-Bin
BinFile
Especifica el archivo BIN a utilizar durante la compilación. Esta directiva será ignorada si se especificó un asterisco
*
al inicio del nombre del archivo BIN en la línea de parámetros. -
;@Ahk2Exe-AddStream
Name, Value [, Mode] [, Encoding]
Añade un stream al archivo destino. Puede entender un stream como archivos que están contenidos en un archivo principal. Se utilizan generalmente para almacenar ciertos datos/atributos en un archivo. Se puede acceder a un stream utilizando, por ejemplo:
C:\nombre_archivo:nombre_stream
. Para eliminar un stream puede utilizar la función de AHK incorporadaFileDelete
.Name
es el nombre del stream, se aplican las mismas reglas que con el nombre de un archivo, por lo que no puede contener los siguientes caracteres:<>:"/\|?*
.Value
representa los datos del stream. Este valor depende del valor especificado en el parámetroMode
. Por defecto este valor representa texto plano. El texto es añadido utilizando la codificación UTF-8 sin BOM.Mode
determina el comportamiento del parámetroValue
. Si no se especifica,Value
representa texto plano. Si especifica 1,Value
es la ruta a un archivo del que leer texto plano. Si especifica 2, es igual a 1 pero el archivo se interpreta como binario (se incluye el archivo completo). El archivo se abre como solo lectura.Encoding
La codificación a usar para los modos 0 (defecto) y 1. Por defecto utiliza la codificación UTF-8-RAW. Pueden ser algunas de las siguientes: UTF-8, UTF-8-RAW, UTF-16 o UTF-16-RAW.Tenga en cuenta que los streams solo son soportados en sistemas de archivos NTFS y ReFS+, este último tiene un tamaño límite de 128K. Si copia el archivo a otro sistema de archivos todos los streams son eliminados (esto también ocurre si sube el archivo a ciertos sitios de almacenamiento en la nube). Puede administrar los streams en un archivo utilizando ADS Manager.
-
Los códigos de salida indican el tipo de error que ocurrió durante la compilación. Esto le será útil cuando compila un script por medio de la línea de comandos.
-
General
Código de salida Constante Descripción 0x00 ERROR_SUCCESS Todas las operaciones se han realizado con éxito 0x01 UNKNOWN_ERROR Error desconocido 0x02 ERROR_NOT_SUPPORTED No soportado 0x03 ERROR_INVALID_PARAMETER Los parámetros pasados son inválidos -
Apertura de archivos y directorios
Código de salida Constante Descripción 0x10 ERROR_SOURCE_NO_SPECIFIED El archivo fuente no se ha especificado 0x11 ERROR_SOURCE_NOT_FOUND El archivo fuente no existe 0x12 ERROR_CANNOT_OPEN_SCRIPT No se ha podido abrir el archivo fuente script (incluyendo includes) para lectura 0x13 ERROR_BIN_FILE_NOT_FOUND El archivo BIN no existe 0x14 ERROR_BIN_FILE_CANNOT_OPEN No se ha podido abrir el archivo BIN para lectura 0x15 ERROR_MAIN_ICON_NOT_FOUND El icono principal no existe 0x16 ERROR_MAIN_ICON_CANNOT_OPEN No se ha podido abrir el icono principal para lectura 0x17 ERROR_INVALID_MAIN_ICON El icono principal es inválido 0x18 ERROR_INCLUDE_FILE_NOT_FOUND El archivo a incluir no existe 0x19 ERROR_INCLUDE_DIR_NOT_FOUND El directorio a incluir no existe 0x20 ERROR_FILEINSTALL_FILE_NOT_FOUND El archivo a incluir especificado en FileInstall no existe 0x21 ERROR_RESOURCE_FILE_NOT_FOUND El archivo de recurso a incluir no existe 0x22 ERROR_DEST_DIR_NOT_FOUND El directorio destino para el archivo destino EXE no existe -
Escritura de archivos y directorios
Código de salida Constante Descripción 0x30 ERROR_CANNOT_COPY_BIN_FILE No se ha podido copiar el archivo BIN al destino 0x31 ERROR_CANNOT_OPEN_EXE_FILE No se ha podido abrir el archivo destino EXE para escritura 0x32 ERROR_CANNOT_CREATE_DEST_DIR No se ha podido crear el directorio destino para archivo destino EXE -
Sintaxis
Código de salida Constante Descripción 0x50 ERROR_INVALID_DIRECTIVE_SYNTAX La sintaxis de la directiva es inválida 0x51 ERROR_UNKNOWN_DIRECTIVE_COMMAND Comando de directiva desconocido 0x52 ERROR_INVALID_FILEINSTALL_SYNTAX La sintaxis de FileInstall es inválida 0x53 ERROR_INVALID_SYNTAX La sintaxis en el código fuente AHK es inválida
- Mejorar el procesado del Script para reducir al máximo el tamaño del archivo compilado y, si es posible, mejorar el rendimiento.
- Mejorar el soporte para incluir recursos.
- Mejorar soporte de la función
FileInstall
. - Implementar más opciones en la interfaz.
- Implementar mas directivas.
- Si te interesa alguna característica o funcionalidad actualmente no soportada, puedes dejar un comentario en el foro en AutoHotkey y veré si la implemento o no. De todas formas, puedes hacer una copia del código fuente y modificarlo tu mismo.
- Descargar el código fuente haciendo clic en
Clone or download
->Download ZIP
. Descomprimir. - Arrastrar el archivo
Ahk2Exe.ahk
sobre el ejecutableAutoHotkey.exe
para iniciar la interfaz gráfica del compilador. - Una vez en la interfaz, buscar y seleccionar el archivo fuente
Ahk2Exe.ahk
. - Especificar el nombre del archivo destino.
- Especificar la arquitectura:
Unicode 32-Bit
oUnicode 64-Bit
. - Clic en el botón
>Compilar<
. Para la comprobación de sintaxis puede ser necesario tener que ejecutar el compilador como Administrador. - Para ejecutar como Administrador, antes de llevar a cabo los pasos anteriores, abrir las propiedades de
AutoHotkey.exe
y marcar la casilla Ejecutar esta programa como administrador en la pestaña Compatibilidad. - El archivo resultante no tiene ninguna dependencia externa. Aunque en la versión de 32-Bit se extrae un archivo dll en la carpeta temporal del sistema para su uso. El compilador es inútil sin el/los archivo(s)
BIN
. - Para quitar la interfaz gráfica y dejar el compilador únicamente funcional mediante el uso por la línea de parámetros, utilizar la directiva
;@Ahk2Exe-ConsoleApp
en el archivoAhk2Exe.ahk
(esta directiva ya se encuentra definida pero como un comentario, debe remover un;
).
-
Chris Mallet - Por el fantástico AutoHotkey.
-
lexikos - Por continuar dando soporte a AutoHotkey, especialmente por la versión 2.
-
fincs - Este compilador esta basado en Ahk2Exe de fincs. Fue de mucha ayuda su clase VersionInfo, gracias a ella este compilador soporta modificación nativa en AHK para la información de la versión.
-
just me - Por sus increibles funciones ImageButton y LinearGradient.
-
tmplinshi - Por su aporte sobre
waterctrl.dll
(enlace). Sitio oficial. [VirusTotal]. -
Toda la comunidad de AutoHotkey.com. AutoHotkey.com/logos por el logo.
-
Visual Studio Community - Para las constantes y comprobaciones de tamaño de ciertas estructuras.
-
Cool Pix Bar - Para la selección de colores RGB.
-
FastStone Capture y ShareX - Exelente capturador de imagenes, de gran ayuda con el LOGO y colores.
-
UPX - Compresor de archivos ejecutables.
-
MPRESS - Empaquetador ejecutable de alto rendimiento.
-
SublimeText - Para la edición de los scripts (IDE).
-
IcoFX - Para la creación del icono
Ahk2Exe.ico
.