Página 1 de 1

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 10:50
por pena
Bom dia, qual comando utilizo no harbour para substituir o comando swpruncmd do blinker?
é um comando copy do DOS

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 11:38
por Jairo Maia
Para executar um comando use MyRun():

Código: Selecionar todos

FUNC MyRun( cComando, lWait )  // executa programa externo
 Local oShell, nRet, cMsg
 lWait := If( Empty( lWait ), .F., lWait )  // Se .T. aguarda o programa fechar, se .F. não aguarda...
 oShell := CreateObject( "WScript.Shell" )
 nRet := oShell:Run( "%comspec% /c " + cComando, 0, lWait )
 oShell := Nil
Return If( nRet = 0, .T., .F. )
Para abrir um arquivo, use MyOpenFile():

Código: Selecionar todos

FUNC MyOpenFile( cComando )  // abre arquivo externo reconhecido nas extensões do windows...
 Local oShell, ret, cPath, cFile, nCursor:=SetCursor(0)
 
 cPath := SubS( cComando, 1, RAt( "\", cComando ) )
 cFile := SubS( cComando, RAt( "\", cComando ) + 1 )
 
 nRet := Win_Open_File( cPath, cFile )
 
 SetCursor( nCursor )
 
Return nRet

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 11:45
por Itamar M. Lins Jr.
Ola!
Pode usar o mesmo comando.
As funções do blinker foram incorporadas ao harbour.
hbmk23 meu.prg -lblink
https://github.com/harbour/core/blob/ma ... linker.prg

Código: Selecionar todos

FUNCTION SwpRunCmd( cCommand, nMem, cRunPath, cTempPath )

   HB_SYMBOL_UNUSED( nMem )
   HB_SYMBOL_UNUSED( cRunPath )
   HB_SYMBOL_UNUSED( cTempPath )

   IF ! HB_ISSTRING( cCommand ) .OR. Empty( cCommand )
#if defined( __PLATFORM__UNIX )
      cCommand := GetEnv( "SHELL" )
#else
      cCommand := GetEnv( "COMSPEC" )
#endif
   ENDIF

   RETURN ( t_nErrorLevel := hb_run( cCommand ) ) != -1
Saudações,
Itamar M. Lins Jr.

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 11:59
por Jairo Maia
Itamar M. Lins Jr. escreveu:Pode usar o mesmo comando.
É que a função SwpRunCmd(), abre uma janela preta (cmd) antes de executar o comando.

EM TEMPO:
Acabei colocando minha função de tratativa MyOpenFile() para a função Win_Open_File(). Este é o código da Win_Open_File():

Código: Selecionar todos

/*
  Função em C# para abrir arquivos externos reconhecidos nas extensões do Windows.
  Exemplo de Uso: WIN_OPEN_FILE( cPath, cFile )
*/
#pragma BEGINDUMP
  #include "hbapi.h"
  #include <windows.h>
  HB_FUNC( WIN_OPEN_FILE )
  {
    HINSTANCE hInst;
    LPCTSTR lpPath = (LPTSTR) hb_parc( 1 );
    LPCTSTR lpHelpFile = (LPTSTR) hb_parc( 2 );
    hInst = ShellExecute( 0, "open", lpHelpFile, 0, lpPath, SW_SHOW );
    hb_retnl( (LONG) hInst );
    return;
  }
#pragma ENDDUMP

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 13:46
por Nascimento
Jairo disse : É que a função SwpRunCmd(), abre uma janela preta (cmd) antes de executar o comando.
vc colocou a opção -gui ? no .hbp

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 14:32
por Jairo Maia
Nascimento escreveu:vc colocou a opção -gui ? no .hbp
Sim, e também a função Wvt_SetGui( .t. ) no inicio da minha função Main. SwpRunCmd() usa Hb_Run() para executar o comando, ela abre o cmd.

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 19:15
por JoséQuintas
Não quer janela no COPY... não use o COPY, é ele quem precisa da janela.

Serve do Harbour: COPYFILE, hb_fCopy(), hb_vfCopy() ou outro que apareça ao digitar hbmk2 -find copy ?

substituir SWPRUNCMD do blinker?

Enviado: 28 Mar 2019 19:46
por Jairo Maia
JoséQuintas escreveu:Serve do Harbour: COPYFILE, hb_fCopy(), hb_vfCopy() ou outro que apareça ao digitar hbmk2 -find copy ?
Sim. Sugeri a MyRun() porque com ela pode-se usar qualquer comando de baixo nível sem abrir o cmd.

Comandos como: ERASE, DELETE FILE, COPY FILE, RENAME, etc..., num primeiro momento da migração acabam estando presentes.

NOTA: As funções: COPY FILE, hb_fCopy(), hb_vfCopy(), são funções de baixo nível e abrem a janela cmd.

Para copiar arquivo com função nativo do Harbour sem janela cmd a função é:

Código: Selecionar todos

FileCopy( <cSourceFile>, <cTargetFile>, [<lBackup>] )
Para renomear sem janela cmd a função é:

Código: Selecionar todos

FRename( <cOldFile>, <cNewFile> )