Delphi: Programmausführung und interne Prozedur / Funktion von CMD Aufruf oder mit einem Doppelklick auf zugehörige Erweiterung

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

Frage

So

- vor kurzem betreibe ich auf einige Probleme aus dem Weg Bestimmungsprogramm aufgerufen wurde, wenn in beiden Zeiten Parameter ist die gleiche - wie: / etwas / etwas. Ich verbinde Symbol mit Programm an runetime und ich kann es cmd nennen verwenden, aber, wenn ich auf zugehörige Datei doubleclikc (mit dem Symbol), Progamm öffnet einfach, aber keine Anrufe benötigt rotine weil ich nicht notwendig Trigger / Attribut / Parameter dass, wenn die Ausführung wurde gemacht Doppelklick, nicht ausführen ...> appname.exe / etwas / etwas.

Können Sie einfaches Beispiel zu geben oder schreiben theoretisch alle mit requiered Funktionen etc.

Zur Zeit, da Sie können erraten, ich benutze ParamStr / ParamCount / blablabla / FindCMDLineSwitch / und einige andere Funktionen ... aber ... noch ...: (

War es hilfreich?

Lösung

Können Sie ein wenig erklären?

I denken Sie wollen Aktion in der Lage sein zu tun # 1, wenn Benutzer Ein Doppelklick auf ein Dokument Symbol für „mydocument.ext“ und Aktion # 2, wenn er Typen

appname.exe mydocument.exe

Ein Doppelklick wird die Shell macht das „offene“ Verb läuft, die eine zugehörige „Befehlsfolge“ in der Registrierung hat. Ihre beste Wette ist diese Befehlsfolge auf etwas zu setzen, wie ...

MyProgram.exe "%1" /doubleclicked

... und dann prüfen, für die / Flag zur Laufzeit doubleclicked. Offensichtlich, es gibt keine Möglichkeit, dass Sie den Benutzer verhindern können den Befehl mit der „/ doubleclicked“ Option eingeben, aber das ist die Art, wie die Shell funktioniert.

Andere Tipps

Wie Roddy schon sagt, ein Parameter Schalter ich die einzige zuverlässige Lösung denken. Beachten Sie, dass jedoch, wenn ein Benutzer seine eigene Verknüpfung erstellt (n) kann dies nicht Ihren Bedürfnissen entsprechen.

d. wenn der Benutzer eine Verknüpfung erstellt, die einige „Dokument“ in der Befehlszeile enthält, möchten Sie, dass als Kommandozeilenaufruf oder ein „Doppelklick“ behandelt werden. Meine Vermutung ist, es ist die letztere.

Wenn es den ehemaligen ist, dann können Sie hier aufhören zu lesen. :)

Aber wenn es ist die letztere dann können Sie sicher ein wenig mehr Arbeit in (mehr) das gewünschte Verhalten bekommen setzen müssen ....

Das würde bedeuten, eine Befehlszeilenoption verwenden, um anzuzeigen, Start-Befehlszeile , anstatt ein Doppelklick zu starten, da es mehrere Möglichkeiten, um „effektiv“ Doppelklick, aber nur eine Möglichkeit, etwas zu laufen von der Kommandozeile - das heißt, verwenden Sie die Befehlszeile! (Ich halte Menü starten. -> Ausführen ... ein Kommandozeilen-Start zu sein, übrigens ymmv)

Also, wenn es nach mir ginge würde ich eine Kommandozeile-spezifisches Startprogramm für die Anwendung erstellen. Die Befehlszeile Launcher wäre eigentlich ein sehr einfaches Stück Code, der die Befehlszeile dauert es gegeben ist und einfach anhängt einen zusätzlichen Parameter, vor der eigentlichen Anwendung ausführbare Aufruf:

z.

myapp param1 param2

, die einfach ruft ShellExecute mit effektiv:

myappgui param1 param2 / cmd

Ich selbst würde nicht allzu besorgt mit zwei ausführbaren Dateien, da der Benutzer weit weniger mit dem tatsächlichen Namen des exe repräsentiert IhrDeterm „echt“ App ist, wenn es durch die GUI, weil natürlich die GUI-Beschwörungen, dass Aufruf don‘ t beinhalten wissen, oder müssen wissen, den Namen. Ihre Dateitypzuordnungen und Verknüpfungen usw. einfach alle Punkte direkt an die "echten" myappgui.exe , anstatt myapp.exe

Und Ihre Befehlszeilenreferenz leitet den Benutzer einfach verwenden myapp.exe Ihre Anwendung über eine Befehlszeile aufgerufen werden kann.

In der Anwendung, wenn es den Befehlszeilenschalter findet dann weiß sie über die Kommandozeile Launcher-Anwendung gestartet wurde, andernfalls muss es ein Doppelklick / GUI Start hat.

Was die Mehrheit der Benutzer betroffen sind, können sie nicht einmal wissen müssen, dass es zwei exe beteiligt sind. In jedem Fall müssen Sie akzeptieren, dass, wenn / wenn ein Benutzer Ihre Technik entdeckt - was immer Sie sich entscheiden -. Sie es durch Herstellen einer Befehlszeile fälschen kann zu erreichen, was sie sich wünschen endet

Wenn das für Sie wichtig, die Befehlszeile Launcher Ansatz vielleicht macht es eine wenig weniger wahrscheinlich, dass sie den Mechanismus entdecken - zu wissen, dass es zwei ausführbare Dateien nicht genug - sie müßten auch die Befehlszeilenschalter wissen, dass Ihre Befehlszeilen Launcher fügt - wenn sie verwendet nur myappgui.exe direkt von der Kommandozeile, ohne die Befehlszeile Launcher mit myapp.exe , dann ist es immer noch reagieren werde als ob sie von der GUI gestartet wurden!

Auf der anderen Seite, einen Schalter mit einem um anzuzeigen, GUI Start erfordert setzen, die erforderlich Schalter auf „Öffentlichkeit“.

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