Função WaitRUN para Harbour
Moderador: Moderadores
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Função WaitRUN para Harbour
Colegas do fórum,
Após vários meses afastado do fórum (e das atividades), estou com vagar retomando minha rotina, e espero breve poder também ajudar quando possível.
Estou dando continuidade na migração de um sistema usando Harbour 3.0, e gostaria de saber em qual lib posso encontrar a função WAITRUN().
Procurando pela solução que preciso, encontrei neste fórum este tópico: https://pctoledo.org/forum/viewto ... it=waitrun
Nele, o colega Itamar disse haver esta função em outras libs além do FIVEWIN, inclusive para Harbour, mas não disse qual seria esta lib. Gostaria de saber se algum colega sabe qual lib em harbour posso encontrá-la.
Agradeço qualquer dica.
Após vários meses afastado do fórum (e das atividades), estou com vagar retomando minha rotina, e espero breve poder também ajudar quando possível.
Estou dando continuidade na migração de um sistema usando Harbour 3.0, e gostaria de saber em qual lib posso encontrar a função WAITRUN().
Procurando pela solução que preciso, encontrei neste fórum este tópico: https://pctoledo.org/forum/viewto ... it=waitrun
Nele, o colega Itamar disse haver esta função em outras libs além do FIVEWIN, inclusive para Harbour, mas não disse qual seria esta lib. Gostaria de saber se algum colega sabe qual lib em harbour posso encontrá-la.
Agradeço qualquer dica.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Função WaitRUN para Harbour
Ola!
Saudações,
Itamar M. Lins Jr.
Outra função para abrir html,etc...* harbour/source/rtl/hbprocfn.c
+ added .prg function:
hb_processRun( <cCommand>, [ <cStdIn> ], [ @<cStdOut> ], ;
[ @<cStdErr> ], [ <lDetach> ] ) -> <nResult>
This function is implemented for all builds also in DOS ones where
temporary files are used to simulate pipes.
TODO: in OS2 builds it should be possible to implement this function
without temporary files just like in *nixes and MS-Windows builds.
I would like to ask OS2 users to make it.
Código: Selecionar todos
****************************
Function mRun(cComando,lFlag)
****************************
*
*
Local oShell,lRet
lFlag := if( lFlag = NIL, .F., lFlag )
oShell:=Win_OleCreateObject("WScript.Shell")
lRet :=oShell:Run("%ComSpec% /c " + cComando, 0, lFlag)
oShell:=Nil
Return iif(lRet=0,.t.,.f.)
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Função WaitRUN para Harbour
Olá Itamar,
Obrigado por sua resposta.
A função hb_processRun() não consegui usar. O comando é executado, mas aparece a janela preta do DOS, e não fica legal. Pesquisei para entender os parâmetros, e não encontrei.
A segunda função que vc passou, é idêntica a que o Leonardo havia postado no link que citei, e que eu não havia conseguido sucesso antes. Ocorre que hoje, após sua postagem, resolvi insistir, e com uma pequena modificação na minha função TUDO funcionou CORRETAMENTE, incluido retorno de erro (que provoquei), e emitir a mensagem de insucesso.
Obrigado a todos,
Problema Resolvido!
Obrigado por sua resposta.
A função hb_processRun() não consegui usar. O comando é executado, mas aparece a janela preta do DOS, e não fica legal. Pesquisei para entender os parâmetros, e não encontrei.
A segunda função que vc passou, é idêntica a que o Leonardo havia postado no link que citei, e que eu não havia conseguido sucesso antes. Ocorre que hoje, após sua postagem, resolvi insistir, e com uma pequena modificação na minha função TUDO funcionou CORRETAMENTE, incluido retorno de erro (que provoquei), e emitir a mensagem de insucesso.
Obrigado a todos,
Problema Resolvido!
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Função WaitRUN para Harbour
Aproveitando o tópico gostaria de saber como faço para converter os comandos abaixo para Harbour
no Clipper funcionava beleza depois que converti par harbour em modo console não funciona mais. Uso esse comando para manter um arquivo de log sempre atualizado. A cada execução coleto os dados de um PABX via porta serial e coloco em um arquivo temporário cdpabx.lxx depois pegava o arquivo de log antigo e acrescentava o arquivo novo ao final dele e depois apagava o arquivo temporário. alguém pode me dar uma idéia de como fazer isso com o harbour? Já tentei com waitRun() e com MYRUN() mas não dar certo apresenta um erro e o programa fecha não dar para ler qual é o erro.
Obrigado
Thon Melo
Código: Selecionar todos
!copy CDPABX.LOG+CDPABX.LXX CDPABX.LOG >NUL
!del CDPABX.LXX >NUL
Obrigado
Thon Melo
Função WaitRUN para Harbour
Tente isso:
MyRun("CDPABX.LOG+CDPABX.LXX CDPABX.LOG")
FErase("CDPABX.LXX")
Ou
MyRun("DEL CDPABX.LXX")
MyRun("CDPABX.LOG+CDPABX.LXX CDPABX.LOG")
FErase("CDPABX.LXX")
Ou
MyRun("DEL CDPABX.LXX")
Código: Selecionar todos
#include "hbcompat.ch"
FUNCTION MYRUN( cComando )
LOCAL oShell, lOk:=.T.
TRY
oShell:=CreateObject( "WScript.Shell" )
CATCH
TRY
oShell:=CreateObject( "WScript.Shell" )
CATCH
lOk:=.F.
END
END
IF lOk
TRY
oShell:Run( "%comspec% /c " + cComando, 0, .T. )
CATCH
lOk:=.F.
END
oShell:=Nil
ENDIF
RETURN lOk
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Função WaitRUN para Harbour
Obrigado asimoes
Deu certo só acrescentei assim:
MyRun("copy CDPABX.LOG+CDPABX.LXX CDPABX.LOG >NUL")
DELETE FILE("CDPABX.LXX")
Uma das mensagem de erro que aparecia era que o arquivo esta sendo utilizado por outro processo. Percebi que não tinha fechado o arquivo com o comando SET PRINTER TO.
Valeu ...
Deu certo só acrescentei assim:
MyRun("copy CDPABX.LOG+CDPABX.LXX CDPABX.LOG >NUL")
DELETE FILE("CDPABX.LXX")
Uma das mensagem de erro que aparecia era que o arquivo esta sendo utilizado por outro processo. Percebi que não tinha fechado o arquivo com o comando SET PRINTER TO.
Valeu ...
Função WaitRUN para Harbour
Ih, esqueci do COPY, ainda bem que funcionou.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Função WaitRUN para Harbour
Ola, Jairo Maia,
tentei usar a funcao myrun() para executar programas externos eliminando a tela preta que "pisca", mas ainda nao consegui.
no meu caso da erro de compilacao,
undefined reference to hb_fun_createobject, será que tenho q incluir alguma lib ?
quais #includes vc esta usando, vale dizer que estou usando harbour 3.1
Abracos,
ABEL
tentei usar a funcao myrun() para executar programas externos eliminando a tela preta que "pisca", mas ainda nao consegui.
no meu caso da erro de compilacao,
undefined reference to hb_fun_createobject, será que tenho q incluir alguma lib ?
quais #includes vc esta usando, vale dizer que estou usando harbour 3.1
Abracos,
ABEL
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Função WaitRUN para Harbour
viewtopic.php?f=4&t=13108
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Função WaitRUN para Harbour
funcionou acrescentando na compilacao
-lxhb
-lhbwin
function myrun()
agora nao pisca mais a tela preta.
Abracos e valeu pelas dicas ...
Abel
-lxhb
-lhbwin
function myrun()
agora nao pisca mais a tela preta.
Abracos e valeu pelas dicas ...
Abel
Função WaitRUN para Harbour
Ola pessoal,
apos conseguir utilizar o comando myrun e evitar a tela preta e piscava com a ajuda de voces, preciso novamente de mais um empurranzinho, quando a execucao de programas externos pelo harbour.
tenho em uma das minhas rotinas o seguinte:
MYRUN("ARJ.EXE A -VA -R BACKUP *.DBF *.MEM *.TXT")
O que ocorre é que ao executar este comando utilizando o myrun, ele nao exibe o andamento da compactacao para
que o cliente veja alguma mensagem de erro., vale dizer que ele executa perfeitamente o comando mas eu nao
vejo o andamamento.
seria possivel executar um programa externo msdos e ver o andamento, uma vez que estou compilando com os parametros -GUI e meu sistema era modo console totalmente procedural ?
Agradeco antecipadamente...
ABEL
apos conseguir utilizar o comando myrun e evitar a tela preta e piscava com a ajuda de voces, preciso novamente de mais um empurranzinho, quando a execucao de programas externos pelo harbour.
tenho em uma das minhas rotinas o seguinte:
MYRUN("ARJ.EXE A -VA -R BACKUP *.DBF *.MEM *.TXT")
O que ocorre é que ao executar este comando utilizando o myrun, ele nao exibe o andamento da compactacao para
que o cliente veja alguma mensagem de erro., vale dizer que ele executa perfeitamente o comando mas eu nao
vejo o andamamento.
seria possivel executar um programa externo msdos e ver o andamento, uma vez que estou compilando com os parametros -GUI e meu sistema era modo console totalmente procedural ?
Agradeco antecipadamente...
ABEL
Função WaitRUN para Harbour
.
Para esse caso: voltar ao: HB_RUN ( sCMD )
.
Para esse caso: voltar ao: HB_RUN ( sCMD )
.
Código: Selecionar todos
sCMD := "ARJ.EXE A -VA -R BACKUP *.DBF *.MEM *.TXT"
HB_RUN ( sCMD )
M., Ronaldo
by: IMATECH
IMATION TECNOLOGIA
by: IMATECH
IMATION TECNOLOGIA
Função WaitRUN para Harbour
jovemxxx,
me diz uma coisa, usei o hb_run e rodou perfeitamente (arj), mas abriu uma outra janela msdos executou e depois fechou.
é assim mesmo ? na janela do meu sistema q agora esta compilado com -gui nao tem como apresentar o andamento da compactacao ?
Abracos,
ABEL
me diz uma coisa, usei o hb_run e rodou perfeitamente (arj), mas abriu uma outra janela msdos executou e depois fechou.
é assim mesmo ? na janela do meu sistema q agora esta compilado com -gui nao tem como apresentar o andamento da compactacao ?
Abracos,
ABEL
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Função WaitRUN para Harbour
Abel você pode usar a função do Harbou HB_ZipFileCreate nela tem um parâmetro que você coloca o nome da função que serve para controlar o andamento do zipar e unzipar. Eu não encontrei exemplo em modo console para te mostrar, mas aqui tem um em Minigui que você pode adaptar:
O exemplo completo em GUI você pode ver em: C:\MiniGUI\SAMPLES\BASIC\Zip_3\demo.prg
Código: Selecionar todos
#command COMPRESS [ FILES ] <afiles> ;
TO <zipfile> ;
BLOCK <block> ;
[ <ovr: OVERWRITE> ] ;
[ <srp: STOREPATH> ] ;
[ PASSWORD <password> ] ;
=> ;
COMPRESSFILES ( <zipfile> , <afiles>, <block> , <.ovr.> , <.srp.> , <password> )
Function Main
// chama as funções para zipar e unzipar
Return Nil
#command UNCOMPRESS [ FILE ] <zipfile> ;
[ BLOCK <block> ] ;
[ PASSWORD <password> ] ;
=> ;
UNCOMPRESSFILES ( <zipfile> , <block> , <password> )
*------------------------------------------------------------------------------*
Function CreateZip()
*------------------------------------------------------------------------------*
Local aDir := Directory( "f*.txt", "D" ), aFiles:= {}, nLen
Local cPath := CurDrive()+":\"+CurDir()+"\"
FillFiles( aFiles, aDir, cPath )
if ( nLen := Len(aFiles) ) > 0
Form_1.ProgressBar_1.RangeMin := 1
Form_1.ProgressBar_1.RangeMax := nLen
MODIFY CONTROL Label_1 OF Form_1 FONTCOLOR {0,0,0}
COMPRESS aFiles ;
TO 'ZipTest.Zip' ;
BLOCK {|cFile, nPos| ProgressUpdate( nPos, cFile, .T. ) } ;
PASSWORD "mypass" ;
OVERWRITE
MODIFY CONTROL Label_1 OF Form_1 FONTCOLOR {0,0,255}
Form_1.Label_1.Value := 'Backup is finished'
endif
Return Nil
*------------------------------------------------------------------------------*
Function ProgressUpdate( nPos , cFile , lShowFileName )
*------------------------------------------------------------------------------*
Default lShowFileName := .F.
Form_1.ProgressBar_1.Value := nPos
Form_1.Label_1.Value := cFileNoPath( cFile )
if lShowFileName
INKEY(.2)
endif
Return Nil
*------------------------------------------------------------------------------*
Function UnZip()
*------------------------------------------------------------------------------*
Local cCurDir := GetCurrentFolder(), cArchive
cArchive := Getfile ( { {'Zip Files','*.ZIP'} } , 'Open File' , cCurDir , .f. , .t. )
if !Empty(cArchive)
Form_1.ProgressBar_1.RangeMin := 0
Form_1.ProgressBar_1.RangeMax := GetFilesCountInZip( cArchive )
MODIFY CONTROL Label_1 OF Form_1 FONTCOLOR {0,0,0}
UNCOMPRESS cArchive ;
BLOCK {|cFile, nPos| ProgressUpdate( nPos, cFile, .T. ) } ;
PASSWORD "mypass"
MODIFY CONTROL Label_1 OF Form_1 FONTCOLOR {0,0,255}
Form_1.Label_1.Value := 'Restoration of Backup is finished'
endif
Return Nil
*------------------------------------------------------------------------------*
Function FillFiles( aFiles, cDir, cPath )
*------------------------------------------------------------------------------*
Local aSubDir, cItem
FOR cItem :=1 TO LEN(cDir)
IF cDir[cItem][5] <> "D"
AADD( aFiles, cPath+cDir[cItem][1] )
ELSEIF cDir[cItem][1] <> "." .AND. cDir[cItem][1] <> ".."
aSubDir := DIRECTORY( cPath+cDir[cItem][1]+"\*.*", "D" )
aFiles:=FillFiles( aFiles, aSubdir, cPath+cDir[cItem][1]+"\" )
ENDIF
NEXT
Return aFiles
*------------------------------------------------------------------------------*
Function GETFILESCOUNTINZIP ( cFileName )
*------------------------------------------------------------------------------*
LOCAL i := 0 , hUnzip , nErr
hUnzip := HB_UNZIPOPEN( cFileName )
nErr := HB_UNZIPFILEFIRST( hUnzip )
DO WHILE nErr == 0
i++
nErr := HB_UNZIPFILENEXT( hUnzip )
ENDDO
HB_UNZIPCLOSE( hUnzip )
Return i
*------------------------------------------------------------------------------*
PROCEDURE COMPRESSFILES ( cFileName , aDir , bBlock , lOvr , lStorePath , cPassword )
*------------------------------------------------------------------------------*
LOCAL hZip , cZipFile , i
if valtype (lOvr) == 'L'
if lOvr == .t.
if file (cFileName)
delete file (cFileName)
endif
endif
endif
hZip := HB_ZIPOPEN( cFileName )
IF ! EMPTY( hZip )
FOR i := 1 To Len (aDir)
if valtype (bBlock) == 'B'
Eval ( bBlock , aDir [i] , i )
endif
cZipFile := if( lStorePath, aDir [i], cFileNoPath( aDir [i] ) )
HB_ZipStoreFile( hZip, aDir [i], cZipFile, cPassword )
NEXT
ENDIF
HB_ZIPCLOSE( hZip )
RETURN
*------------------------------------------------------------------------------*
PROCEDURE UNCOMPRESSFILES ( cFileName , bBlock , cPassword )
*------------------------------------------------------------------------------*
LOCAL i := 0 , hUnzip , nErr, cFile, dDate, cTime, nSize, nCompSize, lCrypted, cComment
hUnzip := HB_UNZIPOPEN( cFileName )
nErr := HB_UNZIPFILEFIRST( hUnzip )
DO WHILE nErr == 0
HB_UnzipFileInfo( hUnzip, @cFile, @dDate, @cTime,,,, @nSize, @nCompSize, @lCrypted, @cComment )
if valtype (bBlock) == 'B'
Eval ( bBlock , cFile , ++i )
endif
HB_UnzipExtractCurrentFile( hUnzip, NIL, cPassword )
nErr := HB_UNZIPFILENEXT( hUnzip )
ENDDO
HB_UNZIPCLOSE( hUnzip )
RETURNUm 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.
Função WaitRUN para Harbour
valeu, vou dar uma pesquisada nisso,
ja que estou fazendo uma faxina no meu sistema, decidi fazer por completo..rs
Abracos, e desde ja agradeco mais uma vez.
ja que estou fazendo uma faxina no meu sistema, decidi fazer por completo..rs
Abracos, e desde ja agradeco mais uma vez.


