Lo que quieres se hace con
FileInstall().
Funciona de la siguiente manera:
.- En compilación inserta en el EXE el archivo que le dices en el primer parámetro (¡este parámetro no puede ser variable!)
.- En ejecución extrae el archivo donde le dices en el segundo parámetro, entonces usas ese archivo.
Es decir, no lo saca a memoria, tienes que guardarlo en disco (por ejemplo en el temporal) usarlo de ahí, y cuando acabes con él es tu responsabilidad borrarlo.
Por ejemplo puedes tocar un mp3 de dentro del exe si haces:
Código: Seleccionar todo
$pathmp3 = @TempDir & "\musica.mp3"
FileInstall("C:\misprogramas\tocamp3\musica.mp3", $pathmp3)
SoundPlay($pathmp3, 1)
SoundPlay("") ; Cerramos handler
FileDelete($pathmp3) ;¡lo borramos del temporal!
Cosas a tener en cuenta:
El primer parámetro de FileInstall no puede ser variable, aunque puedes usar path relativo, por ejemplo si tienes el mp3 en la misma carpeta que el au3 puedes usar
".\musica.mp3".
En el segundo parámetro (que sí puede ser variable) puedes omitir el nombre (poner sólo la carpeta), de esa manera mantiene el nombre original. Yo en este caso lo uso entero porque uso la misma variable para
SoundPlay y
FileDelete, que requieren el nombre entero. Así que podría haber hecho también:
FileInstall(".\musica.mp3", @TempDir & "\") ;Si pones sólo la carpeta destino, tiene que acabar con la barra
Si no haces el
FileDelete el archivo se quedará en el temporal.
Aunque no uses el exe, por ejemplo si ejecutas el au3 directamente, que obviamente no tiene el mp3 dentro, igual se hace la copia del archivo. Así el código es igual si estás en desarrollo o ya es el EXE distribuido. O sea, aunque uses el au3 también tienes que borrar el archivo del temporal porque también lo copia allí.