Autor Tema: Ocultar ventana DOS por usar oShell  (Leído 7390 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Ocultar ventana DOS por usar oShell
« en: Agosto 19, 2013, 12:55:55 am »
Ayudando a un amigo se me presento esta inquietud, en esta parte del codigo:

Código: (VB) [Seleccionar]
   
   ...
   Set oExec = oShell.Exec(Comando)    '<--- Aqui abre la ventana DOS
   ret = oExec.StdOut.ReadAll()      '<--- Leo y lo guardo en la variable ret que luego mostrare, la ventana ya se oculto
   ...

No he encontrado forma de que la ventana DOS no se muestre, se ejecute y logre obtener datos pero que no sea visible.  ¿es posible?

Saludos
Me encuentras en YAcosta.com

xkiz ™

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 283
  • Reputación: +30/-11
    • Ver Perfil
    • xkiz ™
Re:Ocultar ventana DOS por usar oShell
« Respuesta #1 en: Agosto 19, 2013, 10:28:54 am »
con FindWindow y despues ocultaria ese hwnd. asi habia hecho cuando usaba Blender que en Windows tiene una ventana en D.O.S
« última modificación: Agosto 19, 2013, 10:30:33 am por xkiz ™ »

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Ocultar ventana DOS por usar oShell
« Respuesta #2 en: Agosto 19, 2013, 10:42:56 am »
Doc, por lo general yo uso esto.

Código: (vb) [Seleccionar]
Shell ("cmd.exe"), vbHide

Pruebalo sin el vbHide y veras que se muestra, con el vbHide, veras que se oculta...!
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ocultar ventana DOS por usar oShell
« Respuesta #3 en: Agosto 19, 2013, 11:38:31 am »
Doc, por lo general yo uso esto.

Código: (vb) [Seleccionar]
Shell ("cmd.exe"), vbHide

Pruebalo sin el vbHide y veras que se muestra, con el vbHide, veras que se oculta...!

Yo tambien pero el amigo en cuestion no usa Shell sino o oShell.

Aqui el codigo completo (Copy paste, 2 textboxes y un command)

Código: (VB) [Seleccionar]
Private Sub Command1_Click()
  txt_resultado.Text = ""
  txt_resultado.Text = ejecutar_Dos(Trim(txt_comando))
End Sub

Private Sub Form_Load()
Command1.Caption = " Ejecutar DOS "
txt_comando.Text = "ping 192.168.1.1"
End Sub

Function ejecutar_Dos(Comando As String) As String
    Dim oShell As WshShell
    Dim oExec As WshExec
    Dim ret As String
    Set oShell = New WshShell
    DoEvents
    ' ejecutar el comando

    Set oExec = oShell.Exec("%comspec% /c " & Comando)
    ret = oExec.StdOut.ReadAll()
   
    ' retornar la salida y devolverla a la función
    ejecutar_Dos = ret ' Replace(ret, Chr(10), vbNewLine)
   
    DoEvents
    Me.SetFocus
   
End Function


Para que el codigo funcione hay que activar la referencia Windows Script Host Object Model.


En todo caso lo que se quiere es ejecutar en el DOS unos comandos y capturarlos. Entiendo que lo correcto seria indicar cuales son esos comandos y es lo que averiguare, pero en general ¿como seria?
« última modificación: Agosto 19, 2013, 02:50:25 pm por YAcosta »
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ocultar ventana DOS por usar oShell
« Respuesta #4 en: Agosto 19, 2013, 11:39:50 am »
con FindWindow y despues ocultaria ese hwnd. asi habia hecho cuando usaba Blender que en Windows tiene una ventana en D.O.S

Voy a ver eso, gracias.
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ocultar ventana DOS por usar oShell
« Respuesta #5 en: Agosto 19, 2013, 10:10:38 pm »
Nada no encontré forma de resolver esto.

Lo único que si se es que se le pasa una ip privada, esto entrega un resultado text que se recibe en la variable ret y se muestra en formulario, el unico detalle es que no se quiere que se levante la ventana cmd ya que esta aparece por 2 segundos e incomoda.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Ocultar ventana DOS por usar oShell
« Respuesta #6 en: Agosto 20, 2013, 02:02:17 pm »
Hay que ver el codigo de la clase para que se oculte :P

Si lo ejecuta en algun acceso directo o algo así, se muestra igual?

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ocultar ventana DOS por usar oShell
« Respuesta #7 en: Agosto 20, 2013, 02:27:03 pm »
No entiendo doc ¿Cual clase?... Fíjate te pongo el proyecto aqui

Lo bajas, lo ejecutas, veras que se abre la ventana cmd, se cierra y te pinta el textbox. Lo que quiero es que todo siga igual solo que no se muestre la ventana cmd. Eso no consigo. Es poquísimo código el cual mostré arriba.

Saludos
« última modificación: Agosto 20, 2013, 02:51:30 pm por YAcosta »
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Ocultar ventana DOS por usar oShell
« Respuesta #8 en: Agosto 21, 2013, 12:28:34 pm »
Y no le conviene usar este code

http://support.microsoft.com/kb/300197/es

Hacer ping desde vb6, o si o si tiene que ser desde el d.o.s.

Saludos
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ocultar ventana DOS por usar oShell
« Respuesta #9 en: Agosto 21, 2013, 12:59:43 pm »
No amigo, es que lo del ping es solo un ejemplo, la ip que consultare es de una empresa y lleva usuario, password y un par de parametros mas porque se esta consultado a una tarjeta electronica que prende y apaga unas maquinas, como es un dato privado no lo puedo publicar, pero los datos que entrega son exactamente como si se consultara una ip con el ping como puse en el ejemplo.

Actualmente lo usan en modo DOS y funciona, en DOS entrega un resultado en modo texto (no se como llamarlo) y eso logramos capturar en el textbox con el oShell, el unico detallito es que no queremos que levante la ventana DOS (cmd) cuando trabajamos con el aplicativo que se esta desarrollando.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Ocultar ventana DOS por usar oShell
« Respuesta #10 en: Agosto 21, 2013, 01:06:50 pm »
Una vez postie un metodo para ejecutar una tarea y esperar a que termine, el tema es que no devuelve el texto de como se termino, pero quizas viendo las API se pueda hacer

http://leandroascierto.com/foro/index.php?topic=1673.msg9448#msg9448

El uso es

Call ShellWait("exe", "parametros", "carpeta donde se ejecuta")

el 3º parametro seria el "iniciar en" a la hora de hacer un acceso directo

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:Ocultar ventana DOS por usar oShell
« Respuesta #11 en: Agosto 22, 2013, 09:43:47 am »
Hola, en una ocasión estuve buscando algo similar y no llegué a encontrar la manera de ocultar .Exec, sólo se puede hacer con el .Run

Si te parece esta es una opcion:

Código: (VB) [Seleccionar]
Function ejecutar_Dos(Comando As String) As String
    Dim oShell As WshShell
    Dim Fichero As Integer
    Set oShell = New WshShell
    oShell.Run "%comspec% /c " & Comando & " >salida.tmp", 0, True
    Fichero = FreeFile
    Open "salida.tmp" For Input As #Fichero
    ejecutar_Dos = Input(LOF(Fichero), #Fichero)
    Close #Fichero
    Kill "salida.tmp"
End Function

No se si te puede valer en todos los casos pero utilizando el redireccionador de D.O.S., puedes crear un archivo temporal con el contenido de los datos y devolverlo después.

El .Run te permite determinar el tipo de Ventana y si o no debe esperar a terminar.

Saludos

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ocultar ventana DOS por usar oShell
« Respuesta #12 en: Agosto 22, 2013, 01:51:45 pm »
Muchas gracias. Voy a probar eso cuando llegue a casa.

Saludos
Me encuentras en YAcosta.com