hybrispt Posted October 20, 2009 at 12:07 PM Report Share #292509 Posted October 20, 2009 at 12:07 PM 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 More sharing options...
bruno1234 Posted October 20, 2009 at 07:24 PM Report Share #292583 Posted October 20, 2009 at 07:24 PM 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. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
hybrispt Posted October 21, 2009 at 11:19 AM Author Report Share #292676 Posted October 21, 2009 at 11:19 AM 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? Link to comment Share on other sites More sharing options...
IceBrain Posted October 21, 2009 at 03:39 PM Report Share #292727 Posted October 21, 2009 at 03:39 PM 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 More sharing options...
hybrispt Posted October 21, 2009 at 03:49 PM Author Report Share #292730 Posted October 21, 2009 at 03:49 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now