PDA

Ver la Versión Completa : Si asigne una extension a mi programa. Donde proceso al archivo al hacer doble clic?


rogeliogamberro
26-02-2011, 04:10:57
Hola Foro!

Estoy haciendo una prueba en C++ Builder (que es similar a Delphi) donde deseo abrir un archivo con doble clic (por ejemplo un .txt con otra extension.. supongamos .abc y cargarlo a un memo). He conseguido la rutina que me genera la entrada al registro, pero no se en donde debo escribir el codigo para abrirlo cuando se produzca el doble clic y donde esta el string con la ruta. Agradeceria que alguien me pueda despejar esa duda ya sea en C o Delphi. Muchas gracias!

Ñuño Martínez
28-02-2011, 10:03:38
Depende de cómo hayas configurado la entrada en el registro, esto es, de qué forma el sistema operativo le pasa al programa el nombre del archivo. Lo normal es pasarlo a través de la línea de comandos, recogiéndolo en los parámetros de "main".

/* Ejemplo de manejo de parámetros. */
#include<stdio.h>
#include<stdlib.h> /* EXIT_SUCCESS y EXIT_FAILURE. */

/* El SO. se encarga de pasar los parámetros a main.
El parámetro 0 suele ser el ejecutable junto con su ruta. */
int main (int NumArgumentos, char *Argumentos[])
{
int Ndx;

for (Ndx=0; Ndx<NumArgumentos; Ndx++)
printf ("Argumento %d: '%s'.\n", Ndx, Argumentos[Ndx]);
/* main debería devolver siempre un valor. */
return EXIT_SUCCESS;
}


$ ./ejemplo.exe
Argumento 0: './ejemplo.exe'.
$ ./ejemplo.exe lol ejemplo y tal
Argumento 0: './ejemplo.exe'.
Argumento 1: 'lol'.
Argumento 2: 'ejemplo'.
Argumento 3: 'y'.
Argumento 4: 'tal'.

roman
28-02-2011, 15:48:49
Depende de cómo hayas configurado la entrada en el registro, esto es, de qué forma el sistema operativo le pasa al programa el nombre del archivo. Lo normal es pasarlo a través de la línea de comandos,

¿De qué otra manera le puede pasar el nombre del archivo?

// Saludos

Ñuño Martínez
02-03-2011, 12:05:33
¿De qué otra manera le puede pasar el nombre del archivo?Pues por cualquier método que permita comunicarse con un ejecutable. Por ejemplo, redirigiendo las corrientes de entrada y salida (stdin y stdout), usando tuberías (pipes), enviando mensajes al proceso, etc.

El compilador de QuickBasic recibía los parámetros por teclado vía stdin, así que el entorno redirigía la corriente de entrada cuando compilabas desde este, para indicarle el nombre del archivo fuente y las bibliotecas.

roman
09-03-2011, 16:04:54
Pues por cualquier método que permita comunicarse con un ejecutable. Por ejemplo, redirigiendo las corrientes de entrada y salida (stdin y stdout), usando tuberías (pipes), enviando mensajes al proceso, etc.

Claro, pero tú comentaste:


Depende de cómo hayas configurado la entrada en el registro, esto es, de qué forma el sistema operativo le pasa al programa el nombre del archivo.


O sea, la pregunta es, ¿de qué otra forma puedes configurar el registro para que el sistema operativo pase el nombre del archivo?

// Saludos

Chris
09-03-2011, 18:15:56
Yo creo que hay en Windows existe un formato especial en la configuración de la extención y programa asociado en dónde se configura el lugar en que será colocado el nombre del archivo. Creo que se utilza %s dentro del comando. La posión de %s dentro del comando indica el índice en que estará el nombre de archivo dentro del arreglo Params.

Ñuño Martínez
09-03-2011, 20:29:37
O sea, la pregunta es, ¿de qué otra forma puedes configurar el registro para que el sistema operativo pase el nombre del archivo?

// Saludos

En el registro de Windows únicamente puedes indicar (como explica Chris) cómo debe "traducir" la doble pulsación en el Explorer para pasar el nombre del archivo vía línea de comandos. Si sólo usas el Explorer, pues no necesitas más. Ahora bien, si usas la consola "cmd" entonces ya puedes elegir entre la línea de comandos o la redirección de la corriente de entrada (stdin), y si usas otra consola, como Cygwin o MSys, entonces puedes usar además de las dichas las tuberías o "pipes".

roman
09-03-2011, 20:51:56
¡Ah! Ok. Creo que ya capto a qué te refieres. Lo que pasa es que al leer

donde deseo abrir un archivo con doble clic

presupuse que Rogelio se refería al Explorer y la asociación que se hace en el registro. Por otra parte, he visto que algunas extensiones de archivo están configuradas, en el registro, para ser abiertas mediante DDE, de manera que creí que estabas hablando de estas otras formas de configurar en el registro.

// Saludos

Ñuño Martínez
11-03-2011, 09:53:02
Leñes, el DDE, ya lo había olvidado. Pero, ¿eso todavía se usa?

roman
11-03-2011, 16:06:29
Ni idea ja, ja. Oficialmente no sé si ya se descontinuó, pero lo que sí sé es que por culpa del DDE no podía abrir proyectos de Delphi 7 desde el Explorador en Windows Vista. Cada vez que lo intentaba se producía una violación de acceso.

Hasta que me di cuenta que lo arreglaba inhabilitando la apertura por DDE. Y ahora está mejor porque si intento abrir un segundo proyecto, lo abre en una segunda instancia de Delphi en lugar de intentar abrirlo an la misma con la consabida pregunta ¿Desea usted guardar los cambios?

// Saludos

Casimiro Notevi
11-03-2011, 16:08:32
¿DDE?, ¿eso con qué se come? :confused:

roman
11-03-2011, 16:23:53
DDE (http://msdn.microsoft.com/en-us/library/ms648774)

// Saludos

Casimiro Notevi
11-03-2011, 16:59:55
Gracias, pensé que era la extensión de algún tipo de archivo.