Ir para conteúdo


Foto
* * * - - 1 votos

RunSTDIO Executa um programa DOS e retorna a saida da console

Run Console DOS STD IO I/O executa

  • Por favor, faça o login para responder
13 respostas neste tópico

#1 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 06 abril 2013 - 01:18

UDF Atualizada

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

  4,16K   5 Downloads

Veja o Post 11#  para detalhes

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Essa UDF permite rodar um Programa que retorna a Saída na Console e retornar os Dados de Volta

 

Uso:

 

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

UDF:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido


Editado por Elias, 07 abril 2013 - 03:57 .


#2 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 06 abril 2013 - 01:48

boa elias!
muito obrigado por compartilhar.

mas fiquei com uma dúvida sobre um possível bug.

Dessa maneira a variavel só vai ser declarada para false, se ela não foi declarada ainda

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

então se eu usar uma variavel global com o nome $abort
seu script vai bugar.

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Confere ou não?

Editado por joelson0007, 06 abril 2013 - 01:48 .


#3 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 06 abril 2013 - 02:01

Exato ele vai retornar o texto !Abort e @error = 2
Geralmente a Variavel $Abort se usa em  HotKey justamente para terminar um programa que travou
 
mas quem não gostar é só alterar a UDF
 
Alias já tenho uma alteração que desejo fazer que é no caso de mais de um Flag retornar um Array ao invés de uma String
 
$a = RunSTDIO(...  ,$STDOUT_CHILD + $STDERR_CHILD)
 
 
$a[0] = ,Retorno do $STDOUT_CHILD
$a[1] = ,Retorno do $STDERR_CHILD

Editado por JScript, 06 abril 2013 - 02:48 .
Organização!


#4 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 06 abril 2013 - 02:37

mas se eu não realizar a checagem, vai causar algum problema?

substituindo

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido


Por

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido



O que acha?

#5 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 06 abril 2013 - 02:40


Ai não funciona pois a Ideia é poder alterar essas variáveis fora da Func

Editado por JScript, 06 abril 2013 - 02:50 .


#6 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 06 abril 2013 - 02:48

Correto, nada haver essa idéia minha.

mais tranquilo foi essa a dúvida, no mais o script está funcionando 100%

obrigado por compartilhar.

#7 JScript

JScript

    A cada dia que passa eu aprendo muito mais com todos vocês!

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.445 posts
  • LocationSomewhere out there!

Postado 06 abril 2013 - 02:50

@Elias

 

Amigo a idéia é muito boa, sem dúvidas, mas não achas que é muito código para substituir substituir o que já tem no exemplo do help?

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Mesmo assim, obrigado por compartilhar sua idéia!

 

JS



#8 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 06 abril 2013 - 03:14

Fiz isso mais pq quando fui usar esse recurso da primeira vez foi bem confuso para mim,  tb acabei fazendo essa rotina agora pois fica bem simples de utilizar quando se deseja executar um comando DOS e ter o resultado em uma String.
 
Isso estou utilizado em um sistema q fiz recentemente.
 
Realmente chamar de UDF foi meio exagerado é mais mesmo uma Func especializada.
 
Tks

Editado por JScript, 06 abril 2013 - 05:45 .


#9 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 06 abril 2013 - 03:27

Correto, nada haver essa idéia minha.

mais tranquilo foi essa a dúvida, no mais o script está funcionando 100%

obrigado por compartilhar.

 

 

Na verdade descobri q quando se roda pelo SciTE e se aborta ele  sai da Func mas fica preso no SciTE como se o SciTE estivesse aguardando o programa terminar (precisa dar Ctrl + Break) para o programa terminar.

 

Resolvi isso colocando um  ConsoleWrite(@CRLF) antes do

StdioClose($foo)

 

Isso deve ser devido ao próprio redirecionamento que o SciTE faz quando executa o script

 

Segue anexado o novo Codigo com a Saida em Array para o caso de

opt_flag = $STDOUT_CHILD + $STDERR_CHILD

 


Editado por Elias, 07 abril 2013 - 01:46 .


#10 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 06 abril 2013 - 08:53

verdade, esse bug eu nem tinha notado antes, 

 

mas agora que falou eu eu vi.

 

mas agora já está corrigido.

 

até mais.



#11 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 07 abril 2013 - 01:45

Reescrevi a Rotina e ajustei ela para compatibilizar com o Padrão para uma UDF

 

Também notei um problema de PageCode, como a PageCode do DOS geralmente aqui no Brasil é 850 temos um problema quando se abre o texto em um editor de texto ou mesmo usar o ConsoleWrite() os caracteres acentuados saem errados.

 

uma solução é usar a Func _WinAPI_MultiByteToWideChar para converter de 850

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Abaixo um exemplo da saida:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Retorno da String $s, Nota-se que a acentuação esta incorreta

ConsoleWrite($s):

Status para dispositivo CON:
----------------------------
    Linhas:               500
    Colunas:              180
    Velocidade do teclado:31
    Atraso do teclado:    1
    P gina de c¢digo:    850

 

Após Processamento pela: $s = _WinAPI_MultiByteToWideChar($s, 850, 0, True) Acentuação correta

ConsoleWrite($s)
Status para dispositivo CON:
----------------------------
    Linhas:               500
    Colunas:              180
    Velocidade do teclado:31
    Atraso do teclado:    1
    Página de código:    850

 

 

Nova UDF  RunSTDIO_UDF.au3

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido


Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

  4,16K   5 Downloads


Editado por Elias, 07 abril 2013 - 01:50 .


#12 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 07 abril 2013 - 02:50

_WinAPI_MultiByteToWideChar show de bola essa dica!

 

Muito obrigado por compartilhar!

 

ta ficando xique a UDF.

 



#13 Elias

Elias

    Membro

  • Membros
  • Pip
  • 32 posts
  • LocationSão Paulo / Brasil

Postado 07 abril 2013 - 03:48

_WinAPI_MultiByteToWideChar show de bola essa dica!

 

Muito obrigado por compartilhar!

 

ta ficando xique a UDF.

essa do _WinAPI_MultiByteToWideChar descobri em

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido



#14 Carvalho

Carvalho

    Novato

  • Membros
  • 1 posts
  • Locationgoiás

Postado 13 janeiro 2016 - 03:33

Olá,
Tópico antigo....  Mas estou procurando algo semelhante ao conteúdo utilizado nesta UDF
No lugar do DOS  gostaria de saber se existe alguma UDF  ou forma de utilizar um
terminal/Emulador de acesso, por exemplo Emulador 3270 para GTK  -  PW3270

(software disponível em: 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

  )  versões para windows.

 

Sei que é possível controlar este emulador/terminal com macro VBA - excel
Alguem teria experiência para trabalhar -> controlando o terminal pelo AutoIT??






0 usuário(s) está(ão) lendo este tópico

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Documentação OnLine de referência