Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ejecutar lista de un Listbox

Estas en el tema de Ejecutar lista de un Listbox en el foro de Visual Basic clásico en Foros del Web. Bueno gente de por si no soy de pedir ayuda pero bueno resulta que necesito solucionar este problemita lo antes posible ya que tengo que ...
  #1 (permalink)  
Antiguo 13/08/2010, 13:22
Avatar de jeepers  
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Exclamación Ejecutar lista de un Listbox

Bueno gente de por si no soy de pedir ayuda pero bueno resulta que necesito solucionar este problemita lo antes posible ya que tengo que formatear mi PC.
Bueno paso a comentar mi problema, resulta que tengo que formatear mi PC y quiero hacer una instalación limpia y sin errores para cuando instale el Windows , y nada me convence mas que instalar manualmente todos los programas, ya veré de algunos que no tienen problemas con una instalación desatendida, pero bueno resulta que tengo unos mas o menos 50 a 70 programas para instalar después de Windows, hice un programita en VB 6.0 pero tengo problemas al intentar ejecutar los programas que encuentro dentro de un listbox, por medio de una búsqueda a una carpeta especifica encuentro los archivos instaladores y la idea es ejecutarlos uno por uno con obviamente una espera entre uno y el otro.

Datos:
-El programa busca archivos los que yo especifique, en este caso instaladores (.exe).
-Hay dos ejecuciones:
1. Ejecutar todo = Ejecuta todo el listado.
2. Ejecutar Selección = Ejecuta lo seleccionado.
*Acá no hay problema de buscar dos códigos ya que con uno hago los dos.

Resumen:

Hacer que al apretar el botón "Ejecutar lista" ejecute todos los programas de la lista con espera a que finalice ese proceso y después ir ejecutando los demás.

Espero que puedan ayudarme, desde ya muchas gracias si necesitan algo mas me avisan, y si encuentro solución la posteo.

* Por ultimo si no encuentro esto, lo que haría es guardar el contenido del listbox, ya sea lo seleccionado o todo y ejecutarlo con un batch. Cual seria la mejor manera?

Última edición por jeepers; 13/08/2010 a las 13:47
  #2 (permalink)  
Antiguo 17/08/2010, 06:42
Avatar de A.H.H  
Fecha de Ingreso: mayo-2007
Ubicación: IRUN,(GUIPUZCOA) España
Mensajes: 178
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Ejecutar lista de un Listbox

Hola yo tengo un ejemplo de lo que tu pides, tengo un listbox con estilo checkbox(style=1).
lo que hago es mediante un select case ver las opciones que estan clickcadas de la lista del listbox y luego ir llamando a cada programa mediante una api que existe shellandwait que lo que hace es llamar a un proceso y esperar a que termine este.

la api shellandwait la pones en un MODULO:

Cita:
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Const STATUS_PENDING = &H103&
Private Const PROCESS_QUERY_INFORMATION = &H400

Public Function ShellandWait(ExeFullPath As String, _
Optional TimeOutValue As Long = 0) As Boolean
Dim lInst As Long
Dim lStart As Long
Dim lTimeToQuit As Long
Dim sExeName As String
Dim lProcessId As Long
Dim lExitCode As Long
Dim bPastMidnight As Boolean
On Error GoTo ErrorHandler
lStart = CLng(Timer)
sExeName = ExeFullPath
'Deal with timeout being reset at Midnight
If TimeOutValue > 0 Then
If lStart + TimeOutValue < 86400 Then
lTimeToQuit = lStart + TimeOutValue
Else
lTimeToQuit = (lStart - 86400) + TimeOutValue
bPastMidnight = True
End If
End If
lInst = Shell(sExeName, vbNormalFocus)
lProcessId = OpenProcess(PROCESS_QUERY_INFORMATION, False, lInst) 'Optenemos el ProcessID
Do 'Aqui se genera un ciclo hasta que el proceso sea distinto de pendiente, o sea, Alla terminado.
Call GetExitCodeProcess(lProcessId, lExitCode) ' Optenemos el si hay exits code o todavia esta en ejecucion (pending)
DoEvents
If TimeOutValue And Timer > lTimeToQuit Then
If bPastMidnight Then
If Timer < lStart Then Exit Do
Else
Exit Do ' Se sale del ciclo si se acavo el tiemo de espera
End If
End If
Loop While lExitCode = STATUS_PENDING
ShellandWait = True
ErrorHandler:
ShellandWait = False
Exit Function
End Function
EN EL FORMULARIO EL SELECT CASE depende de donde lo quieras en un boton o ......

Cita:
dim retval as variant
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
Select Case List1.List(i)
Case "Instalar el uno"'LOS CASES TIENEN QUE IR ESCRITOS IGUAL QUE EN LA LISTA'
...........
..........
retval = ShellandWait(RUTA AL EXE)
case "Instalar el dos"
........
.......
retval = ShellandWait(RUTA AL EXE)

End Select
End If
Next
SALU2 ESPERO TE SIRVA
  #3 (permalink)  
Antiguo 17/08/2010, 13:02
Avatar de A.H.H  
Fecha de Ingreso: mayo-2007
Ubicación: IRUN,(GUIPUZCOA) España
Mensajes: 178
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Ejecutar lista de un Listbox

Hola te pongo un ejemplo mejor dentro de un command1(boton)
para ejecutar la calculadora y el notepad de windows.
en el listbox depende del que selecciones lo ejecuta o si seleccionas los 2 hasta que no cierres el notepad no se quita la calculadora o al reves.

para el ejemplo añades el modulo anterior como te dije en el post anterior y en el formulario añades un boton command1 y un listbox con style=1 checkbox.

Cita:
Private Sub Form_Load()
List1.AddItem "editortexto"
List1.AddItem "calculadora"
End Sub

Private Sub Command1_Click()
Dim retval As Variant
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
Select Case List1.List(i)
Case "editortexto" 'LOS CASES TIENEN QUE IR ESCRITOS IGUAL QUE EN LA LISTA(additem)'
retval = ShellandWait(Environ("windir") + "\System32\notepad.exe")
Case "calculadora"
retval = ShellandWait(Environ("windir") + "\System32\calc.exe")
End Select
End If
Next
End Sub
salu2
  #4 (permalink)  
Antiguo 19/08/2010, 01:31
Avatar de jeepers  
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Ejecutar lista de un Listbox

gracias A.H.H por responder pero creo que aca tendria que llamar uno por uno a los programas y el problema es que no siempre seran los mismos programas, con el mismo nombre o la misma cantidad; el tema es un comando que ejecute la lista del listbox y que de programa en programa espere a que termine. Lo que no consigo es ese comando para ejecutar la lista del listbox.

Gracias igual, ya habia probado con algunos comandos que pusiste pero probare de nuevo.

Última edición por jeepers; 19/08/2010 a las 01:48
  #5 (permalink)  
Antiguo 19/08/2010, 13:13
Avatar de A.H.H  
Fecha de Ingreso: mayo-2007
Ubicación: IRUN,(GUIPUZCOA) España
Mensajes: 178
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Ejecutar lista de un Listbox

Hola de nuevo.
creo que no viste bien el ejemplo.

El ejemplo ejecuta solo los programas que tu elijas de la lista y espera a que termine uno para ir al siguiente clickado(elegido) por eso te dije que pusieras el listbox en style=2 checkbox.

te puse solo 2 ejemplos en la lista el notepad y la calculadora de windows
si te fijas bien y eliges los 2 programas para ejecutar, HASTA QUE NO CIERRES EL NOTEPAD, NO EJECUTARA LA CALCULADORA.
Claro el ejemplo se ve mejor con una lista mas larga de programas.


si le pones mas programas a ejecutar al select case, veras que depende de los que eligas los EJECUTARA Y ESPERARA A QUE TERMINE UNO PARA SALTAR Y EMPEZAR A EJECUTAR EL OTRO.

REVISALO......

abre un proyecto para el ejemplo:
-agregas un modulo y dentro copias el codigo del modulo
-al formulario le colocas un listbox con style checkbox
-y un boton command1 para ejecutar
y dentro del formulario copias y pegas este codigo para probar el ejemplo:

Private Sub Form_Load()
List1.AddItem "editortexto"
List1.AddItem "calculadora"
End Sub

Private Sub Command1_Click()
Dim retval As Variant
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
Select Case List1.List(i)
Case "editortexto" 'LOS CASES TIENEN QUE IR ESCRITOS IGUAL QUE EN LA LISTA(additem)'
retval = ShellandWait(Environ("windir") + "\System32\notepad.exe")
Case "calculadora"
retval = ShellandWait(Environ("windir") + "\System32\calc.exe")
End Select
End If
Next
End Sub




salu2

Última edición por A.H.H; 19/08/2010 a las 13:20
  #6 (permalink)  
Antiguo 19/08/2010, 15:52
Avatar de jeepers  
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Ejecutar lista de un Listbox

A ok AHH perdona ahora mismo me pondré a terminar ese proyecto y te cuento gracias nuevamente.

--

Me sale un error de que "se esperaba una variable o un procedimiento y no un modulo", al intentar ejecutar un archivo de la lista.
Ahora creo yo que ese error me lo da al tratar de tomar la dirección del archivo, estoy buscando para que al pedir la ruta la saque desde el listbox ya que el listbox sale toda la ruta del archivo.

Asi puse el codigo:

Private Sub EjecutarT_Click()
Dim retval As Variant
Dim i As Integer
Dim sExeName As String
For i = 0 To lstResult.ListCount - 1
If lstResult.Selected(i) = True Then
Select Case lstResult.List(i)
Case "Instalar el uno"
retval = ShellandWait(Environ(sExeName))
End Select
End If
Next
End Sub

y el modulo como lo escribiste con el nombre "ShellandWait".

Última edición por jeepers; 19/08/2010 a las 16:21
  #7 (permalink)  
Antiguo 20/08/2010, 14:17
Avatar de A.H.H  
Fecha de Ingreso: mayo-2007
Ubicación: IRUN,(GUIPUZCOA) España
Mensajes: 178
Antigüedad: 16 años, 11 meses
Puntos: 4
Respuesta: Ejecutar lista de un Listbox

Hola el comando environ es para usar las variables locales como:

en msdos %userprofile% o %windir%...............

puse environ para la ruta al notepad para no escribir C:\taltal\tal

No llames al modulo shellandwait pues tiene una funcion dentro con el mismo nombre
  #8 (permalink)  
Antiguo 26/08/2010, 18:01
Avatar de jeepers  
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Ejecutar lista de un Listbox

ok probando, gracias, ahora veo cual era el problema. Despues te cuento si lo pude hacer
  #9 (permalink)  
Antiguo 01/09/2010, 01:51
Avatar de jeepers  
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Ejecutar lista de un Listbox

Hola A.H.H de nuevo, te cuento que sigo con el problema de la ruta, no toma la ruta desde el listbox, pero creo que ya el problema soy yo jajaja tendre que leer un poco mas, igual agradezco tu ayuda; seguire buscando; coloco aca la funcion del boton que estoy probando, osea es el codigo que me pasaste y otro que estoy utilizando.

este es el que ahora estoy probando:

- Boton ejecutar archivos seleccionados -

Private Sub EjecutarS_Click()
Dim pid As Long
Dim i As Integer
For i = 0 To lstResult.ListCount - 1
If lstResult.Selected(i) = True Then
pid = Shell(lstResult.Selected(i), vbNormalFocus)
Else
MsgBox "Archivo/s no seleccionado/s"
End If
Next
End Sub

Aca el error que tambien me da es que no toma la ruta del listbox con el mensaje (no se ha encontrado el archivo)y que supongamos que en el listbox son 10 programas/archivos al mostrar que ningun archivo/programa esta seleccionado me sale la misma cantidad de mensajes.

El mensajito lo puse para saber si el codigo funcionaba pero despues pense que seria bueno dejarlo.

Igual creo que tendre que leer un poco mas para dar justo con lo que busco e incluir en lo que tengo, desde ya muchas gracias por tu ayuda.

Etiquetas: lista, listbox, shell, shellexecute
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.