¿Cómo puedo encontrar la ruta del archivo que se activa al abrir un archivo con una extensión de archivo personalizada?

StackOverflow https://stackoverflow.com/questions/458467

Pregunta

¿Cómo obtengo la ubicación del archivo que utilicé para abrir mis programas?

Ejemplo: si creo una nueva extensión ".xyz" digo y le digo a Windows que quiero abrir el tipo de archivo .xyz con myapplication, luego comienza mi aplicación. Genial, pero ¿cómo maneja mi aplicación la ruta del archivo que se utilizó para iniciarlo?

Además, ¿hay alguna manera de mantener en funcionamiento solo una versión de mi aplicación y los archivos nuevos que se abren para llamar a un método en mi aplicación? Por ejemplo, si está usando un torrent y abre 5 archivos .torrent, todos se pasan a una sola aplicación.

Pregunta secundaria: ¿todas las extensiones de archivo tienen 3 letras de largo y hay una lista de las que se usan públicamente? Si estoy creando una extensión de archivo, no quiero usar una que ya esté en uso.

¿Fue útil?

Solución

Cuando creó su asociación de archivos, especificó la línea de comando que Explorer debería ejecutar para activar su programa. El shell también coloca el nombre del archivo del documento en la línea de comando, así que en su programa, verifique los argumentos de la línea de comando . Cómo lo haga depende de su idioma y entorno de desarrollo. En Delphi, utilice ParamCount y ParamStr funciones.

Cuando crea la asociación de archivos, puede especificar exactamente en qué parte de la línea de comando debe ir el nombre del archivo del documento. Use % 1 en algún lugar de la línea de comando, y el shell lo reemplazará con el nombre del archivo. Dado que los nombres de archivos de Windows frecuentemente contienen espacios, debe poner comillas alrededor del nombre del archivo, de modo que la línea de comando en la asociación de archivos se vería así:

ArthurApp.exe "%1"

Con esa asociación, al hacer doble clic en otro archivo de documento, se iniciará otra instancia de su programa. Si prefiere que el documento se abra en otra ventana de la instancia que ya se está ejecutando, puede escribir código para que su programa busque instancias que ya se estén ejecutando cuando se inicie. Si encuentra uno, puede comunicarse con esa instancia para decirle qué archivo abrir. Puede efectuar esa comunicación de muchas maneras, incluyendo ranuras de correo, sockets, canalizaciones con nombre, archivos mapeados en memoria y DDE.

El mecanismo de asociación de archivos del shell ya tiene una forma de comunicarse a través de DDE, por lo que una segunda instancia de su programa no se iniciará en absoluto. En cambio, el shell iniciará una conversación DDE con la instancia que ya se está ejecutando y le dirá el nuevo nombre de archivo de esa manera. Sin embargo, DDE parece estar cayendo en desgracia hoy en día, así que revise algunas de las otras opciones primero.

Para su pregunta secundaria, no, las extensiones no siempre tienen tres caracteres. Mire a su alrededor, y eso debería ser obvio: el código C va en los archivos .c , los gráficos de Adobe Illustrator van en los archivos .ai , y los nuevos documentos de Microsoft Word van en .docx archivos.

Pero ten cuidado. Si solicita **. Doc *, los resultados incluirán también archivos .docx . Esto se debe a que FindFirstFile coincide con los nombres de archivo cortos y largos, y los nombres de archivo largos con extensiones de archivo largas tienen extensiones de tres caracteres en sus versiones de nombre de archivo corto.

Otros consejos

Rob cubrió la respuesta a sus preguntas maravillosamente.

En cuanto a la última parte, si existe una lista pública de extensiones de archivo, no como tal, pero existe shell.windows.com, el servicio web Explorer utiliza para localizar controladores para extensiones de archivo desconocidas. Puede crear una extensión y luego consultar shell.windows.com para ver si se ha registrado. Por ejemplo, para verificar si la extensión .blah ha sido registrada por alguien en shell.windows.com, simplemente abra esta URL en cualquier navegador:

http://shell.windows.com/fileassoc /0409/xml/redir.asp?ext=blah

Por supuesto, reemplace el blah final con su extensión.

Puede encontrar más detalles sobre esto en KB929149 y en la publicación de Raymond Chen ¿Dónde obtiene shell.windows.com información sobre las extensiones de archivo y cómo lo hago? entrar en esa acción? .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top