Question

J'utilise actuellement:

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

pour récupérer le nom du fichier utilisé pour ouvrir le fichier avec l'association de fichier via.

Je souhaite maintenant développer la capacité d’opérer sur plusieurs fichiers. C'est à dire. Si je sélectionne 5 fichiers et que je clique avec le bouton droit de la souris et que je sélectionne Ouvrir avec "EncryptionSystem". J'ai l'entrée du registre:

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

Pour ajouter une capacité d'ouverture de clic droit à tous les fichiers. Je voudrais alors la capacité de détecter

  1. combien de fichiers
  2. le chemin de chaque fichier
Était-ce utile?

La solution

Si vous essayez d'ouvrir plusieurs fichiers à la fois, vous obtiendrez généralement plusieurs instances du programme enregistré, chacune ouvrant l'un des fichiers.

À en juger par vos dernières questions

Comment savoir si une instance de mon programme est en cours d'exécution?
Comment faire J'envoie une chaîne d'une instance de mon programme Delphi à une autre?

vous ne souhaitez pas autoriser plusieurs instances du programme, vous devez donc reconsidérer cette décision de conception ou implémenter l'une des méthodes décrites dans les réponses à la deuxième question pour envoyer le paramètre de ligne de commande des instances secondaires. de votre programme en première instance. Veuillez noter que le timing est important ici, car la première instance peut ne pas être prête à recevoir les données des autres instances. Surtout avec des solutions utilisant le handle de fenêtre du formulaire principal ou une forme quelconque de mécanisme de communication basé sur un canal ou sur un fichier, il faudra attendre que la première instance soit prête. Il peut donc être beaucoup plus facile de simplement autoriser plusieurs instances du programme.

Vous pouvez également consulter cette entrée de la Base de connaissances Microsoft ou rechercher des informations supplémentaires. sur la commande Exécuter DDE .

Modifier: vous pouvez également essayer avec "% * " au lieu de "% 1 " dans la clé de registre, comme indiqué dans la section "Old New Thing". commentaire la réponse en gabr mentionné. Je n'ai pas testé cela, mais il semblerait que cela puisse fonctionner.

Autres conseils

Outre tout le reste, vous devez utiliser% l au lieu de% 1. Ainsi, votre programme obtiendra un nom complet (long) du fichier, pas le nom court (DOS 8.3).

EDIT: une réponse à la question de Rob dans les commentaires

Il semble presque impossible de rechercher '% l' et '% 1' (y compris le signe de pourcentage) à l'aide de la recherche Google ou MSDN. :( Cependant, j'ai trouvé une très bonne description dans L'ancienne nouvelle chose - '% 1' détecte automatiquement si votre programme prend en charge les noms de fichier longs et transmet un nom court ou long. Il semble que tous les systèmes modernes portent le nom long sauf si votre fichier exe est introuvable (du moins, c'est ainsi que je comprends l'exposé de Raymond).

Si vous faites défiler les commentaires plus bas (recherchez "% l" sur la page), vous trouverez une liste de tous les paramètres pris en charge, extraits d'une page qui n'existe plus (mais j'ai trouvé une ancienne copie dans le Internet Archive ). Cette page ne contient pas non plus de référence à la documentation Microsoft. Je ne peux donc pas vous donner de lien faisant autorité: (

Merci d'avoir posé la question à Rob - j'en sais maintenant plus sur% 1 /% l qu'auparavant :) +1 pour cela.

Je ne sais pas ce que vous voulez vraiment. Mais vous pouvez trouver le nombre de paramètres avec:

ParamCount;

Chaque paramètre est alors trouvé avec

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

Jusqu'au ParamCount.

Je constate que vous l'enregistrez uniquement avec% 1.

Je voudrais essayer% 1% 2% 3% 4% 5 etc. dans le registre.

Je n'ai jamais joué avec des extensions de shell pour voir ce qui pourrait en faire l'échec. Tout ce que j'ai fait, ce sont des associations de fichiers enregistrés, qui se comportent exactement comme je le pensais.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top