Página 1 de 2

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 29 Set 2014 14:40
por billy1943
Como eu uso aplicações criadas pelo XHarbour de dentro do Clipper, por exemplo, acesso à Internet via Internet Explorer, esses processos "parecem" continuar em aberto na memória,
tanto que na primeira vez de uso funciona de acordo mas a partir de outras chamadas, começam a dar as tradicionais mensagens que "O Internet Explorer parou de funcionar", etc.

No Clipper, minha aplicação continua normalmente após fechar a rotina em Windows.
Coloquei nele uma rotina (Process_Win32_Kill) sugerida na página do XHarbour mas pelo jeito não deu certo.
O tópico de onde a tirei é o seguinte:

https://pctoledo.org/forum/viewto ... ill#p55576

O Internet Explorer fica prejudicado em alguma coisa.

O que eu posso fazer no XHarbour ?

Como não sou versado em XHarbour não conheço as funções que poderiam descarregar a rotina da memória, mas deve ter alguma, presumo.
Para melhor análise de entendidos no Xharbour, coloco abaixo uma das rotinas utilizadas, obtidas nos exemplos do XHarbour.
Ela procura pelo IE (gostaria que fosse pelo Chrome direto) a localização de um endereço, obtido do cadastro de clientes em uso.

Código: Selecionar todos

#include "inkey.ch"

***************
FUNCTION main(rua, cidade, uf)
***************

local oMapa, mde_uf, mpara_uf, mde_cid, mpara_cid, mde_rua, mpara_rua, mweb
setmode(25,80)
setcolor('w+/b,g+/n,,,bg+/b' )
set cursor on
cls

do while .t.

   if pcount() == 0
      mpara_uf  := space(2)
      mpara_cid := space(40)
      mpara_rua := space(50)
   else
      mpara_uf  := "SP" // uf
      mpara_cid := cidade
      mpara_rua := rua
   endif

   @ 11, 01 say "PROCURAR :"
   @ 13, 01 say "Estado ..:" get mpara_uf  picture "@!"
   @ 14, 01 say "Cidade ..:" get mpara_cid picture "@!"
   @ 15, 01 say "Endere‡o :" get mpara_rua picture "@!"
   read

   if lastkey() == K_ESC
      exit
   endif

   mpara_uf  := alltrim( mpara_uf )
   mpara_cid := alltrim( mpara_cid )
   mpara_rua := alltrim( mpara_rua )
   msearch := mpara_rua + " " + mpara_cid + " " + mpara_uf
   try
   oMapa := GetActiveObject( "InternetExplorer.Application" )
   catch
   try
   oMapa := CreateObject( "InternetExplorer.Application" )
   catch
   Alert( "ERRO ! Internet Explorer nÆo dispon¡vel")
   return
   end
   end
   mweb := "http://google.com.br/search?q=" + msearch + "&oq=" + ;
            msearch + "&aqs=chrome" 

   oMapa:Visible := .t.
   oMapa:Navigate( mweb )
   exit

enddo

setmode(25,80)
set cursor off
return
Outra coisa:
Quando a aplicação retorna ao DOS/Clipper, toda os acentos gráficos e cedilhas da tela, foram para o espaço.
Tem como evitar isto, informando que eu uso o Windows 7 Ultimate ?

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 30 Set 2014 13:03
por Kapiaba
Ola, teste assim, e diga o que acontece... abs.

Código: Selecionar todos

#include "inkey.ch"

FUNCTION main(rua, cidade, uf)

   local oMapa, mde_uf, mpara_uf, mde_cid, mpara_cid, mde_rua, mpara_rua, mweb

   setmode(25,80)
   setcolor('w+/b,g+/n,,,bg+/b' )
   set cursor on

   cls

   HB_GCALL( .F. )  // Limpa o Lixo da  Memoria, se Existir.

   if pcount() == 0
      mpara_uf := space(2)
      mpara_cid := space(40)
      mpara_rua := space(50)
   else
      mpara_uf := "SP" // uf
      mpara_cid := "SAO PAULO" //cidade
      mpara_rua := "RUA ROCHA" //rua
   endif

   @ 11, 01 say "PROCURAR :"
   @ 13, 01 say "Estado ..:" get mpara_uf picture "@!"
   @ 14, 01 say "Cidade ..:" get mpara_cid picture "@!"
   @ 15, 01 say "Endere‡o :" get mpara_rua picture "@!"
   read

   if lastkey() == K_ESC
      return nil
   endif

   mpara_uf := alltrim( mpara_uf )
   mpara_cid := alltrim( mpara_cid )
   mpara_rua := alltrim( mpara_rua )
   msearch := mpara_rua + " " + mpara_cid + " " + mpara_uf

   try
        oMapa := GetActiveObject( "InternetExplorer.Application" )
     catch
        try
           oMapa := CreateObject( "InternetExplorer.Application" )
        catch
           Alert( "ERRO ! Internet Explorer nÆo dispon¡vel")
        return
      end
   end

   mweb := "http://google.com.br/search?q=" + msearch + "&oq=" + ;
      msearch + "&aqs=chrome"

   oMapa:Visible := .t.
   oMapa:Navigate( mweb )

   setmode(25,80)
   set cursor off

return Nil

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 30 Set 2014 14:59
por billy1943
Olá Kapiaba,


Inclui a linha destinada a tirar o lixo da memória mas o problema persiste, inclusive porque como eu não havia desligado o computador, no gerenciador de tarefa existiam vários
processos que eu não sei o que fazem e que podem estar dando conflito com o Internet Explorer, que, reafirmo não é o meu navegador padrão.

Várias vezes em outras oportunidades o IE deixa de funcionar sem explicação alguma, e, por isso é que uso o Chrome, pois se der algum problema ele consegue restaurar.

Pergunto eu, não abusando do amigo:

Não tem como trocar o IE pelo Chrome para ter acesso à Internet nas rotinas desenvolvidas pelo XHarbour ?


Abraços e obrigado pela dica.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 30 Set 2014 16:18
por Kapiaba
Olá, tem alguma coisa errada ai.. Testei aqui, mesmo em FIVEWIN, funciona de boa.

Estou inclusive criando uma função em FIVEWIN igualzinha a sua e tá ficando show(), e usando ACTIVEX, eu disparo direto para o Google Chrome, não sei como usar ACTIVEX em xHarbour no modo console. Lamento.

Não deveria ter nenhum efeito no seu IE, mesmo porque o programa somente o chamou e nem Looping tem.

abs.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 01 Out 2014 12:24
por Kapiaba
Billy, aqui tem um exemplo em FiveWin, baseado na sua idéia.

Se quiser ver funcionando em Modo Windows, avise-me.

http://fivewin.com.br/index.php?/topic/ ... a-activex/

Obg. abs.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 01 Out 2014 13:39
por billy1943
Olá Kapiaba,

Vi no fórum do FiveWin o exemplo baseado na minha sugestão, somente como eu ainda não tenho nada de FiveWin, pediria a você um favor de:

1. compilar o exemplo enviado no início deste tópico, onde eu mando os 3 parâmetros (endereço, cidade e estado), visto que não quero digitá-los, no formato do FiveWin, para que funcione
com o Chrome;

2. disponibilizar, neste tópico, o executável gerado (mande-o arjeado ou renomeado para .TXT, senão não passa)


Aí sim poderei testá-lo conjuntamente com o meu sistema, e, se der certo como julgo que dê, vou procurar ter uma instalação mesmo que para iniciante do FiveWin, para compilar esta e
outras aplicações, com mais vagar.

P.S. fica o meu agradecimento pelos colegas programadores que participaram do fórum do FiveWin, por citarem este Clippeiro como autor da sugestão, mas o que fiz foi simplesmente agregar
mais uma facilidade ao que já havia sido criado.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 01 Out 2014 14:17
por Kapiaba
Vou deixar um pedido para o amigo Rochinha compilar e disponibilizar para você, é mais fácil, eu ainda não sei usar muito bem este forum.

Obg. abs.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 02 Out 2014 09:55
por billy1943
OI, Kapiaba

É muito simples você nos disponibilizar o arquivo que solicitei ou qualquer outro arquivo:

1. Faça uma cópia do seu executável, por exemplo, MAPA_GOOGLE.EXE, para, por exemplo, MAPA.TXT
2. Toda vez que você está criando um novo tópico, aparece em baixo do corpo da resposta, duas abas (Opções e Anexar Arquivo)
3. Escolha "Anexar arquivo"
4. Localize a pasta onde está o arquivo, anexe-o e envie-o para o Fórum
5. O arquivo vai aparecem abaixo do texto do tópico criado onde os usuários poderão baixá-lo facilmente
6. Por regra, alguns tipos de arquivo não são aceitos (.EXE, .COM,.BMP, etc) motivo pelo qual sugiro mandá-lo como .TXT
7. Uma vez baixado, basta renomeá-lo para .EXE que ele funciona.
8. Se quiser pedir para o Rochinha, tenho também certeza de que ele nos atenderá.

Abraços

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 02 Out 2014 10:35
por Kapiaba
Ok. Obg. Tentando anexar o arquivo Google.zip completo para ser baixado por todos.

abs.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 02 Out 2014 15:11
por billy1943
Oi, Kapiaba

Baixei e agradeço pela atenção.

Vou tentar colocar o Fivewin em funcionamento tão logo encontre uma versão mais atualizada de que tenho (a minha deve ser de 2005).

O programa funcionou certinho.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 02 Out 2014 15:17
por Kapiaba
Billy, FiveWin é pago, você pode comprá-lo na VIRTUAL OBJECTS INFORMÁTICA, representante oficial do FiveWin no Brasil. A última versão, está simplesmente maravilhosa.

Email:

gilmer@fivewin.com.br

http://fivewin.com.br/

A/C.: Sr. Gilmer Tavares.

Quando quiser aprender, estamos à disposição, aqui e no forum fivewin brasil.

abs.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 02 Out 2014 22:47
por rochinha
Amiguinhos,
Vou deixar um pedido para o amigo Rochinha compilar e disponibilizar para você, é mais fácil, eu ainda não sei usar muito bem este forum.
O que posso fazer? o que devo compilar.

Billy1943

modifique o comando padrão de saida forçada, QUIT. Coloque no inicio de seu .PRG:

Código: Selecionar todos

...
      #command QUIT => ( PostQuitMessage( 0 ), __Quit() )
...
function main(...
E no final coloque:

Código: Selecionar todos

...
	   oMapa:Visible := .t.
	   oMapa:Navigate( mweb )
	 
	   setmode(25,80)
	   set cursor off

        QUIT // forçar o fechamento do aplicativo
	 
	return Nil

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 04 Out 2014 10:19
por billy1943
Oi, Rochinha

A função PostQuitMessage utilizada como abaixo, está dando erro.

Código: Selecionar todos

 #command QUIT => ( PostQuitMessage( 0 ), __Quit() )
Ela faz parte da XHarbour, onde estou compilando o exemplo ?

O QUIT normal está funcionando ou ao menos não apresenta erro algum.

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 04 Out 2014 11:59
por Jairo Maia
Olá Pessoal,

Apenas um palpite: Com base no primeiro exemplo postado pelo Billy neste tópico, antes do comando EXIT, ele não tem que matar o processo aberto?

Ao invés de:

Código: Selecionar todos

oMapa:Visible := .t.
oMapa:Navigate( mweb )
exit
Não deveria ser assim?:

Código: Selecionar todos

oMapa:Visible := .t.
oMapa:Navigate( mweb )
oMapa:Quit()  // aqui matar o processo?
exit

Fechar aplicações Windows chamadas pelo Clipper

Enviado: 04 Out 2014 15:53
por billy1943
Olá Jairo

Da forma como você apresentou não dá nem tempo de ver nada do que o IE apresenta e já fecha a janela.
Pode ser que o erro que estava dando no IE fosse por algum "malware", mas está funcionando bem.
Para evitar que a(s) janelas do IE pudessem se acumular e possivelmente travá-lo, coloquei um alerta no programa que o chama e após coloquei o comando oMapa:Quit()
O final da rotina foi modificado e está assim agora:

Código: Selecionar todos

   oMapa:Visible := .t.
   oMapa:Navigate( mweb )
   exit

enddo

Alert("Como a janela do IE ficou, será fechada agora.")
oMapa:Quit() 
setmode(25,80)
set cursor off
return
Muito Obrigado.

Abraços