Utilizando o comando RUN
Moderador: Moderadores
Utilizando o comando RUN
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
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
ssflavio@osite.com.br
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Utilizando o comando RUN
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:
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.
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)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.
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.
Re: Utilizando o comando RUN
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
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
ssflavio@osite.com.br
-
Euclides
- 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
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
Em casos assim, eu utilizava ( há MUITO TEMPO
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
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Utilizando o comando RUN
Apenas para lembrar que o swpruncmd() só funciona com o Blinker.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Euclides
- 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
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
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
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Utilizando o comando RUN
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
xHarbour.org + Hwgui + PostgreSql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Utilizando o comando RUN
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.
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 351 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.
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.
Re: Utilizando o comando RUN
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
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
ssflavio@osite.com.br
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Utilizando o comando RUN
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#p58786acho que me empolguei e acabei perdendo o foco do tópico...
Lá você encontrará muito mais explicações sobre o produto do Maligno.
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.consegui resolver o meu problema.
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.
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.
Re: Utilizando o comando RUN
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
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
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
ssflavio@osite.com.br
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Utilizando o comando RUN
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);
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Utilizando o comando RUN
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 é: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
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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Utilizando o comando RUN
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: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.
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.vbsUm 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.
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.
Re: Utilizando o comando RUN
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 é ?
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.

