Página 1 de 1

Ativar um programa Observer2.exe

Enviado: 25 Out 2020 19:21
por alberto_dias
Prezados amigos,
Estou com o seguinte programa, utilizo o programa para emitir SAT, (Estado de São Paulo)
Uso o Observer2.exe da Daruma,
Uso o Sat Tanca TS 1000,
O que acontece,
Tudo funciona bem, os cupons saem corretamente, Mas, sempre o Mas,
E que de vez em quando um operador, menos avisado, encerra o Observer2.exe da
Daruma que tem que estar ligado, para fazer a comunicação do Kit, Sat Tanca Ts 1000,
com a Impressora Daruma Dr 800.
Eu preciso de um exemplo de como verificar se o Observer2.exe, foi encerrado em antes de
Abrir um novo cupom, ativar o Observer2.exe
Já tentei, o FindWindow, mas acho que não entendi, como funciona, não deu certo,
Seria possível,
Atenciosamente,
Alberto Dias

Ativar um programa Observer2.exe

Enviado: 26 Out 2020 17:48
por ANDRIL
Crie uma chamada para o Observer2.exe coloque no arquivo um método inexistente só para ver a resposta dele. Se ele demorar mais de 10 segundos para criar o retorno informe ao usuário para verificar se ele esta aberto, provavelmente esteja fechado.
Em relação a FIndWindow acho que só funcione se o Observer2 ficar aberto na barra de tarefas do Windows, se ele ficar na bandeja ela não vai conseguir localizar.

Ativar um programa Observer2.exe

Enviado: 26 Out 2020 17:56
por ANDRIL
Outra forma seria listar o que esta sendo executado no Windows, fazendo de cabeça não testei.

Código: Selecionar todos

cmd = "TASKLIST.EXE > saida.txt"
run &(cmd)

if "OBSERVER2.EXE"$upper(memoread(saida.txt))
   WAIT"SENDO EXECUTADO!"
else
   WAIT"NAO ESTA SENDO EXECUTADO!"
endif

Ativar um programa Observer2.exe

Enviado: 28 Out 2020 14:30
por alberto_dias
Andril,
Muito obrigado,
Fiz algumas modificações, ficou bom, consigo verificar se está ativo, e consigo, mandar executar se não estiver
Ficou perfeito,
Muito Obrigado, novamente, este problema já ficou para traz, bora resolver ou outros, :) ;)
Atenciosamente,
Alberto Dias,

Ativar um programa Observer2.exe

Enviado: 02 Nov 2020 10:15
por rubens
Bom dia..

Alberto....
tem como mostrar a solução??

Eu uso as rotinas abaixo para verificar se o abrmonitor.exe está sendo executado... mas as vezes dá um problema danado e o cliente liga pedindo suporte e vejo que o programa acbrmonitor.exe está carregado pelo menos umas 10 vezes na barra de tarefas... mesmo setando o acbrmonitor para executar somente uma vez. Daí só passa o mouse obre o icone e ele fecha sozinho até o ultimo que tem que ser fechado manualmente..
Faço assim:

Código: Selecionar todos

*******************************************************************************
FUNCTION Abre_Acbr( lInternet )
	LOCAL cAcbrFile:= cDirMonitor+'ACBRMONITOR.EXE'
	LOCAL lRetorno := .f.
	
	hb_Default( @lInternet, .t. )  // se consultar ou nao internet antes de verificar acbr
	
	// Verifica se tem internet 
	
	If lInternet
	   If ! IsInternet()
	   	Alert('Sem conexao com a internet !!! Tente mais tarde ...')
	   	Return nil
	  	EndIf
	EndIf
	
	// Se Encontrou o executavel
	// executa 
	If File( cAcbrFile )
	
		HB_RUN( 'START '+cAcbrFile)
		
		// Verifica se esta sendo executado o acbrmonitor.exe
		If EstaRodandoKillExe('acbrmonitor.exe')
			lRetorno := .t.
		Else
			Alert('Nao foi possivel executar o ACBRMONITOR.EXE !!! Chame o suporte t‚cnico...')
		Endif

	Else
		Alert('Nao foi possivel encontrar o arquivo: '+Hb_Eol()+cDirMonitor)
	Endif
	
   RETURN lRetorno
   

*******************************************************************************   
function EstaRodandoKillExe( _cExe, _nKill ) 
/* 
* Verificar se um Exe est  sendo executado e podendo at‚ derrub -lo 
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando 
* 
* Autor: toya 
*/
local Retorno := .f.
local oScriptObj
local oWmiService
local oListaProcess
local oProcessos
 
HB_DEFAULT(@_nKill,0)

oScriptObj 		:= CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService 	:= oScriptObj:ConnectServer()
oListaProcess 	:= oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )

for Each oProcessos in oListaProcess
   Retorno := .t.
   if _nKill == 2
      oProcessos:Terminate() // mata o _cEXE
   endif
next

return Retorno
*******************************************************************************   
function FechaPrograma( _cExe ) 
/* 
* Verificar se um Exe est  sendo executado e podendo at‚ derrub -lo 
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando 
* 
* Autor: toya 
*/
local Retorno := .f.
local oScriptObj
local oWmiService
local oListaProcess
local oProcessos
 
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )

for Each oProcessos in oListaProcess
   Retorno := .t.
	oProcessos:Terminate() // mata o _cEXE
next

return Retorno
Se puder mostrar como resolveu o problema... de repente é uma solução melhor do que a que estou usando ...

Att..
Rubens

Ativar um programa Observer2.exe

Enviado: 02 Nov 2020 12:38
por alberto_dias
Rubens,

Compartilho sim,

Este Fórum, já me ajudou tanto, que não tenho palavras a agradecer, digo até, continuo na programação pela ajuda de vocês, muito obrigado,

Abaixo o código,
codigo.txt
Código retirado de uma sequência,
(3.09 KiB) Baixado 159 vezes
Considerações:

1 - Não coloque extensão no nome do arquivo, no meu exemplo é saidaobs, se eu colocar saidaobs.txt não compila ou não funciona.

2 - Esqueça as minhas anotações sobre o programador, é apenas para "DEBUG", para acompanhar o desenrolar da execução,

Espero que tenha ajudado,

Está funcionando perfeitamente, já testei varias e varias vezes, e está instalado em clientes, e não executa mais de uma vez (isto é ótimo)

Alberto Dias