Traks 6 Denunciar post Postado Agosto 11, 2009 E ai pessoal. beleza? Estou com alguns problemas com o System.Diagnostics.Process. Esta aplicação eu utilizei a Plataforma C# do Visual Studio 2008. A minha duvida é o seguinte. Em uma tela de uma aplicação eu guardo num TextBox(txtDiretorioConta.txt) o diretorio de uma imagem. Criei um botão para abrir a imagem como o Visualizador de imagens e fax do Windows que consta na txtDiretorioConta.txt via o . Criei o seguinte codigo na ação do clique do botão. System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.Start("C:/windows/system32/rundll32.exe", "C:/WINDOWS/System32/shimgvw.dll,ImageView_Fullscreen " + txtDiretorioConta.Text); proc.Start(); proc.WaitForExit(); Dessa forma aparece o seguinte erro: Member 'System.Diagnostics.Process.Start(string, string)' cannot be accessed with an instance reference; qualify it with a type name instead Tentei fazer deste modo, mas nada acontece. System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "C:/WINDOWS/system32/rundll32.exe"; proc.StartInfo.Arguments = "C:/WINDOWS/system32/shimgvw.dll " + txtDiretorioConta.Text; proc.Start(); proc.WaitForExit(); Alguem poderia me dar alguma luz de como abrir uma imagem com o visualizador de imagens e fax do Windows? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 11, 2009 O primeiro código esta totalmente errado, o método Start não recebe nada no construtor. Terá que ver se o executável que esta chamando aceita algum parâmetro de entrada para abrir determinada imagem. De uma olhada nesses artigos: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx http://msdn.microsoft.com/en-us/library/system.diagnostics.process%28VS.71%29.aspx http://www.linhadecodigo.com.br/Artigo.aspx?id=271 Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Traks 6 Denunciar post Postado Agosto 11, 2009 Opa Quintelab. Obrigado por responder.... Que estranho.... antes de postar no forum eu revirei o google. Muitos exemplos que eu achei era desse jeito que eu postei... alguns diziam que havia dado certo. Eu fiz um outro para abrir arquivos PDF e esse funcionou. System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "AcroRd32.exe"; proc.StartInfo.Arguments = txtDiretorioConta.Text; proc.Start(); proc.WaitForExit(); Fiz um teste tbem e funcionou System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "firefox.exe"; proc.StartInfo.Arguments = "http://www.uol.com.br"; proc.Start(); proc.WaitForExit(); Ele abriu o firefox com a pagina da UOL. O que acontece é que o Visualizador de Imagens e Fax do Windows não é um programa .exe, ele é uma .dll Então primeiro eu teria que executar o rundll32.exe e depois passar como argumento a dll que desejo carregar. Depois sim carregar a imagem. Tem alguma ideia de como posso resolver isso? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 11, 2009 Tente dar um Add Reference e apontar para esta dll. Se der certo ja facilita. Se não, terá que descobrir como chamar esta dll no prompt de comando, a chamada será a mesma no seu aplicativo. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Traks 6 Denunciar post Postado Agosto 12, 2009 Bom dia. Eu consegui fazer o addReference para o shimgvw.dll Ele te devolve um objeto PREVIEWLib Dai eu declarei no using PREVIEWLib. Consegui fazer o seguinte: PreviewClass preview = new PreviewClass(); preview.ShowFile("c:/imagem.jpg", 1); Mas não aconteceu nada. Coloquei um breakpoint e ele simplemente passa sem fazer nada. Na internet não se encontra muita coisa sobre esse objeto.... só se encontra pessoas assim como eu que estão na luta para conseguir isso rsrsrsrrs o quase mandando esse negocio abrir no paint ou no IE. hahahahha Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 12, 2009 Ae complico. Minha intenção era chegar onde conseguiu, encontrar os métodos da DLL. Agora qual método chamar complica. Terá que ver os métodos disponiveis e fazer os testes. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Traks 6 Denunciar post Postado Agosto 13, 2009 Sou Brasileiro e ainda estou na luta para conseguir isso huahauhauha O segundo código que eu postei funciona... System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "rundll32.exe"; proc.StartInfo.UseShellExecute = true; proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen"; proc.Start(); proc.WaitForExit(); Com esse código eu consigo abrir o Visualizador de Imagens e Fax do Windows, porem quando eu coloco um caminho, seja ele uma String (c:/imagem.jpg) ou por uma variavel ele não abre nada. Aparece a porcaria da ampulheta do windows e não faz mais nada. dai eu segui a sua dica.... coloquei esse comando no Prompt de comando com o caminho da imagem.... ele abre normalmente. Outra coisa que eu percebi é que eu tentei fazer a imagem abrir no Office Picture Manager.... e acontece o mesmo problema... fica só processando e não abre nada. O codigo abaixo e para fazer abrir com o Office Picture Manager System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "OIS.exe"; proc.StartInfo.UseShellExecute = true; proc.StartInfo.Arguments = "txtDiretorioConta.Text"; proc.Start(); proc.WaitForExit(); Bom espero que isso ainda tenha um final feliz hahahaha Valew Quintelab. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 13, 2009 Já tentou passar o caminho fisico da imagem? Não consegui encontrar no seu código como referencia a imagem. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Traks 6 Denunciar post Postado Agosto 13, 2009 Tentei sim cara.... Desse modo, abre somente o Visualizador de Imagens e Faz do Windows. (Até ai beleza.) System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "rundll32.exe"; proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen"; proc.Start(); proc.WaitForExit(); Quando faço isso: System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "rundll32.exe"; proc.StartInfo.UseShellExecute = true; proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:/DSC05765.JPG"; proc.Start(); proc.WaitForExit(); Não abre nada... nem visualizador... não dá erro... simplemente ameaça a abrir com a ampulheta e não faz nada. Se eu executar isso aqui no CMD.EXE: rundll32.exe c:/windows/system32/shimgvw.dll,ImageView_Fullscreen C:[barra inversa] DSC05765.JPG (Não sei pq quando coloca a barra inversa ele some) Ele abre a imagem normalmente. Sabe que eu estava reparando.... É que no CMD se eu colocar a barra normal ele não abre.... se eu colocar a barra ao contrario ele abre. Nesse caso como posso colocar a barra inversa no C#, já que ele não aceita. Quando coloco uma barra inversa no C# aparece a seguinte mensagem: Unrecognized escape sequence Valew pela forca Quintalab. Compartilhar este post Link para o post Compartilhar em outros sites
Traks 6 Denunciar post Postado Agosto 13, 2009 PQP!! deu certo... nem acredito! uhahuahuahua Acredita que por uma barra não fez o bagulho funcionar! Se você fazer isso aqui: proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:/DSC05765.JPG";Não funciona! Por causa da barra Mas se você fizer isso aqui proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:[duas barras invertidas]DSC05765.JPG";Dá certo!!!!! tem que colocar duas barras invertidas. (Não sei pq some as barras invertidas que eu digito) Valew pela ajuda Quintelab..... Valew pela força! Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 13, 2009 Tranquilo, outra coisa, se quiser ao invés de usar duas barras invertidas pode colocar um @ antes da string. Ficaria assim: proc.StartInfo.Arguments = @"c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:[uma barras invertida]DSC05765.JPG"; Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Traks 6 Denunciar post Postado Agosto 14, 2009 E ai Quintelab... Valew pela dica. você leu a minha mente.... colocar o @ antes da String matou o meu problema de receber o caminho por um Text Box. Valew mesmo Abraços! Compartilhar este post Link para o post Compartilhar em outros sites