Creador: Texic
Versión de Gm utilizada: :GM8:
Descripción: Este script sirve para crear una asociación entre un tipo de archivo y un archivo ejecutable. Puede hacerlo de dos maneras, por medio de los scripts en gml (silencioso), y si no funciona (por ejemplo en windows 7 o similares) pasa al modo no silencioso, creando y ejecutando un archivo de registro .reg
Script:
//argument0: Extensión a asociar (string) Ej: ".svk"
//argument1: Ruta del archivo con que abrirlo (string) Ej: "C:\Mijuego\Juego.exe"
//argument2: Ruta del ícono asociado (string) Ej: "C:\Mijuego\Icono.ico" (Opcional)
//argument3: Tipo de archivo (string) Ej: "Archivo Guardado"
b=registry_set_root(2)
if registry_exists("\"+argument0) {exit}
b+=registry_write_string_ext("\"+argument0,"",string_copy(argument0,2,3)+"file")
b+=registry_write_string_ext('\'+string_copy(argument0,2,3)+"file","",argument3)
b+=registry_write_string_ext('\'+string_copy(argument0,2,3)+"file"+'\shell\open\command',"",argument1+' %1')
if variable_local_exists(argument2) {b+=registry_write_string_ext("\"+string_copy(argument0,2,3)+"\DefaultIcon","",argument2)}
if b=0{
argument1=string_replace_all(string_replace_all(argument1,"\","|"),"|","\\")
argument2=string_replace_all(string_replace_all(argument2,"\","|"),"|","\\")
str='Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\'+argument0+']
@="'+string_copy(argument0,2,3)+"file"+'"
[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+']
@="'+argument3+'"
[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+"file"+'\DefaultIcon]
@="'+argument2+'"
[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+'\shell]
[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+'\shell\open]
[HKEY_CLASSES_ROOT\'+string_copy(argument0,2,3)+'file'+'\shell\open\command]
@="'+argument1+' %1"
'
a=file_text_open_write(working_directory+"\reg.reg")
file_text_write_string(a,str)
file_text_close(a)
execute_shell(working_directory+"\reg.reg",0)
}
str='@echo off
taskkill /IM explorer.exe /F
CD /d %userprofile%\AppData\Local
DEL IconCache.db /a
explorer.exe
exit'
a=file_text_open_write(temp_directory+"\act.bat")
file_text_write_string(a,str)
file_text_close(a)
while(1)
{
screen_redraw()
screen_refresh()
if registry_exists_ext("\"+argument0,"") {execute_shell(temp_directory+"\act.bat",0) break}
}
Soporte para íconos personalizados agregado, y ejemplo sobre cómo usar los parameter string y count para reconocer los archivos asociados abiertos. Usenlo con sabiduría! ;P
Ejemplo Adjunto
PD: Para que el ícono y el nombre de la extensión sean visibles se corre un comando .bat, si lo desean pueden pasar esos comandos de manera silenciosa con silentdos, que se encuentra en gmtoolbox.com (http://gmtoolbox.com). Lo dejo a su elección, de otra manera se muestra en pantalla
Que bueno! podria venirme bien para un juego que estoy haciendo...
Genial, aunq creo q estaría mejor con ícono, no? Cuando logre esa parte posteo acá para que se enteren, y de paso hago un ejemplo usando parameter_count y parameter_string para que al abrir el archivo asociado, el juego haga algo específico
Cita de: Texic en Agosto 02, 2012, 12:20:46 AM
Genial, aunq creo q estaría mejor con ícono, no? Cuando logre esa parte posteo acá para que se enteren, y de paso hago un ejemplo usando parameter_count y parameter_string para que al abrir el archivo asociado, el juego haga algo específico
Ah, entonces por ahora cuando haces doble click a un .svk se abre el juego como si hubieras entredo al .exe
Ahora que lo pienso es obvio, porque el juego se abre y ni se entera XD
Claro, a menos que sepas usar los parameter_count y parameter_string, porq si no me equivoco, así como está ya pasa el parámetro de la ruta completa del archivo abierto al juego
Edit: Actualizado el post principal y agregado soporte para íconos y nombre del tipo de extensión!
Texic una pregunta,como funciona lo de parameters cout y eso solo es para cargar el juego o también sirven para otra función mas?
Está en el manual y más o menos se entiende en el ejemplo. Es para tomar los parámetros pasados al juego mediante una alteración en la ruta de ejecución. Como cambiás el acceso directo del counter strike poniendo "C:\Counter_Strike.exe" -console
Esa palabra, -console, se puede leer desde el juego con parameter_string, parameter_count te devuelve la cantidad de parámetros pasados al juego, se puede pasar más de uno. Lo que hace el script es asociar los archivos para que al abrirse pasen como parámetro su ruta completa, así pueden ser identificados desde el juego/aplicación. Prueba el ejemplo y después me dices. Saludos!
EDIT: Nueva versión final. Ahora la caché de íconos se actualiza para que quede todo bien bonito :3
Cita de: Texic en Agosto 03, 2012, 10:39:52 PM
EDIT: Nueva versión final. Ahora la caché de íconos se actualiza para que quede todo bien bonito :3
Genial!! Ahora está completo, muy útil, lo descargo :D
Esto se puede usar para abrir archivos con extensiones y un parametro específico con nuestro programa creado en game maker cierto?
Si, exactamente, con esto podés asociar una extensión específica a tu programa en game maker. Suponete que creaste un editor de imágenes en gm, con un formato especial .imk, esto crea la asociación para que los .imk abran tu programa y tu programa los reconozca y cargue. Está todo en el ejemplo. Saludos!