Jump to content

Abrir programa com menu de contexto do explorador do windows


hybrispt
 Share

Recommended Posts

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.

Link to comment
Share on other 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.

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other 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.

😛

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.