• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

hybrispt

Abrir programa com menu de contexto do explorador do windows

5 mensagens neste tópico

Viva.

O meu problema é o seguinte: eu pretendo executar um programa via menu de contexto do explorador do windows. Sei que isso se faz facilmente adicionando a chave 'Shell' e 'Command' no registry, no respectivo tipo de ficheiro. No entanto, se seleccionarmos múltiplos ficheiros, são abertos múltiplos programas. Eu pretendia abrir apenas um, onde fossem passados via parâmetros os ficheiros seleccionados.

Alguém sabe como?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando estiveres a abrir o programa verifica se já tens o Processo a correr com o nome do teu programa.

Podes ver isso no Task Manager, em C# usas a classe Process.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, já tinha pensado nisso mas, há 2 problemas.

1.º - Gostava que a aplicação pudesse ter mais que uma instância.

2.º Como detectar os outros ficheiros seleccionados?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando estiveres a abrir o programa verifica se já tens o Processo a correr com o nome do teu programa.

Podes ver isso no Task Manager, em C# usas a classe Process.

Isso funciona no caso de um executável com um nome diferente? A melhor forma de fazer isso é com um Mutex, afaik.

Bom, quanto à pergunta do tópico:

Que eu saiba, não há nenhuma forma de fazer o Explorer só correr o programa uma vez. O que podes fazer é que quando o programa recebe um ficheiro como argumento, crie um Mutex com um nome associado à pasta desse ficheiro. Depois, quando outra instância volta a ser aberta recebendo outro ficheiro da mesma pasta, manda o nome do ficheiro para a instância já aberta (que encontra pelo Mutex).

Assim podes ter uma instância diferente por cada pasta. Não é bonito, mas é capaz de dar para o que queres.

Ah, e as instâncias abertas sem receberem um ficheiro não abrem nenhum Mutex, claro.

EDIT: agora que penso nisso, de certeza que há uma forma de fazer isso, visto que os programas de compressão (winzip, winrar, etc) fazem-no. O 7zip é open source, podes ver como é que eles fazem, e adaptar para a linguagem que usas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso funciona no caso de um executável com um nome diferente? A melhor forma de fazer isso é com um Mutex, afaik.

Bom, quanto à pergunta do tópico:

Que eu saiba, não há nenhuma forma de fazer o Explorer só correr o programa uma vez. O que podes fazer é que quando o programa recebe um ficheiro como argumento, crie um Mutex com um nome associado à pasta desse ficheiro. Depois, quando outra instância volta a ser aberta recebendo outro ficheiro da mesma pasta, manda o nome do ficheiro para a instância já aberta (que encontra pelo Mutex).

Assim podes ter uma instância diferente por cada pasta. Não é bonito, mas é capaz de dar para o que queres.

Ah, e as instâncias abertas sem receberem um ficheiro não abrem nenhum Mutex, claro.

EDIT: agora que penso nisso, de certeza que há uma forma de fazer isso, visto que os programas de compressão (winzip, winrar, etc) fazem-no. O 7zip é open source, podes ver como é que eles fazem, e adaptar para a língua que usas.

Ok, obrigado malta. Já tenho então duas soluções.

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora