Delphi: exécution du programme et de la procédure / fonction interne d'appel de CMD ou à l'aide de l'extension associée Doubleclick

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

Question

- récemment, je cours sur certains problèmes déterminants dont le programme de manière a été appelé, si dans les deux fois paramètres est la même - comme: / quelque chose / quelque chose. J'associe l'icône avec le programme à runetime et je peux utiliser cmd pour l'appeler, mais, chaque fois que je doubleclikc le fichier associé (avec l'icône), progam ouvre simplement, mais ne pas les appels rotine nécessaire parce que je n'ai pas déclencheur nécessaire / attribut / paramètre que si l'exécution a été faite doubleclick, not Run ...> appname.exe / quelque chose / quelque chose.

Pouvez-vous donner des exemples simples ou écrire théoriquement toutes les fonctions etc requiered.

À l'heure actuelle, comme vous pouvez le deviner, j'utilise ParamStr / ParamCount / blablabla / FindCmdLineSwitch / et d'autres fonctions ... mais ... quand même ...: (

Était-ce utile?

La solution

Pouvez-vous expliquer un peu?

pense vous voulez être en mesure de faire une action # 1 si doubleclicks utilisateur sur une icône de document pour "mydocument.ext", et l'action n ° 2 s'il types

appname.exe mydocument.exe

fera la Double-cliquer shell exécute le verbe « ouvert », qui a une « chaîne de commande » associée dans le Registre. Votre meilleur pari est de définir cette chaîne de commande à quelque chose comme ...

MyProgram.exe "%1" /doubleclicked

... puis vérifier le / drapeau lors de l'exécution double-cliqué. Évidemment, il n'y a aucun moyen que vous pouvez empêcher l'utilisateur de taper la commande avec l'option « / double-cliqué », mais c'est la façon dont les travaux shell.

Autres conseils

Comme l'indique Roddy, un commutateur de paramètre est je pense que la seule solution fiable. Notez toutefois que si un utilisateur crée son propre raccourci (s) cela peut ne pas répondre à vos besoins.

i.e.. si l'utilisateur crée un raccourci qui comprend un certain « document » dans la ligne de commande, voulez-vous que pour être traité comme une invocation de ligne de commande ou un « double clic ». Je suppose que c'est celle-ci.

Si c'est l'ancien alors vous pouvez arrêter de lire ici. :)

Mais si est ce dernier, vous devrez peut-être mettre un peu plus de travail pour (plus) obtenir de manière fiable le comportement que vous voulez ....

Cela impliquerait l'aide d'un commutateur de ligne de commande pour indiquer lancement de la ligne de commande , au lieu d'un lancement double clic, car il y a plusieurs façons de doubler « efficacement » clic, mais une seule façon d'exécuter quelque chose à partir de la ligne de commande - à savoir, utiliser la ligne de commande! (Je considère Menu Démarrer -.> Exécuter ... pour un lancement de la ligne de commande, par la voie YMMV)

Alors, si elle était moi, je créerais une ligne de commande de lancement spécifique pour l'application. Le lanceur de ligne de commande serait en fait un peu très simple de code qui prend la ligne de commande, il est donné et tout simplement un paramètre concatène supplémentaire, avant d'appeler l'exécutable de l'application réelle:

par exemple.

monapp param1 param2

qui appelle simplement ShellExecute efficacement:

myappgui param1 param2 / cmd

moi-même je ne serais pas trop préoccupé d'avoir deux executables puisque l'utilisateur est beaucoup moins préoccupé par le nom réel de l'exe représentant votre application « réelle » en invoquant à travers l'interface graphique, car bien sûr les invocations de l'interface graphique de ce n » t impliquent le savoir, ou avoir besoin de connaître le nom. Vos associations de type de fichiers et des raccourcis, tout simplement tous les points directement à la "vraie" myappgui.exe , plutôt que myapp.exe

Et votre référence de ligne de commande dirige simplement l'utilisateur à utiliser myapp.exe pour appeler votre application à partir d'une ligne de commande.

Dans l'application, si elle trouve le commutateur de ligne de commande, il sait qu'il a été lancé par l'application de lancement de la ligne de commande, sinon il doit avoir été un double-clic / lancement de l'interface graphique.

En ce qui concerne la majorité des utilisateurs sont concernés, ils ne peuvent jamais avoir besoin même de savoir qu'il ya deux exe est impliqué. En tout état de cause, vous devez accepter que si / quand un utilisateur découvre votre technique - qui que vous choisissez -. Ils peuvent usurper par la fabrication d'une ligne de commande pour obtenir quelque fin qu'ils désirent

Si c'est important pour vous, l'approche du lanceur de ligne de commande un peu fait peut-être moins probable qu'ils découvriront le mécanisme - sachant qu'il ya deux executables ne suffit pas - ils ont également besoin de connaître le commutateur de ligne de commande votre lanceur de ligne de commande ajoute - s'ils ont juste utilisé myappgui.exe directement à partir de la ligne de commande, sans utiliser le lanceur de ligne de commande myapp.exe , alors il va encore répondre comme si elle était lancé à partir de l'interface graphique!

D'autre part, à l'aide d'un commutateur pour indiquer une GUI lancement nécessite la mise que l'interrupteur requis sur « la vue du public ».

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