Hidden Start: Colocar aplicativos console rodando escondido.

Fórum sobre ferramentas de apoio à programação (Clipper/[x]Harbour)

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por rochinha »

Amiguinhos.

Veja Neste Link o utilitário que permite que aplicações console e batch-files rodem realmente escondidos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por lugab »

Achei isso o máximo, parabéns Rochinha.
lugab
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por dbsh »

Se voce usa WVT. tem a função:

Esconde a janela console.
wvt_hide()

Mostra a janela console.
wvt_Show()
SetForegroundWindow( Wvt_GetWindowHandle() )
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por Jairo Maia »

Olá Pessoal,

Nos casos de precisar chamar um processo filho a partir da aplicação, em muitos casos também pode se usar assim diretamente pelo [x]Harbour com arquivos .Exe, Com e Bat:

Código: Selecionar todos

Function Main()

 nHandler := Hb_OpenProcess( "cExecutável.Ext", Nil, Nil, Nil, .T. )

 Inkey( 0 )  // verifique no gerenciador de tarefas...

 If HB_ProcessValue( nHandler, .F. )  // verifica se oprocesso está ativo

  HB_CloseProcess( nHandler, .F. )    // encerra o processo

 EndIf

Return Nil
Se você enviar os parâmetros no lugar de Nil, precisa fechar o Handler retornado com FClose():

Código: Selecionar todos

Function Main()

 nHandler := Hb_OpenProcess( "cExecutável.Ext", nHadler1, nHadler2, nHadler3, .T. )

 Inkey( 0 )  // verifique no gerenciador de tarefas...

 If HB_ProcessValue( nHandler, .F. )  // verifica se oprocesso está ativo

  HB_CloseProcess( nHandler, .F. )    // encerra o processo

 EndIf

 FClose( nHandler1 )
 FClose( nHandler2 )
 FClose( nHandler3 )

Return Nil
Se o segundo parâmetro em HB_ProcessValue() ou em HB_CloseProcess(), for .T., fica aguardando o processo ser encerrado.

Se o segundo parâmetro em Hb_OpenProcess() for omitido ou .F., abre o processo em primeiro plano, não em background.
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)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por rochinha »

Amiguinhos,

Jairo Maia

Estas funções são específicas do xHarbour?
Poderia dar um exemplo prático de uso destas funções?

Gostaria de entendê-las melhor. O Harbour tem muitas maravilhas que ainda desconheço.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por Jairo Maia »

Olá Rochicha,

Primeiro uma correção: Os parâmetros que substituem os Nils no exemplo acima, devem ser enviados por referências, ou seja, serem precedidas por "@" (arroba). E neste caso necessariamente deverão ser previamente declarados.

Estas funções são do xHarbour, e foram herdadas pelo Harbour, portanto funcionam com ambos.

O exemplo abaixo peguei no xHarbour Language Reference Guide. Para compilar com Harbour usar a lib xhb.lib.

Para que o exemplo funcione como está, o exemplo do processo filho deve ser compilado como: ChildProc.exe, ou claro, faça as alterações necessárias para outro nome. Veja que legal:

Processo Pai:

Código: Selecionar todos

// Este exemplo cria um processo pai que chama um processo filho.
// (O processo filho está no segundo exemplo)

PROCEDURE Main()
   LOCAL cData  := "Hello World"
   LOCAL cEXE   := "ChildProc.exe"
   LOCAL nBytes, nChild, nError, nStdIN, nStdOUT, nStdERR

   CLS
   @ 2,2 Say "Abrindo o processo filho: " + cEXE

   nChild := HB_OpenProcess( cEXE, @nStdIN, @nStdOUT, @nStdERR )

   IF nChild < 0
      ? "Erro: ", FError()
      QUIT
   ENDIF

   nReturn := FWrite( nStdIN, cData )
   @ 3,2 Say "Enviando dados          : " + Hb_NToS( nReturn )

   @ 4,2 Say "Recebendo dados         : "
   cData := Space( 1000 )
   nBytes := Fread( nStdOUT, @cData, Len(cData) )
   ?? Left( cData, nBytes )

   @ 5,2 Say "Erro de leitura         : "
   cData := Space( 1000 )
   nBytes := Fread( nStdERR, @cData, Len(cData) )
   ?? Left( cData, nBytes )

   // Verifica se o processo filho finalizaou. Caso não aguarda...
   @ 6,2 Say "Aguardando finalizacao  : " +Hb_NToS( HB_ProcessValue( nChild ) )

   FClose( nChild )
   FClose( nStdIN )
   FClose( nStdOUT )
   FClose( nStdERR )

RETURN
Processo Filho:

Código: Selecionar todos

// Este é o processo filho chamado pelo primeiro exemplo.
// Ambos devem ser compilados como executáveis separados.

// Definição dos padrões dos Handlers (controladores) de arquivos usados neste exemplo:
#define  FH_STDIN   0
#define  FH_STDOUT  1
#define  FH_STDERR  2

#include "Fileio.ch"

#define BUFF_SIZE   1024

PROCEDURE Main
   LOCAL nBytes, cBuffer, cData, nError
   
   @ 6,2 Say "O Processo filho sera iniciado em 5 segundos"
   Inkey( 5 )
   @ 6,2 Say Space( 50 )

   cBuffer := Space( BUFF_SIZE )

   nBytes  := FRead( FH_STDIN, @cBuffer, Len( cBuffer ) )

   cBuffer := "Processo filho recebeu "    + ;
                     LTrim( Str( nBytes) ) + ;
              " bytes [" + Trim( cBuffer ) + "]"

   nBytes  := FWrite( FH_STDOUT, cBuffer, Len(cBuffer) )

   nError  := FError()

   cBuffer := "Codigo do erro: " + LTrim( Str( nError ) )

   nBytes  := FWrite( FH_STDERR, cBuffer, Len(cBuffer) )
   
RETURN
Para testar o processo filho rodando em background, altere a linha 12 do exemplo pai colocando o 5o. parâmetro como .T.:
nChild := HB_OpenProcess( cEXE, @nStdIN, @nStdOUT, @nStdERR, .T. )
Veja que a mensagem que o processo filho será iniciado em 5 segundos não aparecerá. Se você colocar ao invés de Inkey( 5 ), um Inkey( 0 ), ou um alert(), o processo ficará aberto até que seja fechado pelo gerenciador de tarefas, pois você não tem acesso a ele.
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)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Hidden Start: Colocar aplicativos console rodando escondido.

Mensagem por rochinha »

Amiguinho,

Valeu! vou estudar o exemplo. É um tanto interessante esta rotina, mesmo porque só usamos aquilo que necessitamos, mas os horizontes se abre quando conhecemos algo mais.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder