Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - yqueseyo

#1
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)


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