Página 2 de 2
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 08 Nov 2011 00:33
por cjp
Meu caro, me desculpe, mas vou ter que incomodá-lo de novo com isso. Esta função às vezes funciona, às vezes não. Não sei explicar por quê. Fiz dezenas de teste. Só consegui determinar que, na maioria das vezes que eu chamo o bat do Agendador de Tarefas, ele não funciona. Quando eu executo diretamente via prompt do Dos, às vezes funciona, às vezes não. Não consigo entender por que.
O bat está redigido assim:
Código: Selecionar todos
@echo off >nul
wapi -getmyhandle:myhand.txt
txwapi.exe
e-mail.exe
O programa txwapi está redigido assim:
Código: Selecionar todos
function main()
han := {}
aadd(han,{"numero", "C", 20, 0})
dbcreate("hand",han)
use hand
append from myhand.txt sdf
go 1
Cnrhand=alltrim(numero)
!wapi -setbuttonx:off;Cnrhand
return
Será que tem algo errado?
Programa em xHarbour chamado via Agendador de Tarefas
Enviado: 08 Nov 2011 08:59
por Pablo César
Realmente da forma que foi feita não funcionava. Acredito que deve ser por duas razões:
1. No seu exemplo, ao executar o wapi -getmyhandle:myhand.txt (sem o path) deve estar criando o arquivo em alguma área restrita do Windows, isto porque o agendador de tarefas não está na pasta corrente. Então veja como que fiz no arquivo bat:
Código: Selecionar todos
@echo off
wapi -getmyhandle:C:\NOME_DA_PASTA_DO_PROGRAMA\myhand.txt
Observe que removí >nul que estava ao lado do echo off (não tem necessidade isso). Também observe que foi colocado o caminho completo onde está a aplicação.
2. No seu código, ao executar o !wapi -setbuttonx:off;Cnrhand na verdade o myhand não estaria sendo substituído pelo seu valor, isto porque está sendo executado na linha de comando. Então veja como que fiz no prg:
Código: Selecionar todos
Cnrhand=ALLTRIM(MEMOREAD("C:\NOME_DA_PASTA_DO_PROGRAMA\MYHAND.TXT"))
Roda:="WAPI -SETBUTTONX:off;"+Cnrhand
RUN (Roda)
Observe que o roda fica constituído por strings já concatenando a variável Cnrhand. Também observe que foi colocado o caminho completo onde está a aplicação e a criação do dbf não foi necessária, isso pode evitar maiores problemas, ao final de contas o txwapi.exe é para ler o arquivo MYHAND.TXT e não criar nada.
Aqui funcionou perfeitamente. Veja se resolveu.
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 08 Nov 2011 09:07
por Pablo César
Ahh lembrei de perguntar:
Esse e-mail.exe, ele não abre outra janela, não é ? Este aplicativo é em modo console e não abre uma nova janela ?
Porque se abrir uma nova janela, você precisaria saber o novo handle dessa nova janela, no caso. Daí teríamos que fazer algo direto no e-mail.exe. Ok ?
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 09 Nov 2011 00:23
por cjp
Meu caro, vc tinha toda razão; estava errado o repasse da variável para o wapi mesmo.
Fiz todas as correções que vc mandou. Agora a situação está assim: sempre funciona se eu rodo direto do prompt do Dos, mas nunca funciona se rodado do Agendador de Tarefas do Windows.
O e-mail não está abrindo nova janela não. É um programinha bem simples, que apenas verifica se outro programa está rodando, registrando isso numa base de dados.
Será que ainda tem algo errado na minha função?
Agradeço sua ajuda.
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 09 Nov 2011 08:22
por Pablo César
sempre funciona se eu rodo direto do prompt do Dos, mas nunca funciona se rodado do Agendador de Tarefas do Windows
Deve ser porque não encontra o WAPI. Lembre o agendador de tarefas não é executado na mesma pasta que o programa está. Então alterei a linha onde compõe o Roda, coloquei o caminho onde se encontra o WAPI.EXE.
Cnrhand=ALLTRIM(MEMOREAD("C:\NOME_DA_PASTA_DO_PROGRAMA\MYHAND.TXT"))
Roda:="
C:\NOME_DA_PASTA_DO_PROGRAMA\WAPI -SETBUTTONX:off;"+Cnrhand
RUN (Roda)
Adicione o caminho e me diga se funciona.
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 09 Nov 2011 13:34
por cjp
Mas colocando no bat inicialmente CD\MINHAPASTA, não deveria resolver?
De qualquer forma, fiz como vc disse, mas ainda não funcionou.
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 09 Nov 2011 15:12
por Pablo César
Mas colocando no bat inicialmente CD\MINHAPASTA, não deveria resolver?
Pois é... deveria resolver... mas... não sei porque cargas d'águas isso não funciona. Então decidí fazer os testes e percebí que mesmo mudando o agendador de tarefas para que execute um arquivo batch este é executado com um tal de C:\WINDOWS\System32\svchost.exe então decidí colocar os arquivos lá... mas também não adiantou.
Daí utilizei outra opção do WAPI.EXE que lista todos os programa em execução com seu devidos handles e capturei o numero do handle que dizia: C:\WINDOWS\System32\svchost.exe e uola !
Então amigo, você pode incluir esta rotina no seu aplicativo e-mail.exe diretamente:
Código: Selecionar todos
#define _kEOL Chr(13)+Chr(10)
RUN ("WAPI -GETAPPSINFO:C:\WINDOWS\SYSTEM32\APPS.TXT")
ctEXTO:=ALLTRIM(MEMOREAD("C:\WINDOWS\SYSTEM32\APPS.TXT"))
while (i := At(_kEOL,cTexto)) > 0
cLine := Left(cTexto,i-1)
cTexto := SubStr(cTexto,i+2)
i := At(",",cLine)
IF "C:\WINDOWS\System32\svchost.exe" $ SubStr(cLine,i+1)
Cnrhand:=Left(cLine,i-1)
ENDIF
enddo
RUN ("WAPI -SETBUTTONX:off;"+Cnrhand)
/*
De aqui em mais segue o seu programa e-mail normalmente
*/
Só que certifique-se que o seu Windows e o svchost.exe esteja como o meu, o que estaria com a instalação normal de um XP. Acho que agora vai dar certo, pois comigo aqui deu certo sim !
Sóque não me pergunte por quê não funcionou com as indicações anteriores: pois não sei responder direito.
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 10 Nov 2011 02:50
por cjp
Funcionou, meu caro.
Muito obrigado.
programa em xHarbour chamado via Agendador de Tarefas
Enviado: 15 Nov 2011 09:18
por Pablo César
cjp escreveu:Será que vc me ajudaria a resolver outro problema semelhante
Você ja tinha postado a mesma pergunta o que também caracterizou desvio de assunto. Veja aqui como novo tópico seu:
https://pctoledo.org/forum/viewto ... 205#p72205