Pregunta

Actualmente estoy usando:

if ParamStr(1)<>'%1' then
begin
  address.Text:=ParamStr(1);
  autoconfigfile;
end;

para elegir el nombre del archivo que se utilizó para abrir el archivo mediante la asociación de archivos.

Ahora quiero desarrollar la capacidad de operar en múltiples archivos. Es decir. si selecciono 5 archivos y hago clic con el botón derecho y selecciono abrir con "Sistema de cifrado". Tengo la entrada de registro:

  reg.OpenKey('*\shell\Encrypt\command', true);
  reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
  reg.CloseKey;

Para agregar una habilidad de abrir con el botón derecho a todos los archivos. Entonces me gustaría tener la capacidad de detectar

  1. cuántos archivos
  2. la ruta de acceso de cada archivo
¿Fue útil?

Solución

Si intenta abrir varios archivos a la vez, generalmente obtendrá varias instancias del programa registrado, cada una abriendo uno de los archivos.

Ahora a juzgar por tus preguntas recientes

¿Cómo puedo saber si ¿Se está ejecutando una instancia de mi programa?
Cómo hacer ¿Envío una cadena de una instancia de mi programa Delphi a otra?

no desea permitir varias instancias del programa, por lo que deberá reconsiderar la decisión de diseño o implementar una de las formas descritas en las respuestas a la segunda pregunta para enviar el parámetro de línea de comando de las instancias secundarias de su programa a la primera instancia. Tenga en cuenta que el tiempo es importante aquí, porque la primera instancia puede no estar lista para recibir los datos de las otras instancias. Especialmente con las soluciones que utilizan el identificador de ventana del formulario principal, o algún tipo de mecanismo de comunicación basado en tuberías o archivos implicará esperar a que la primera instancia esté lista. Por lo tanto, puede ser mucho más fácil simplemente permitir múltiples instancias del programa.

También puede consultar esta entrada de Microsoft Knowledge Base o buscar más información sobre el comando Ejecutar DDE .

Editar: También puede probar con "% * " en lugar de "% 1 " en la clave de registro, como se detalla en la sección " Old New Thing " comente la respuesta de gabr mencionado. No he probado esto, pero parece que podría funcionar.

Otros consejos

Además de todo lo demás, debe usar% l en lugar de% 1. De esa manera, su programa obtendrá un nombre completo (largo) del archivo, no el corto (DOS 8.3).

EDITAR: una respuesta a la pregunta de Rob en los comentarios

Parece que es casi imposible buscar '% l' y '% 1' (incluido el signo de porcentaje) con Google o MSDN search. :( Sin embargo, he encontrado una buena descripción en The Old New Thing - '% 1' detecta automáticamente si su programa admite nombres de archivo largos y pasa el nombre corto o largo. Parece que todos los sistemas modernos pasan el nombre largo a menos que su exe no se encuentre (al menos así es como entiendo la exposición de Raymond).

Si se desplaza más hacia abajo en los comentarios (busque '% l' en la página) encontrará una lista de todos los parámetros compatibles, tomada de una página que ya no existe (pero encontré una copia antigua). en el Archivo de Internet ). Esa página tampoco incluye ninguna referencia a la documentación de Microsoft, por lo que no puedo proporcionarle un enlace autorizado :(

Rob, gracias por preguntar, ahora sé más sobre% 1 /% l que antes :) +1 por eso.

No estoy seguro de lo que realmente quieres. Pero puedes encontrar el número de parámetros con:

ParamCount;

Cada parámetro se encuentra con

ParamStr(1);
ParamStr(2);
ParamStr(3);

Hasta ParamCount.

Observo que solo lo está registrando con% 1.

Intentaría% 1% 2% 3% 4% 5 etc. en el registro.

Nunca he jugado con extensiones de shell para ver qué más podría estar haciendo que esto falle. Todo lo que he hecho es asociar archivos registrados y se comportan exactamente como yo esperaría.

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