Hola, a ver se que el programa es simple, no sirve mucho, por eso es ideal para ser el primero y hacer pruebas, tengo echo esto:
(http://img231.imageshack.us/img231/6416/prtscrcapturee.jpg)
en la opción "archivo" hay otra que se llama "Elegir directorio", la idea es usar esa opción, se elige la carpeta, y me la guarda en "FName", que no se si llamarla variable o string, porque aún no entiendo bien las funciones básicas xD...
...Bueno eso ya lo he conseguido, después de obtener el "FName", la idea es darle al botón "Empezar", y lo que debería hacer es:
1º - si no encuentra ningún archivo con extensión ".msu", mandar un error, en un msgbox o como sea
2º - que a la derecha del botón aparezca un contador con la cantidad de actualizaciones que hay en la carpeta seleccionada (Osea, la cantidad de archivos MSU)
3º - Ejecutar una a una (No todas a la vez) cada archivo con extensión ".msu"
4º - Que el contador vaya restando los archivos que ya se han instalado, (Por ejemplo "Quedan 7 de 30 actualizaciones" 0 "7 de 30")
Y luego no tengo ni idea de como hacer funcionar la casilla de reiniciar pc, ya me he enterado de como reiniciar el pc con vb, pero no se como hacerlo cuando el comando "empezar" termine de instalar las updates... :-\
Simplemente eso, ¿Alguien me ayuda?
EDITO: se me olvidaba, aqui el código entero, por si hace falta...
Private Sub opendir_Click()
Dim FName As String
FName = BrowseFolder(Caption:="Selecciona una carpeta")
If FName = vbNullString Then
Debug.Print "No Folder Selected"
Else
Debug.Print "Selected Folder: " & FName
End If
End Sub
Private Sub Check6_Click()
If Check6.Value = 1 Then
Text6.Enabled = True
ElseIf Check6.Value = 0 Then
Text6.Enabled = False
End If
End Sub
Private Sub english_Click()
Check6.Caption = "Reset PC after install updates."
Frame1.Caption = "Additional options"
opendir.Caption = "Open directory..."
virus.Caption = "File"
salir.Caption = "Exit"
Sobre.Caption = "About..."
Idioma.Caption = "Language"
español.Caption = "Spanish"
english.Caption = "English"
End Sub
Private Sub español_Click()
Check6.Caption = "Reiniciar PC después de instalar actualizaciones."
Frame1.Caption = "Opciones adicionales"
opendir.Caption = "Abrir directorio..."
virus.Caption = "Archivo"
salir.Caption = "Salir"
Sobre.Caption = "Sobre..."
Idioma.Caption = "Idioma"
español.Caption = "Español"
english.Caption = "Inglés"
End Sub
Private Sub salir_Click()
Unload Me
End Sub
Private Sub Sobre_Click()
MsgBox ("WinUpdates Installer 1.0" & vbNewLine & "" & vbNewLine & "By PiToLoKo" & vbNewLine & vbNewLine & "www.foro.elhacker.net")
End Sub
HOLA!!!
Fname si es el NombreDelArchivo es una variable String.
(estos ejemplos te los hago como si la carpeta fuera C:\ y con cosas basicas)
1:
If Dir("c:\*.msu") = vbNullString Then
MsgBox "error no se encuentra archivo msu"
'esto yo lo haria con un If de una linea pero para empezar dejalo asi
End If
2:
Dim CT As Integer
Dim archivo As String
archivo = Dir("c:\*.msu")
While archivo <> ""
'para buscar el siguiente archivo se usa dir solo
archivo = Dir
CT = CT + 1
Wend
lblTotal.Caption = Str(CT)
'CT es la cantidad de archivos
3:
Dim archivo As String
archivo = Dir("c:\*.msu")
While archivo <> ""
'shell ejecuta
Shell archivo
'Esperar a que cierre un proceso es mas complicado, busca en el foro.
'ESTO EJECUTARA TODOS LOS MSU
'para buscar el siguiente archivo se usa dir solo
archivo = Dir
Wend
4:
Dim archivo As String
archivo = Dir("c:\*.msu")
While archivo <> ""
'shell ejecuta msu
Shell archivo
'Suponemos que esperar al cierre del proceso es "EsperaCierre"
While esperacierre(archivo) = False
DoEvents
'doevents libera el procesador y lo deja ejecutar otras operaciones
Wend
'para buscar el siguiente archivo se usa dir solo
LblTerminados.Caption = Str(Val(LblTerminados.Caption +1))
archivo = Dir
Wend
En cuanto a lo ultimo, hay mucha info para reiniciar la pc, solo deberias fijarte en el label cuando sea = el de terminados y el de totales.
Conste que hago la "tarea" por que he visto a pitoloko (odio ese nick) y parece que tiene ganas de aprender.
GRACIAS POR LEER!!!
Gracias por tu tiempo, además con las explicaciones de lo que hace cada cosa ¡^^! Trankilo, lo de pitoloko no es lo que te parece... :P
voy por pasos, ya he arreglado el 1º, me ha costado un poco aunque al final he deducido como hacer funcionar mi string en tu ejemplo:
If Dir(FName & "\*.msu") = vbNullString Then
MsgBox "error no se encuentra archivo msu" & FName
End If
El resto no consigo utilizarlos, pero comentaré solo el 3º, me da error de que no encuentra el archivo (Pero el archivo si que existe en esa ruta)
C:\Users\Administrador\Desktop\Windows6.1-KB2492386-x64.msu
Private Sub Command1_Click()
Dim archivo As String
archivo = Dir("C:\Users\Administrador\Desktop\*.msu")
While archivo <> ""
Shell archivo
archivo = Dir
Wend
End Sub
¿Se te ocurre porque puede dar el error? :/
EDITO: ya se cual es el problema, "archivo" no coge el path entero, solamente el filename... ¿Como lo arreglo? :xD No me deja utilizar el string FName... ese sería otro tema que me gustaría hablar, ¿Como guardo el string para usarlo en las demás funciones?
gracias por todo, iré aprendiendo
Podes usar FSO. Aunque ya podes hacerlo asi, digamos
Private Sub Command1_Click()
Const stPath As String = "C:\Users\Administrador\Desktop\"
'---
Dim archivo As String
archivo = Dir(stPath & "*.msu")
While archivo <> ""
Call Shell(stPath & archivo)
archivo = Dir
Wend
End Sub
HOLA!!!
XD :-X Eso me pasa por no testear.
Como dice raul hacelo asi tenes el path y el nombre de archivo.
FSO es lo mas lento que existe (ya se que dir no es rapido pero FSO es malisimo)
GRACIAS POR LEER!!!
Pues tampoco me funciona de la manera que dijo raul338 :-\
he probado:
msgbox stPath & archivo
Y la ruta es correcta, pero al usar:
Call Shell(stPath & archivo)
me da este error:
error '5'
llamada a procedimiento o argumento no válidos
PD: FSO = FSO file objects?
HOLA!!!
Es por que no reconoce a los Msu como archivos ejecutables...
Lo solucionas usando ShellExecute (un api de windows)
Declara esto:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Y en donde dice shell reemplaza por esto:
ShellExecute Me.hwnd, "open", stPath & archivo, vbNullString, "c:\", False
'Nota el path de ejecucion es este ^
GRACIAS POR LEER!!!
Perdona por ser pesado, pero es que es un problema tras otro :(
me da error el shellexecute
Procedimiento sub o funcion no definido.
he probado usando End private sub, lo único que se me ha ocurrido, pero nada.
Ahora mismo lo tenog colocado así:
Private Sub Command1_Click()
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const stPath As String = "C:\Users\Administrador\Desktop\"
Dim archivo As String
archivo = Dir(stPath & "*.msu")
While archivo <> ""
MsgBox (FName & archivo)
ShellExecute Me.hwnd, "open", stPath & archivo, vbNullString, "C:\Users\Administrador\Desktop\", False
archivo = Dir
Wend
End Sub
HOLA!!!
No hay problema estas empezando, las apis se declaran fuera de los procedimientos (ahi la tenes dentro del command1_click()) Te recomiendo ponerlas en la parte superior del codigo.
Nota, se declaran fuera de los procedimientos por que son funciones las cuales tienen sus propios procedimientos internos, osea, vos podes declarar variables pero no subs ni functions dentro de otros procesos.
GRACIAS POR LEER!!!
Acabo de ponerlo arriba del todo, me sigue dando el mismo error :xD
>:(
Asi deberia estar
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
' Espacio en blanco, u otros procedimentos
Private Sub Command1_Click()
Const stPath As String = "C:\Users\Administrador\Desktop\"
Dim archivo As String
archivo = Dir(stPath & "*.msu")
While archivo <> ""
MsgBox (FName & archivo)
ShellExecute Me.hwnd, "open", stPath & archivo, vbNullString, "C:\Users\Administrador\Desktop\", False
archivo = Dir
Wend
End
Cita de: pitoloko en 13 Julio 2011, 19:44 PM
PD: FSO = FSO file objects?
Si, Podes hacerlo mediante las funciones de Visual Basic, Mediante File System Object (FSO) o la infalible: mediante api :D
que raro, juraría que lo puse exactamente que raul338 XD
me ha funcionado, gracias
http://foro.elhacker.net/programacion_visual_basic/esperar_al_final_de_la_ejecucion_de_otro_programa-t313877.0.html
Shell And Wait
Cita de: Elemental Code en 13 Julio 2011, 23:10 PM
http://foro.elhacker.net/programacion_visual_basic/esperar_al_final_de_la_ejecucion_de_otro_programa-t313877.0.html
Shell And Wait
voy solucionando los problmas poco a poco, ahora estoy estancado en el de ejecutar el archivo y "esperar".
He visto el code de tu post, me puedes decir como usaría esta función?
' Start the indicated program and wait for it
Private Sub ShellAndWait(ByVal program_name As String, ByVal window_style As VbAppWinStyle)
no se que debo poner en ¿window_style?
ShellAndWait "c:\programa.exe", ¿window_style?
gracias..
EDITO:
solucionado
ShellAndWait "C:\Program Files\Defraggler\Defraggler.exe", vbNormalFocusPero no funciona con archivos con extensión ".msu"
:-\
no me sirve
Cita de: pitoloko en 13 Julio 2011, 18:04 PM
porque aún no entiendo bien las funciones básicas xD...
vos lo dijiste, ese es el problema principal de todo, querer tirarse a hacer cosas que no tienen ni idea. hacer algo complejo que todavia no saben hacer un bucle o las funciones principales. pero no sos el unico casi todos aca son asi. ya te digo que el foro no es para venir a preguntar cada duda que te salga, para eso no sirve el foro.
yo directamente no respondo mas cuando veo estas cosas.y lamentablemente el foro parece lleno de spam.
ojala no te ofendas, ya que normalmente lo hacen y se "enojan", cuando uno lo que quiere es enseñarle a pescar y no darle el pescado, si te dan el pescado te sirve para un rato, sin embargo si aprendes a pescar te srive para siempre, espero que se entienda lo que quise decir.
Cita de: seba123neo en 16 Julio 2011, 05:45 AM
vos lo dijiste, ese es el problema principal de todo, querer tirarse a hacer cosas que no tienen ni idea.
ojala no te ofendas, ya que normalmente lo hacen y se "enojan"
No te preocupes, tienes toda la razón, aunque ya han pasado unos dias desde que inicié este hilo y las cosas básicas ya las he practicado y aprendido (No todas, pero diría que el 70% si xD)
No te dejes llevar por lo que pone en el primer comentario del hilo, ya se bastante más, al menos el 50% de lo básico xD.
Lo primero que hago cuando me habeis proporcionado códigos es analizarlos y estudiar para que sirve cada cosa escrita del código que no entendía.
Bueno, un saludo, y gracias otra vez por la ayuda gente!