Delphi: la ejecución del programa y el procedimiento / función interna llamando desde CMD o usar doble clic en extensión asociada

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

Pregunta

Por lo tanto - Hace poco se ejecutan en algunos problemas para determinar de qué programa se llamaba manera, si en ambos parámetros veces es lo mismo - como: / algo / algo. Asocio icono con programa en runetime y puedo usar cmd llamarlo, pero, cada vez que doubleclikc el archivo asociado (con el icono), progam abre con sencillez, pero no llamadas rotine necesaria porque no tengo necesaria gatillo / atributo / parámetro que si se hace doble clic sobre la ejecución, no Ejecutar ...> appname.exe / algo / algo.

Puede dar ejemplo sencillo o escribir en teoría, todos con funciones REQUERIDOS etc.

En la actualidad, como se puede adivinar, yo uso ParamStr / ParamCount / blablabla / FindCMDLineSwitch / y algunas otras funciones ... pero ... aún así ...: (

¿Fue útil?

Solución

Puede explicar un poco?

Think que quieren ser capaces de hacer la acción # 1 si doubleclicks usuario en un icono de documento para "mydocument.ext", y la acción # 2 si teclea

appname.exe mydocument.exe

doble clic hará que la cáscara de ejecutar el verbo "abierta", que tiene un asociado "cadena de mando" en el registro. Su mejor apuesta es establecer esta cadena de comandos a algo así como ...

MyProgram.exe "%1" /doubleclicked

... y para verificar si el / doubleclicked bandera en tiempo de ejecución. Obviamente, no hay manera de que se puede evitar que el usuario escribiendo el comando con la opción "/ doubleclicked", pero esa es la forma en que funciona la cáscara.

Otros consejos

Como sugiere Roddy, un interruptor parámetro es creo que la única solución fiable. Tenga en cuenta sin embargo, que si un usuario crea su propio acceso directo (s) que no pueden satisfacer sus necesidades.

es decir. si el usuario crea un acceso directo que incluye algunos "documento" en la línea de comandos, ¿desea que se va a tratar como una invocación de línea de comandos o un "doble clic". Mi conjetura es que es lo último.

Si se trata de la primera a continuación, puede dejar de leer aquí. :)

Pero si es este último entonces puede que tenga que poner un poco más de trabajo en la que (más) de forma fiable obtener el comportamiento que desea ....

Eso implicaría el uso de un modificador de línea de comandos para indicar lanzamiento de línea de comandos , en lugar de un clic doble lanzamiento, ya que hay varias maneras de "eficacia" doble clic, pero sólo una manera de ejecutar algo desde la línea de comandos - es decir, utilizar la línea de comandos! (Considero Menú Inicio -.> Ejecutar ... para ser un lanzamiento de línea de comandos, por cierto ymmv)

Así que, si fuera yo crearía un lanzador específico de línea de comandos de la aplicación. El lanzador de línea de comandos en realidad sería un poco muy simple de código que toma la línea de comandos que se da y simplemente se añade un parámetro adicional, antes de llamar al ejecutable de la aplicación real:

por ejemplo.

miaplicacion param1 param2

que llama simplemente ShellExecute con eficacia:

myappgui param1 param2 / cmd

Yo mismo no estaría demasiado preocupado por tener dos ejecutables ya que el usuario es mucho menos preocupados por el nombre real del exe que representa su aplicación "real" cuando se la invoca a través de la interfaz gráfica de usuario, porque, por supuesto, las invocaciones GUI de que don' t implican saber, o la necesidad de saber, el nombre. Sus asociaciones de tipo de archivo y accesos directos, etc., simplemente apuntan directamente a la "real" myappgui.exe , en lugar de myapp.exe

Y su referencia de línea de comandos, simplemente dirige al usuario a utilizar myapp.exe para invocar su aplicación desde una línea de comandos.

En la aplicación, si encuentra el interruptor de línea de comandos a continuación, se sabe que fue lanzado a través de la aplicación de inicio de línea de comandos, de lo contrario, debe haber sido un doble clic / lanzamiento interfaz gráfica de usuario.

En lo que se refiere a la mayoría de sus usuarios, es posible que ni siquiera tienen que saber que hay dos de los involucrados exe. En cualquier caso, hay que aceptar que si / cuando un usuario descubre su técnica - la que sea la que elija -. Que puede suplantar por la fabricación de una línea de comandos para lograr lo que desean termina

Si eso es importante para usted, el enfoque lanzador de línea de comandos tal vez hace que sea un poco menos probable que se va a descubrir el mecanismo - sabiendo que hay dos ejecutables no es suficiente - que también necesitarían saber el interruptor de línea de comandos que su lanzador línea de comandos añade - si sólo utilizan myappgui.exe directamente desde la línea de comandos, sin necesidad de utilizar el lanzador de línea de comandos myapp.exe , entonces es todavía va a responder como si hubiera sido lanzado desde la interfaz gráfica de usuario!

Por otro lado, el uso de un interruptor para indicar un lanzamiento interfaz gráfica de usuario hace necesario poner ese interruptor requerida sobre "la vista del público".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top