Frage

Ich bin derzeit mit:

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

den Namen der Datei holen, die zum Öffnen der Datei mit über Dateizuordnung verwendet wurde.

Ich möchte jetzt die Fähigkeit entwickeln, auf mehrere Dateien zu arbeiten. D. h wenn ich 5 Dateien auswählen und die rechte Maustaste und wählen Öffnen mit „EncryptionSystem“. Ich habe den Registrierungseintrag:

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

Um einen Rechtsklick öffnen Fähigkeit, alle Dateien hinzuzufügen. Ich würde dann die Möglichkeit besteht

zu erkennen
  1. , wie viele Dateien
  2. der Pfadname jeder Datei
War es hilfreich?

Lösung

Wenn Sie versuchen, mehrere Dateien zu öffnen, wenn Sie in der Regel mehrere Instanzen des registrierten Programms erhalten werden, die jede Öffnung eine der Dateien.

Jetzt von Ihren letzten Fragen zu urteilen

Wie kann ich feststellen, ob eine Instanz mein Programm läuft?
Wie ich schicke eine Zeichenfolge von einer Instanz meines Delphi Programm zu einem anderen?

Sie nicht wünschen, mehrere Instanzen des Programms zu ermöglichen, so dass Sie entweder brauchen diese Design-Entscheidung überdenken, oder eines der in den Antworten auf die zweite Frage skizzierte Weise implementieren, um die Befehlszeilenparameter der sekundären Instanzen zu senden Ihr Programm an der ersten Instanz. Bitte beachten Sie, dass Timing wichtig ist hier, weil die erste Instanz auch vielleicht noch nicht bereit sein, die Daten von den anderen Instanzen zu empfangen. Vor allem mit Lösungen des Fenstergriff des Hauptformulars, oder irgendeine Form von Rohr- oder dateibasierten Kommunikationsmechanismus wird warten auf die erste Instanz beinhalten, bereit sein. Es kann daher viel einfacher sein, einfach mehrere Instanzen des Programms zu ermöglichen.

Sie können auch schauen dieser Microsoft Knowledge Base-Eintrag oder nach weiteren Informationen über die DDE Execute Befehl.

Edit: Sie können auch mit "% *" anstelle von "% 1" in dem Registrierungsschlüssel versuchen, wie in dem "Old New Thing" Kommentar detaillierte the Antwort von gabr erwähnt. Ich habe nicht getestet, aber es sieht aus wie es funktionieren könnte.

Andere Tipps

Neben allem anderen, sollten Sie% l anstelle von% 1. Auf diese Weise wird Ihr Programm einen vollständigen (langen) Namen der Datei erhält, nicht die kurze (DOS 8.3) ein.

EDIT: Eine Antwort auf Robs Frage in den Kommentaren

Es scheint, dass es fast unmöglich ist, für ‚% l‘ und ‚% 1‘ (einschließlich Prozentzeichen) entweder mit Google oder MSDN Suche zu suchen. :( Allerdings fand ich eine ziemlich gute Beschreibung in The Old New Thing - ‚% 1‘ erkennt automatisch, ob Ihr Programm unterstützt Namen lange Dateinamen und übergibt entweder kurz oder lang. Es scheint, dass alle modernen Systeme langen Namen passieren , wenn Ihr exe nicht gefunden werden kann (zumindest das ist, wie ich die Raymonds aussetzen verstehen).

Wenn Sie blättern weiter unten in den Kommentaren (Suche nach ‚% l‘ auf der Seite) finden Sie eine Liste aller unterstützten Parameter finden, von einer Seite weitergeleitet, die nicht mehr existiert (aber ich fand eine alte Kopie in der Internet Archive ). Die Seite nicht keinen Verweis auf Microsoft-Dokumentation enthält entweder, so kann ich Ihnen einen autoritative Link nicht geben: (

Rob, danke der für die Frage - ich weiß jetzt mehr über% 1 /% l als vorher :) +1 für die

.

Nicht sicher, was Sie wirklich wollen. Aber Sie können die Anzahl der Parameter mit finden:

ParamCount;

Jeder param wird dann gefunden mit

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

Bis ParamCount.

Ich nehme zur Kenntnis, dass Sie nur registrieren es mit% 1.

Ich würde versuchen% 1% 2% 3% 4% 5 usw. in der Registrierung.

Ich habe noch nie mit Shell-Erweiterungen gespielt, um zu sehen, was sonst könnte dies fehlschlagen wird, zu machen. Alles, was ich getan habe, ist Dateizuordnungen registriert und sie verhalten sich genau so, wie ich erwarten würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top