Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: SuperDraco en 13 Julio 2011, 18:04 pm



Título: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 13 Julio 2011, 18:04 pm
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...

Código
  1.  
  2. Private Sub opendir_Click()
  3.   Dim FName As String
  4. FName = BrowseFolder(Caption:="Selecciona una carpeta")
  5. If FName = vbNullString Then
  6.    Debug.Print "No Folder Selected"
  7. Else
  8.    Debug.Print "Selected Folder: " & FName
  9. End If
  10. End Sub
  11.  
  12. Private Sub Check6_Click()
  13. If Check6.Value = 1 Then
  14.    Text6.Enabled = True
  15. ElseIf Check6.Value = 0 Then
  16.    Text6.Enabled = False
  17. End If
  18. End Sub
  19.  
  20.  
  21. Private Sub english_Click()
  22. Check6.Caption = "Reset PC after install updates."
  23. Frame1.Caption = "Additional options"
  24. opendir.Caption = "Open directory..."
  25. virus.Caption = "File"
  26. salir.Caption = "Exit"
  27. Sobre.Caption = "About..."
  28. Idioma.Caption = "Language"
  29. español.Caption = "Spanish"
  30. english.Caption = "English"
  31. End Sub
  32.  
  33. Private Sub español_Click()
  34. Check6.Caption = "Reiniciar PC después de instalar actualizaciones."
  35. Frame1.Caption = "Opciones adicionales"
  36. opendir.Caption = "Abrir directorio..."
  37. virus.Caption = "Archivo"
  38. salir.Caption = "Salir"
  39. Sobre.Caption = "Sobre..."
  40. Idioma.Caption = "Idioma"
  41. español.Caption = "Español"
  42. english.Caption = "Inglés"
  43. End Sub
  44.  
  45. Private Sub salir_Click()
  46. Unload Me
  47. End Sub
  48.  
  49. Private Sub Sobre_Click()
  50. MsgBox ("WinUpdates Installer 1.0" & vbNewLine & "" & vbNewLine & "By PiToLoKo" & vbNewLine & vbNewLine & "www.foro.elhacker.net")
  51. End Sub
  52.  


Título: Re: [VB6] Una ayuda con miprimer programa... plz :)
Publicado por: 79137913 en 13 Julio 2011, 18:34 pm
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:
Código
  1. If Dir("c:\*.msu") = vbNullString Then
  2.    MsgBox "error no se encuentra archivo msu"
  3.    'esto yo lo haria con un If de una linea pero para empezar dejalo asi
  4. End If
  5.  

2:
Código
  1. Dim CT As Integer
  2. Dim archivo As String
  3.    archivo = Dir("c:\*.msu")
  4.    While archivo <> ""
  5.        'para buscar el siguiente archivo se usa dir solo
  6.        archivo = Dir
  7.        CT = CT + 1
  8.    Wend
  9.    lblTotal.Caption = Str(CT)
  10.    'CT es la cantidad de archivos
  11.  

3:
Código
  1. Dim archivo As String
  2.    archivo = Dir("c:\*.msu")
  3.    While archivo <> ""
  4.        'shell ejecuta
  5.        Shell archivo
  6.        'Esperar a que cierre un proceso es mas complicado, busca en el foro.
  7.        'ESTO EJECUTARA TODOS LOS MSU
  8.        'para buscar el siguiente archivo se usa dir solo
  9.        archivo = Dir
  10.    Wend
  11.  

4:
Código
  1. Dim archivo As String
  2.    archivo = Dir("c:\*.msu")
  3.    While archivo <> ""
  4.        'shell ejecuta msu
  5.        Shell archivo
  6.        'Suponemos que esperar al cierre del proceso es "EsperaCierre"
  7.        While esperacierre(archivo) = False
  8.            DoEvents
  9.            'doevents libera el procesador y lo deja ejecutar otras operaciones
  10.        Wend
  11.        'para buscar el siguiente archivo se usa dir solo
  12.        LblTerminados.Caption = Str(Val(LblTerminados.Caption +1))
  13.        archivo = Dir
  14.    Wend
  15.  

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!!!


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 13 Julio 2011, 19:28 pm
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:

Código
  1. If Dir(FName & "\*.msu") = vbNullString Then
  2.    MsgBox "error no se encuentra archivo msu" & FName
  3. 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ódigo:
C:\Users\Administrador\Desktop\Windows6.1-KB2492386-x64.msu


Código
  1. Private Sub Command1_Click()
  2. Dim archivo As String
  3.    archivo = Dir("C:\Users\Administrador\Desktop\*.msu")
  4.    While archivo <> ""
  5.        Shell archivo
  6.        archivo = Dir
  7.    Wend
  8. End Sub
  9.  

¿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


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: raul338 en 13 Julio 2011, 19:36 pm
Podes usar FSO. Aunque ya podes hacerlo asi, digamos

Código
  1. Private Sub Command1_Click()
  2. Const stPath As String = "C:\Users\Administrador\Desktop\"
  3. '---
  4. Dim archivo As String
  5.    archivo = Dir(stPath & "*.msu")
  6.    While archivo <> ""
  7.        Call Shell(stPath & archivo)
  8.        archivo = Dir
  9.    Wend
  10. End Sub
  11.  


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: 79137913 en 13 Julio 2011, 19:38 pm
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!!!


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 13 Julio 2011, 19:44 pm
Pues tampoco me funciona de la manera que dijo raul338  :-\

he probado:
Código:
msgbox stPath & archivo
Y la ruta es correcta, pero al usar:

Código:
Call Shell(stPath & archivo)

me da este error:

Código:
error '5'
llamada a procedimiento o argumento no válidos


PD: FSO = FSO file objects?


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: 79137913 en 13 Julio 2011, 20:12 pm
HOLA!!!

Es por que no reconoce a los Msu como archivos ejecutables...

Lo solucionas usando ShellExecute (un api de windows)

Declara esto:
Código
  1. 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
  2.  

Y en donde dice shell reemplaza por esto:
Código
  1.        ShellExecute Me.hwnd, "open", stPath & archivo, vbNullString, "c:\", False
  2.        'Nota el path de ejecucion es este ^
  3.  

GRACIAS POR LEER!!!


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 13 Julio 2011, 20:25 pm
Perdona por ser pesado, pero es que es un problema tras otro :(

me da error el shellexecute
Código:
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í:
Código
  1. Private Sub Command1_Click()
  2.  
  3. 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
  4. Const stPath As String = "C:\Users\Administrador\Desktop\"
  5. Dim archivo As String
  6.    archivo = Dir(stPath & "*.msu")
  7.    While archivo <> ""
  8.    MsgBox (FName & archivo)
  9.         ShellExecute Me.hwnd, "open", stPath & archivo, vbNullString, "C:\Users\Administrador\Desktop\", False
  10.        archivo = Dir
  11.    Wend
  12. End Sub


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: 79137913 en 13 Julio 2011, 20:28 pm
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!!!


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 13 Julio 2011, 20:30 pm
Acabo de ponerlo arriba del todo, me sigue dando el mismo error  :xD


 >:(



Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: raul338 en 13 Julio 2011, 20:34 pm
Asi deberia estar

Código
  1. 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
  2.  
  3. ' Espacio en blanco, u otros procedimentos
  4.  
  5. Private Sub Command1_Click()
  6. Const stPath As String = "C:\Users\Administrador\Desktop\"
  7. Dim archivo As String
  8.    archivo = Dir(stPath & "*.msu")
  9.    While archivo <> ""
  10.    MsgBox (FName & archivo)
  11.         ShellExecute Me.hwnd, "open", stPath & archivo, vbNullString, "C:\Users\Administrador\Desktop\", False
  12.        archivo = Dir
  13.    Wend
  14. End
  15.  


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


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 13 Julio 2011, 20:37 pm
que raro, juraría que lo puse exactamente que raul338 XD

me ha funcionado, gracias


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: 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


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 16 Julio 2011, 02:20 am
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?

Código:
' 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?
Código:
ShellAndWait "c:\programa.exe", ¿window_style?


gracias..


EDITO:
solucionado

ShellAndWait "C:\Program Files\Defraggler\Defraggler.exe", vbNormalFocus

Pero no funciona con archivos con extensión ".msu"

 :-\

no me sirve


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: seba123neo en 16 Julio 2011, 05:45 am
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.


Título: Re: [VB6] Una ayuda con mi primer programa... plz :)
Publicado por: SuperDraco en 16 Julio 2011, 13:04 pm
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!