Domingo 22 de Diciembre de 2024, 19:04
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Ejecutar Un Bat Desde Vb
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Ejecutar Un Bat Desde Vb (Leído 7239 veces)
Jeremy
Miembro activo
Mensajes: 40
Ejecutar Un Bat Desde Vb
«
en:
Domingo 5 de Junio de 2005, 22:44 »
0
Hola amig@s. Necesito ejecutar un bat(fichero por lotes MS-DOS). El bat se encarga de hacer una copia de seguridad del correo del cliente, pero esta copia la hace sólo los miércoles.
Con VB podría ejecutar ese bat, pero cómo lo hago?. He encontrado en internet una instrucción para ejecutar comandos de MS-DOS desde VB. El código sería más o menos así:
Código: Text
Private Sub Form_Load()
If Format(Date, "dddd") = "miércoles" Then '---> Compruebo el día de la semana
Label1.Caption = "Se está realizando la copia del correo. Por favor espere..."
Shell "cmd.exe /c archivo.bat",vbhide '---> Con esta línea abriría una consola de MS-DOS, ejecutaría el bat y la consola como tal estaría oculta gracias al parámetro VBHIDE.
else
unload Me
end
End If
End Sub
Lo único que vería el usuario sería un form indicándole a través de un Caption que se está ejecutando la tarea indicada.
He probado estas líneas pero el caso es que el form no se muestra, el bat se ejecuta correctamente, pero lo que quiero es que el form se mantenga visible hasta que el bat termine con lo que está haciendo. Por otro lado seguro que hay una mejor forma de hacerlo, espero puedan ayudarme.
De antemano, gracias a tod@s.
Un saludo,
Tweet
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."
tyron
Miembro activo
Mensajes: 35
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #1 en:
Lunes 6 de Junio de 2005, 00:57 »
0
Hola, puedes probar a poner el formulario por encima de todo, para que no se oculte. Espero te pueda servir, un saludo.
DiabloRojo
Miembro MUY activo
Mensajes: 220
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #2 en:
Lunes 6 de Junio de 2005, 03:58 »
0
Hola.
No sé mucho de la función Shell pero por que no intentas pasar como parámetro vbNormalNoFocus en vez de vbHide. Revisa en la ayuda para que veas que hace cada constante.
DiabloRojo.
Jeremy
Miembro activo
Mensajes: 40
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #3 en:
Lunes 6 de Junio de 2005, 11:58 »
0
Gracias a los dos compañeros. Ahora tengo el siguiente problema. Cuando ejecuto este código, cómo hago para que cuando termine el bat, se cierre el form de visual?. Ahora al ejecutarlo, cuando termina el bat, el form de VB se queda abierto. Repito el código:
Código: Text
Private Sub Form_Load()
Beep
If Format(Date, "dddd") = "miércoles" Then
Me.Caption = "Hoy es " & Format(Date, "dddd")
Label1.Caption = "Se están copiando los ficheros de correo. Por favor espere..."
Shell "cmd.exe /c archivo.bat", vbMinimizedFocus
'Unload Me
'End
Else
Unload Me
End
End If
End Sub
He probado a poner después de la línea del Shell, un
Unload Me
y luego
End
. Pero lógicamente así no funciona, la aplicación se cierra enseguida. Mi idea es que el usuario pueda ver el form de VB con el mensaje de que se está ejecutando el bat, y se quite cuando haya terminado para que este pueda trabajar en su PC.
Gracias por vuestra ayuda.
Un saludo,
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."
tyron
Miembro activo
Mensajes: 35
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #4 en:
Lunes 6 de Junio de 2005, 13:45 »
0
Puedes poner un timer para que vaya detectando, mediante el nombre de la ventana de MSDOS, si existe, ya que si no existe es que ha terminado. Te paso un codigo de ejemplo, prueba a ver si te sirve.
Código: Text
'Declaramos las funciones correspondientes
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As _
Long) As Long
Esta es una función que nos devuelve el nombre de clase de una ventana de la que solo conocemos el título.
Código: Text
Public Function NombreClase(NombreVentana As String) As String
Dim hWnd As Long
Dim lpClassName As String
Dim nMaxCount As Long
Dim lresult As Long
nMaxCount = 256
lpClassName = Space(nMaxCount)
hWnd = FindWindow(vbNullString, NombreVentana)
lresult = GetClassName(hWnd, lpClassName, nMaxCount)
NombreClase = Left$(lpClassName, lresult)
End Function
Así solo deberias pasarle como parámetro el título de la ventana MSDOS que ejecuta el archivo de proceso por lotes.
Esta función te devuelve verdadero si encuentra la ventana de MSDOS
Código: Text
Function Ejecutando(NombreClase As String) As Boolean
Ejecutando = (FindWindow(NombreClase, vbNullString) <> 0)
End Function
Espero te sirva. Un saludo
toten
Miembro MUY activo
Mensajes: 140
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #5 en:
Lunes 6 de Junio de 2005, 16:49 »
0
prueba ver con la funcion DOEVENTS a ver si te sirve....
[size=109]Andres Eloy Blanco Madriz [ToT3n]
[/b][/size]
[size=109]
Voy Hablando Y Con El Maso Dando...
[/size]
[size=109]Solo Soy La Sombra Del Lado Oscuro De Tu Alma...[/size]
[size=109]Y A La Hora De La Verdad Yo Solo Se Que No Se Nada...
[/size]
[size=109]|**
V
E
N
E
Z
U
E
L
A
**|[/size]
RadicalEd
Moderador
Mensajes: 2430
Nacionalidad:
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #6 en:
Martes 7 de Junio de 2005, 17:55 »
0
A ver utiliza el comando Shell y la api Sleep para evitar cargar controles:
Código: Text
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
On Error Resume Next
Dim x
x = Shell (El path del archivo & "\file.bat", 0) 'Se oculta y se pasa el foco a la ventana oculta.
AppActivate x 'Activa el .bat
Sleep (5000) '5 Segundos; calcula cuanto tiempo toma en cargarse el archivo y coloca el valor en la api.
Ojala te sirva.
Chao.
El pasado son solo recuerdos, el futuro son solo sueños
tyron
Miembro activo
Mensajes: 35
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #7 en:
Martes 7 de Junio de 2005, 18:04 »
0
Hola, con respecto al post de RadicalEd, solo decir a nuestro amigo Jeremy que depende de en que ordenador lo ejecute, el .bat tardará unos milisegundos (tal vez segundos) mas, o menos, en ejecutarse. Para que lo tenga en cuenta. Un saludo.
Cyclop
Miembro MUY activo
Mensajes: 323
Re: Ejecutar Un Bat Desde Vb
«
Respuesta #8 en:
Martes 7 de Junio de 2005, 21:54 »
0
Deja me ver si entendi bien, quieres ejecutar un bat para que te realice una copia de segurida, que estaria de esta forma:
Backup.Bat
Pkzip c:\mizip c:\misistema\data\*.*
Por que no usas las Dlls aZip32.Dll, aUnZip32.Dll y lo haces que te muestre un progress bar, mientras comprime los archivos.
Salu2
Cyclop
Icotext Evolution v0.5 para los amantes del ASCII Art
http]
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Ejecutar Un Bat Desde Vb