2009-08-16 6 views
0

Also - vor kurzem betreibe ich auf einige Probleme aus dem Weg Bestimmungsprogramm aufgerufen wurde, wenn in beiden Zeiten Parameter gleich ist - wie:/etwas /etwas. Ich assoziiere Icon mit Programm bei Runetime und ich kann cmd verwenden, um es aufzurufen, aber wenn ich doubleclikc auf assoziierte Datei (mit dem Symbol), öffnet Programm einfach, aber ruft nicht benötigt rotine, weil ich nicht notwendigen Trigger/Attribut/Parameter, dass, wenn die Ausführung gemacht wurde Doppelklick, nicht ausführen ...> appname.exe/etwas/etwas.Delphi: Programmausführung und interne Prozedur/Funktion von CMD Aufruf oder Doppelklick mit auf zugehörigen Erweiterung

Können Sie einfaches Beispiel an oder schreiben Sie theoretisch alle mit requiered Funktionen usw.

Derzeit wie Sie sich vorstellen können, verwende ich ParamStr/ParamCount/blablabla/FindCMDLineSwitch/und einige andere Funktionen ... aber ... noch ... :(

Antwort

5

können Sie ein wenig?

erklären ich denke, Sie 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

eingibt
appname.exe mydocument.exe 

Doppelklick auf die Shell ausführen, um die „offene“ verb machen, die in der Registrierung eine zugehörige „Befehlsfolge“ hat. Ihre beste Wette ist, diese Befehlszeichenfolge auf etwa so einzustellen ...

MyProgram.exe "%1" /doubleclicked 

... und dann zur Laufzeit auf das Flag/doubleclicked prüfen. Offensichtlich, gibt es keine Möglichkeit, dass Sie verhindern können, dass der Benutzer den Befehl mit der Option "/ doubleclicked" eingibt, aber so funktioniert die Shell.

+0

ja. genau das, was ich brauche. Hm ... verdammt, aber ich denke, dass der basic/dl-Parameter die beste Lösung ist ... –

+1

+1 Roddy für das Finden einer unglaublich kryptischen Frage! – Argalatyr

+0

Mit Argalatyr vereinbart. Diese Frage verstand ich erst, als ich Roddys Antwort gelesen hatte. –

1

Wie Roddy schon sagt, ein Parameter Schalter ich die einzige zuverlässige Lösung denken. Beachten Sie jedoch, dass wenn ein Benutzer eine eigene Verknüpfung erstellt, dies möglicherweise nicht Ihren Anforderungen entspricht.

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

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

Aber wenn es ist letztere dann müssen Sie unter Umständen ein wenig mehr Arbeit in (mehr) setzen zuverlässig das Verhalten, das Sie wollen bekommen ....

Das bedeuten würde mithilfe einer Befehlszeile umschalten auf Kommandozeile Start, statt einem Doppelklick Start angeben, da es mehrere Möglichkeiten, um „effektiv“ Doppelklick ist, aber nur ein Weg, um etwas von der Kommandozeile ausgeführt werden - das heißt, verwenden Sie die Befehlszeile! (Ich betrachte Startmenü -> Ausführen ... übrigens als Befehlszeilenstart.)

Also, wenn ich es wäre, würde ich einen Befehlszeilenspezifischen Launcher für die Anwendung erstellen. Der Befehlszeilen-Launcher wäre eigentlich ein sehr einfaches Bit von Code, das die gegebene Befehlszeile übernimmt und einfach einen zusätzlichen Parameter anfügt, bevor er die tatsächliche ausführbare Anwendung aufruft:

z.B.

myapp param1 param2

die einfach ShellExecute Anrufe mit effektiv:

myappgui param1 param2 /cmd

Ich selbst würde nicht allzu besorgt mit zwei ausführbare Dateien da der Benutzer weit weniger mit dem tatsächlichen Namen der exe beschäftigt ist, die Ihre "echte" App beim Aufruf darstellt es durch die GUI, weil natürlich die GUI-Aufrufe von diesem nicht bedeuten, den Namen zu kennen oder zu wissen. Ihre Dateitypzuordnungen und Verknüpfungen usw. einfach alle Punkt direkt auf die „echte“ myappgui.exe statt myapp.exe

Und Ihre Befehlszeilenreferenz leitet den Benutzer einfach myapp.exe zu verwenden um Ihre App über eine Befehlszeile aufzurufen.

Wenn die Anwendung in der Anwendung die Befehlszeilenoption findet, weiß sie, dass sie über die Befehlszeilen-Launcher-Anwendung gestartet wurde, andernfalls muss es sich um einen Doppelklick/GUI-Start handeln.

Soweit die Mehrheit Ihrer Benutzer betrifft, müssen sie vielleicht nie einmal wissen, dass es zwei exe's beteiligt. In jedem Fall müssen Sie akzeptieren, dass, wenn ein Benutzer Ihre Technik entdeckt - welche auch immer Sie wählen - sie ihn fälschen können, indem Sie eine Befehlszeile erstellen, um die gewünschten Ziele zu erreichen.

Wenn Ihnen das wichtig ist, macht es der Kommandozeilen-Launcher-Ansatz vielleicht etwas weniger wahrscheinlich, dass sie den Mechanismus entdecken werden - da sie wissen, dass zwei ausführbare Dateien nicht ausreichen - müssten sie auch den Befehlszeilenschalter kennen dass Ihr Kommandozeilen-Launcher fügt hinzu - wenn sie nur myappgui.exe direkt von der Kommandozeile verwendet, ohne die Befehlszeile Launcher myapp.exe zu verwenden, dann wird es immer noch so reagieren, als ob es von der GUI gestartet wurde!

Auf der anderen Seite erfordert die Verwendung eines Schalters, um einen GUI-Start anzuzeigen, die Notwendigkeit, den erforderlichen Schalter auf "Public View" zu setzen.

+0

http://de.wiktionary.org/wiki/TLDR – Argalatyr