Delphi: execução do programa e procedimento / função interna ligando de CMD ou usar Doubleclick em extensão associada

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

Pergunta

Assim - recentemente eu correr em alguns problemas que determinam a partir do qual programa de maneira foi chamado, se em ambos os parâmetros vezes é o mesmo - como: / algo / alguma coisa. I ícone associado com programa em runetime e eu posso usar cmd para chamá-lo, mas, sempre que eu doubleclikc no arquivo associado (com o ícone), progam abre simplesmente, mas não chamadas necessária em rotina, porque eu não tenho necessário gatilho / atributo / parâmetro que, se a execução foi feita DoubleClick, not Run ...> appname.exe / algo / alguma coisa.

Você pode dar exemplo simples ou escrever, teoricamente, todos com funções requiered etc.

Atualmente, como você pode imaginar, eu uso ParamStr / ParamCount / blablabla / FindCMDLineSwitch / e algumas outras funções ... mas ... ainda ...: (

Foi útil?

Solução

Você pode explicar um pouco?

I acha você quer ser capaz de fazer a ação # 1 se DoubleClick para usuário em um ícone do documento para "mydocument.ext", e ação # 2 se ele digita

appname.exe mydocument.exe

doubleclicking fará o shell executar o verbo "aberta", que tem uma "cadeia de comando" associada no registro. Sua melhor aposta é para definir esta cadeia de comando para algo como ...

MyProgram.exe "%1" /doubleclicked

... e depois verificar o / doubleclicked bandeira em tempo de execução. Obviamente, não há nenhuma maneira que você pode impedir que o usuário digitar o comando com o "/ doubleclicked" opção, mas essa é a forma como funciona o shell.

Outras dicas

Como Roddy sugere, uma opção de parâmetro é que eu acho que a única solução confiável. Nota, contudo, que se um usuário cria seu próprio atalho (s) isso pode não atender às suas necessidades.

i. se o usuário cria um atalho que inclui alguns "documento" na linha de comando, você quer que a ser tratada como uma chamada da linha de comando ou um "duplo clique". Meu palpite é que ele é o último.

Se for o primeiro, então você pode parar de ler aqui. :)

Mas se ele é o último, então você pode precisar colocar um pouco mais de trabalho para (mais) obter de forma confiável o comportamento que você quer ....

Isso envolveria usando uma opção de linha de comando para indicar lançamento de linha de comando , ao invés de um lançamento duplo clique, uma vez que existem várias maneiras de "efetivamente" duplo clique, mas apenas uma maneira de executar algo a partir da linha de comando - isto é, usar a linha de comando! (Eu considero Menu Iniciar -.> Executar ... para ser um lançamento de linha de comando, a propósito ymmv)

Então, se fosse comigo eu iria criar um lançador de linha de comando específica para a aplicação. O lançador de linha de comando seria realmente um pouco muito simples de código que leva a linha de comando é dado e simplesmente acrescenta um parâmetro adicional, antes de chamar o executável da aplicação real:

por exemplo.

myapp param1 param2

que simplesmente chama ShellExecute com eficácia:

myappgui param1 param2 / cmd

Eu mesmo não estaria muito preocupado com ter dois executáveis ??desde que o usuário está muito menos preocupado com o nome real do exe que representa seu aplicativo "real" ao invocar-lo através do GUI porque, naturalmente, as invocações GUI de que don' t envolvem sabendo, ou a necessidade de saber, o nome. Suas associações de tipo de arquivo e atalhos etc simplesmente apontam diretamente para o "real" myappgui.exe , ao invés de myapp.exe

E a sua referência de linha de comando simplesmente direciona o usuário para uso myapp.exe para invocar a sua aplicação a partir de uma linha de comando.

Na aplicação, se encontra a opção de linha de comando, em seguida, ele sabe que foi lançado através da aplicação lançador de linha de comando, caso contrário ele deve ter sido um duplo-clique / lançamento GUI.

No que respeita à maioria dos usuários estão em causa, eles podem nem sequer precisam de saber que há dois exe está envolvido. Em qualquer caso, você tem que aceitar que, se / quando um usuário descobre a sua técnica - que sempre que você escolher -. Eles podem falsificar isso fabricando uma linha de comando para conseguir o que quer que extremidades eles desejam

Se isso é importante para você, a linha de comando lançador aproximar talvez o torna um pouco menos provável que eles vão descobrir o mecanismo - sabendo que existem dois executáveis ??não é suficiente - eles também precisam saber a chave de linha de comando que sua linha de comando lançador acrescenta - se eles apenas utilizado myappgui.exe diretamente na linha de comando, sem usar a linha de comando lançador myapp.exe , então ele ainda está indo para responder como se tivesse sido lançado a partir da GUI!

Por outro lado, através de um interruptor para indicar um lançamento GUI exija colocar esse interruptor exigido em "opinião pública".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top