Domanda

Attualmente sto usando:

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

per selezionare il nome del file che è stato usato per aprire il file tramite l'associazione file.

Ora voglio sviluppare la capacità di operare su più file. Cioè se seleziono 5 file e faccio clic con il pulsante destro del mouse e seleziono Apri con " EncryptionSystem " ;. Ho la voce di registro:

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

Per aggiungere un clic destro abilita capacità a tutti i file. Vorrei quindi la possibilità di rilevare

  1. quanti file
  2. il percorso di ciascun file
È stato utile?

Soluzione

Se si tenta di aprire più file contemporaneamente, in genere si ottengono più istanze del programma registrato, ciascuna delle quali apre uno dei file.

Ora a giudicare dalle tue domande recenti

Come faccio a sapere se un'istanza del mio programma è in esecuzione?
Come si fa Mando una stringa da un'istanza del mio programma Delphi a un'altra?

non si desidera consentire più istanze del programma, quindi sarà necessario riconsiderare tale decisione di progettazione o implementare uno dei modi indicati nelle risposte alla seconda domanda per inviare il parametro della riga di comando delle istanze secondarie del tuo programma in prima istanza. Si noti che il tempismo è importante qui, perché la prima istanza potrebbe non essere ancora pronta a ricevere i dati dalle altre istanze. Soprattutto con le soluzioni che utilizzano l'handle della finestra del modulo principale o una qualche forma di meccanismo di comunicazione basato su pipe o file implicherà l'attesa che la prima istanza sia pronta. Pertanto, potrebbe essere molto più semplice consentire più istanze del programma.

Potresti anche voler esaminare questa voce della Microsoft Knowledge Base o cercare ulteriori informazioni sul comando DDE Execute .

Modifica: puoi anche provare con "% * " invece di "% 1 " nella chiave di registro, come descritto in dettaglio nella sezione "Vecchia novità" commenta la risposta di gabr menzionato. Non l'ho provato, ma sembra che potrebbe funzionare.

Altri suggerimenti

Oltre a tutto il resto, dovresti usare% l invece di% 1. In questo modo il tuo programma otterrà un nome completo (lungo) del file, non quello breve (DOS 8.3).

EDIT: una risposta alla domanda di Rob nei commenti

Sembra quasi impossibile cercare '% l' e '% 1' (incluso il segno di percentuale) utilizzando la ricerca Google o MSDN. :( Tuttavia, ho trovato una descrizione abbastanza buona in The Old New Thing - '% 1' rileva automaticamente se il programma supporta nomi di file lunghi e passa nomi brevi o lunghi. Sembra che tutti i sistemi moderni passino il nome lungo a meno che la tua exe non possa essere trovata (almeno così capisco l'esposizione di Raymond).

Se scorri più in basso nei commenti (cerca '% l' nella pagina) troverai un elenco di tutti i parametri supportati, preso da una pagina che non esiste più (ma ho trovato una vecchia copia nel Archivio Internet ). Quella pagina non include alcun riferimento alla documentazione di Microsoft, quindi non posso darti un link autorevole :(

Rob, grazie per avermelo chiesto - ora so di più su% 1 /% l rispetto a prima :) +1 per quello.

Non sono sicuro di ciò che vuoi davvero. Ma puoi trovare il numero di parametri con:

ParamCount;

Ogni parametro viene quindi trovato con

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

Fino a ParamCount.

Prendo atto che lo stai registrando solo con% 1.

Proverei% 1% 2% 3% 4% 5 ecc. nel registro.

Non ho mai giocato con le estensioni della shell per vedere cos'altro potrebbe far fallire questo. Tutto quello che ho fatto sono associazioni di file registrate e si comportano esattamente come mi sarei aspettato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top