Utilizando o comando RUN

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

Utilizando o comando RUN

Mensagem por ssflavio »

Boa Tarde a todos!

Dentro de meu programa, utilizo o comando run para chamar alguns programas externo que ajudam o sitema como um todo.
A dúvida é a seguinte: quando rodo um programa externo, como por exemplo o WORD, o programa em clipper fica aguardando a janela do word ser fechada para ele continuar, como se fosse uma janela modal. Tem como fazer uma chamada a um programa externo e o clipper continuar rodando o que esta fazendo (uma chamada não modal)?

abraços

Flávio
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Utilizando o comando RUN

Mensagem por Pablo César »

Gostei da utilização do termo "modal". Ja tentou executar a sua aplicação desde um arquivo batch ? Ou utilizando o arquivo START do SO ?

Eu fiz uns testes e não ví nada que estivesse prendendo minha aplicação principal, como você menciona. Olhe o meu exemplo:

Código: Selecionar todos

? "pressione uma tecla para chamar o Word"
INKEY(0)
// cRoda:="START C:\ARQUIV~1\MICROS~2\OFFICE11\WINWORD.EXE" 
// cRoda:="START /W C:\ARQUIV~1\MICROS~2\OFFICE11\WINWORD.EXE"
cRoda:="C:\ARQUIV~1\MICROS~2\OFFICE11\WINWORD.EXE"
RUN (cRoda)
? "Retornou a aplicacao Clipper"
INKEY(0)
No exemplo acima, o START.EXE precisei copiar para o diretório onde se encontra a aplicação e o checar o PATH onde se encontra o WINWORD.EXE.

Agora se você estava se referindo a manter o foco da sessão principal, então eu usaria o WINDOW2TOP(VAL(VMYHAND)) da WAPI.LIB do Maligno que retorna a aplicação, mas antes de usar essa função você precisaria antes de executar aplicação Windows, executar o GetMyHandle().

E se optar por utilizar a execução mediante o arquivo batch, daí terias que utilizar o WAPI em modo de linha de comando, veja esta mensgaem: viewtopic.php?f=1&t=5708&p=24095#p24095

Explique qual é a sua situação, pois eu com o primeiro exemplo que postei, não conseguí reproduzir a situação que você apresentou. E se houverem dúvidas, poderei lhe ajudar se postar com detalhes.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

Re: Utilizando o comando RUN

Mensagem por ssflavio »

Pablo,

Antes de mais nada gostaria de agradecer seu empenho e eficiência.
Vamos ver se eu consigo dar uma iluminada na situação:
1. Utilizo o Windows XP SP 3 para rodar minha aplicação
2. Atualmente uso o WORD para visualizar relatórios, criei uma rotina de conversão para RTF, assim resolvo vários problemas de uma só vez, como imprimir em qualquer impressora da rede, gerar arquivos pdf e enviar por email.
3. Coloquei o path do WINWORD no path da máquina

Quando rodo o WORD, tudo funciona corretamente.
O programa em clipper fica aguardando o encerramento do WORD para continuar.
Quando encerro o WORD o meu programa em Clipper volta a funcionar (por isso que fiz referência ao modal)

para rodadar esta aplicação, é perfeito.
Só que estou com uma outra ideia aquí na minha cabeça, que é a apresentação de imágens em uma janela auxiliar, rodando um programa para visualização de imagens chamado IrfanView. Desta forma eu deveria disparar uma chamada ao programa IrfanView e o clipper continuar trabalhando normalmente, nao poderia ficar esperando que a janela da imagem fosse fechada.
Tenho duas aplicações para isso: 1. Mostrar fotos de Produtos; 2. Mostrar documentos digitalizados pelo cliente (ex: canhotos de NF assinados ou de recebimento de mercadorias).

ps. o comando START não funcionou, indica que não foi encontrado. Fiz uma busca no meu C e nao achei nada com o nome START. Será que estou comendo bola????

mais uma vez

OBRIGADO PELA FORÇA

Flávio
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: Utilizando o comando RUN

Mensagem por Euclides »

Flávio,
Em casos assim, eu utilizava ( há MUITO TEMPO :-) ) assim:

swpruncmd("cmd /c start suaimagem.jpg",0,"","")

Não se esqueça de utilizar o FreeTSlice() senão a ´carroça´não anda...
T+
Euclides
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Utilizando o comando RUN

Mensagem por sygecom »

Apenas para lembrar que o swpruncmd() só funciona com o Blinker.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: Utilizando o comando RUN

Mensagem por Euclides »

Ceeerto, Leonardo.
Não utilizando o Blinker, poderia ser:
RUN("cmd /c start dateisleap.txt",0,"","")

... e no caso de Windows 98...
RUN("command /c start dateisleap.txt",0,"","")

acho que isso complementa o assunto
T+ Euclides
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Utilizando o comando RUN

Mensagem por sygecom »

E achoooo que START somente com a Familia NT(não tenho certeza, pois não tenho um 98 para poder testar agora)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Utilizando o comando RUN

Mensagem por Pablo César »

A questão da falta do START.EXE, eu resolví copiando na pasta onde se encontra o sistema, de outra forma precisaria colocar o path onde se encontra. No meu PC com WINXP, também não possuía, pois o CMD.EXE vem substituir o START no XP (seria quase a mesma coisa). Então decidí copiar o START.EXE do WIN98 e funcionou. Mas poderia também utilizar o CMD em troca. Mas como tenha clientes com o meu sistema que ora possuem WIN98 ora WINXP... então optei por copiar o START pis assim garantiria que funcionasse em ambos SO da mesma forma.

Estive fazendo alguns testes e de fato é uma situação dificil de resolver, pois não é sempre que funciona.
A questão de chamar com START /MIN resolve em parte pois a aplicação fica na tela mas não com o foco. Eu coloquei a função do WAPI, mas não é sempre que funciona, ou melhor dito, não sempre se obtém o resultado ideal. Se quiser testar e trabalhar encima, disponibilizei o exemplo em anexo.
Anexos
TESTE14.zip
(144.37 KiB) Baixado 352 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

Re: Utilizando o comando RUN

Mensagem por ssflavio »

Gostaria de agradecer a força recebida de todos!!!

consegui resolver o meu problema.

O Pablo fez uma referencia a biblioteca WAPI, inclusive me mandou a lib e o executavel.
Eu já tinha visto referencias a esta biblioteca, para saber se a janela está maximizada ou nao e para setar o foco em determinada janela.
Achei muito legal esta biblioteca, estou dando uma estudada nela.
Não entendi direito, primeiro rodo o WAPI.EXE e depois rodo a aplicacao que contem a biblioteca WAPI?

acho que me empolguei e acabei perdendo o foco do tópico...

abraços

Flávio
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Utilizando o comando RUN

Mensagem por Pablo César »

acho que me empolguei e acabei perdendo o foco do tópico...
Oi Flávio, para te responder esses detalhes sobre a WAPI, postei uma mensagem no tópico da WAPI: viewtopic.php?f=39&t=4328&p=58786#p58786

Lá você encontrará muito mais explicações sobre o produto do Maligno.
consegui resolver o meu problema.
Você Flávio verificou se funcionou todas as vezes que executou o exemplo. Como foi que resolveu ? Como eu tinha dito na minha mensagem anterior, não conseguí obter o foco da sessão em todas as tentativas (algumas vezes funcionava outras não, por isso repetí o WINDOW2TOP(nMyHandl). Acho que você conseguiu um resultado melhor ao chamar sua aplicação GUI em modo minimizado através do START.EXE, certo ? Experimente utilizar o meu exemplo em modo janelado e nos dê um retorno.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

Re: Utilizando o comando RUN

Mensagem por ssflavio »

Pablo,

Desculpa a demora para te responder.
Inicialmente fiz um teste rápido e achei que funcionava corretamente, e realmente não voltava o foco.
Eu não usava nem conhecia a WAPI. Tive que baixa-la e dar uma estudada para utiliza-la e principalmente link-editala junto com o programa (tem o macetinho da CaTools).
Realmente o problema do foco é um caso sério. Fiz vários testes, até que cheguei numa configuração aceitavel
aApp := GetAppsInfo()
window2top(nMyHandl)
window2top(nMyHandl)
Aparentemente o SO tem que ter um tempo para poder fazer o foco de uma janela. Sei lá acho que estou é viajando....
Estou enviando o teste que fiz para voce dar uma olhada.

Bom final de semana

Flávio
Pablo.rar
exemplo que funcionou
(52.42 KiB) Baixado 510 vezes
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Utilizando o comando RUN

Mensagem por Pablo César »

Legal Flavio seu exemplo, funcionou mas somente com a sessão da aplicação Clipper em modo janelado, não funciona em modo tela cheia. Outra coisa estranha foi a utilização repetida (dois comandos seguidos de window2top(nMyHandl)), talvez isto o Maligno possa nos dizer a razão de não funcionar quando usamos apenas um window2top(nMyHandl) (vou mandar uma MP para ele ler este tópico).

A sua teoria de que o aplicativo GUI precisava de um certo tempo para abrir e depois executar o window2top(nMyHandl) talvez você esteja certo mesmo, pois eu experimentei em lugar de aApp := GetAppsInfo() que tem no seu exemplo, eu substitui por INKEY(0.1) ou até pode ser aumentado essa espera, inclusive bem propicia a exibição até determinado tempo e retornar a aplicação: e funcionou.

A outra questão de eliminar as sessões após o ESC, foi uma incrementação de boa utilização, pois foi bom você conhecer o WAPI, então.

Pena que o WAPI ainda não possua função que obtenha o modo de exibição da sessão, isto é que detecte se a sessão está em modo janelado ou fullscreen... Maligno prometeu analisar e investigar, mas parece que não é uma coisa fácil. A minha dica estava em fazer em C++ que verifique as propriedades da janela para saber se existe em modo janelado e não existe em modo fullscreen. Também em verificar em determinada posição da tela se é texto ou não. Sei lá são ideías apenas eu ainda não estou prático em C++ para fazer testes e chegar a alguma conclusão. Em outro fórum menciona alguns comandos para aplicar o ALT ENTER, não sei se funcionaria, porque primeiramente precisamos saber se está em tela cheia ou não. Os comando indicados para o fim de produzir o ALT ENTER é:

keybd_event(VK_MENU,(BYTE)0,0,0);
keybd_event(VK_ENTER,(BYTE)0,0,0);
keybd_event(VK_ENTER,(BYTE)0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,(BYTE)0,KEYEVENTF_KEYUP,0);
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Utilizando o comando RUN

Mensagem por Pablo César »

Em outro fórum menciona alguns comandos para aplicar o ALT ENTER, não sei se funcionaria, porque primeiramente precisamos saber se está em tela cheia ou não. Os comando indicados para o fim de produzir o ALT ENTER
E agora ja existe conhecido agora no fórum que reproduz as teclas e vocês podem baixar em: http://www.richpasco.org/utilities/keystuff.zip e a sintaxe é:

KEYSTUFF ALT-ENTER

Seja na linha de comando ou dentro do nosso aplicativo irá reproduzir as telcas ALT ENTER

Espero ter ajudado e desculpem ter ressucitado o post...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Utilizando o comando RUN

Mensagem por Pablo César »

Pablo César escreveu:No exemplo acima, o START.EXE precisei copiar para o diretório onde se encontra a aplicação e o checar o PATH onde se encontra o WINWORD.EXE.
Achei mais uma forma de abrir o Word sem precisar informar o path onde se encontra o WinWord.exe, utilizando VBS e ao mesmo tempo abre uma sessão própria que poderá ser executada pelo comando RUN, assim:

Código: Selecionar todos

#define  CRLF      CHR(13)+CHR(10)

memowrit("teste.vbs","set WshShell = WScript.CreateObject("+chr(34)+"Wscript.Shell"+chr(34)+")"+CRLF+"WshShell.Run("+chr(34)+"Winword.exe Meu_documento.doc"+chr(34)+")"+CRLF)
run wscript teste.vbs
E dessa forma também não há necessidade da utilização do START.EXE
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Utilizando o comando RUN

Mensagem por billy1943 »

Uma forma bem simples de usar o RUN seria com o comando CMD, conforme segue.

Localize em qualquer pasta de sua máquina um arquivo de formato .RTF.
Nesse diretório, estando no prompt do DOS, digite somente isso:

CMD /C arquivo.rtf <enter>


O que acontece ?

O Word é aberto e o arquivo .RTF fica pronto para edição, impressão etc.

Se você usar um arquivo de formato .XLS quem abrirará será o EXCEL.
E assim, com todos os principais tipos de arquivos administrados pelo Windows.

Basta criar uma variável com o conteúdo:

crun := "cmd /c " + arquivo_a_usar // onde arquivo_a_usar é o arquivo que será impresso no programa Windows
// correspondente ao seu formato, gerado/criado pela sua aplicação
! (crun)


Simples, não é ?
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Responder