Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: arfgh en 31 Julio 2013, 21:25 pm



Título: Esperar a la ventana DOS
Publicado por: arfgh en 31 Julio 2013, 21:25 pm
imaginad que ejecutamos un comando en una ventana dos. Por ejemplo 'powercfg /list'

existe alguna manera programáticamente de saber que el comando se ha terminado de ejecutar ? O sea, que el sistema ha terminado de ejecutar dicho comando.

He intentado waiforsingleoject sin éxito.


Título: Re: Esperar a la ventana DOS
Publicado por: Stakewinner00 en 31 Julio 2013, 22:07 pm
Los comandos son programas normales que cuando terminan devuelven el control al programa que les llamo. Para los programas que no funcionan en segundo plano solo se me ocurre ver si cuando termina un comando te devuelve la ruta actual o no.

Saludos.


Título: Re: Esperar a la ventana DOS
Publicado por: MCKSys Argentina en 31 Julio 2013, 22:50 pm
http://stackoverflow.com/questions/5685972/how-to-wait-for-a-shell-process-to-finish-before-executing-further-code-in-vb6 (http://stackoverflow.com/questions/5685972/how-to-wait-for-a-shell-process-to-finish-before-executing-further-code-in-vb6)


Título: Re: Esperar a la ventana DOS
Publicado por: arfgh en 31 Julio 2013, 23:01 pm
no sirve amigos...

cuando se usa el waitforsingleobject infinite, desde nuestro programa, estamos esperando para siempre y pasamos de ahí.


Título: Re: Esperar a la ventana DOS
Publicado por: raul338 en 1 Agosto 2013, 21:42 pm
Tenes que usar el waitforsingleobject tienes que asegurarte que el proceso no se interrumpe en ningun momento (ej: que no aparezca el "presione una tecla para continuar...")

Encontre esto en mi biblioteca de codigos
Código
  1. Private Const SW_HIDE = 0
  2. Private Const WAIT_TIMEOUT = &H102
  3. Private Declare Function ShellExecuteExA Lib "shell32" (lpExecInfo As SHELLEXECUTEINFO) As Long
  4. Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  5.  
  6. Private Type SHELLEXECUTEINFO
  7.  cbSize As Long
  8.  fMask As Long
  9.  hwnd As Long
  10.  lpVerb As String
  11.  lpFile As String
  12.  lpParameters As String
  13.  lpDirectory As String
  14.  nShow As Long
  15.  hInstApp As Long
  16.  lpIDList As Long
  17.  lpClass As String
  18.  hkeyClass As Long
  19.  dwHotKey As Long
  20.  hIcon As Long
  21.  hProcess As Long
  22. End Type
  23.  
  24. Public Sub ShellWait(ByVal sFile As String, ByVal sParams As String, ByVal sDir As String)
  25.    Dim Retval As Long, ShExInfo As SHELLEXECUTEINFO
  26.    With ShExInfo
  27.        .cbSize = Len(ShExInfo)
  28.        .fMask = 0
  29.        .hwnd = 0
  30.        .lpVerb = "open"
  31.        .lpFile = sFile
  32.        .lpParameters = sParams
  33.        .lpDirectory = sDir
  34.        .nShow = SW_HIDE
  35.    End With
  36.  
  37.    Retval = ShellExecuteExA(ShExInfo)
  38.    If Retval = 0 Then
  39.        Call MsgBox("Error :(")
  40.    Else
  41.        Do
  42.            DoEvents
  43.        Loop Until WaitForSingleObject(ShExInfo.hProcess, 0) < WAIT_TIMEOUT
  44.    End If
  45. End Sub
  46.