elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ejecutar un archivo externo y esperar a que termine para eliminarlo en: 11 Marzo 2012, 15:33 pm
Hola
Es muy probable que este solucionado pero quizas te sirva mejor que el otro metodo. No lo pude hacer fallar por el momento ;)

Estaba haciendo un programa para que ejecute cualquier cosa: Accesos directos, .bat, .msu(actualizaciones del seven) etc. etc .
y que espere que finalice el programa para continuar. Al final lo pude resolver
Buscando desesperado encontre este post; no es lo que buscaba pero lo tome como un desafio.

En base a lo que tenia lo modifique y lo adapte a la Variante#1

Salio esto y funciona tambien aunque el word este abierto lo borra sin problemas
(el archivo que queremos abrir tiene que estar cerrado ;D)

Bueno vamos con el codigo

Agregar al form:
un Command1 y un Text1(en este va la ruta completa de lo que se quiere abrir y borrar)

Código:
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _
    (ByVal lpszLongPath As String, ByVal lpszShortPath As String, _
    ByVal cchBuffer As Long) As Long

Private Sub Command1_Click()
    Comando = Text1
    ejecutar (Comando)
End Sub

Private Sub Form_Load()
    Form1.ScaleMode = vbCharacters
    Command1.Caption = "Ejecutar y borrar al cerrar"
    Command1.Width = Len(Command1.Caption)
End Sub


Sub ejecutar(Comando As String)
    Dim hShell As Long, hProc As Long, codExit As Long, i As Long
    Dim sBuf As String * 280
    Dim archivo, elbat
   'convierte a ruta a nombre corto
    i = GetShortPathName(Comando, sBuf, Len(sBuf))
    Comando = Left$(sBuf, i) 'ponemos en Comando el nomb corto
    If Comando = "" Then Exit Sub
    archivo = Right(Comando, Len(Comando) - InStrRev(Comando, "\"))
    elbat = creatxt(Comando)
    hShell = Shell(Environ$("Comspec") & " /c " & elbat, vbHide)
End Sub


Function creatxt(archivo As String)
    Dim arch
    Dim NumArch
    Randomize
    arch = Int(10000 * Rnd) + 1 & ".bat"
    ChDir Environ$("temp")
    NumArch = freefile
    Open arch For Output As NumArch
    Print #NumArch, "echo off"
    Print #NumArch, "Cls"
    Print #NumArch, "start " & archivo
    Print #NumArch, ":comienzo"
    Print #NumArch, "IF EXIST " & archivo & " (del " & archivo & ") else goto fin"
    Print #NumArch, "ping localhost -n 3 >nul"
    Print #NumArch, "goto comienzo"
    Print #NumArch, ":fin"
    Print #NumArch, "del %0"
    Close #NumArch
    creatxt = arch
End Function


Lo que hace esto es crear un bat en la carpeta temp.
Este bat queda haciendo un bucle para tratar de borrar el archivo que acaba de abrir,
como le da error sigue intentando eliminarlo.
Cuando se cierra la aplicacion que lo utiliza ej el word lo logra eliminar y se borra así mismo

usa el comando ping como temporizador
 
Saludos

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines