Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 3 de 3
Ir a la página Anterior  1, 2, 3
 
Dispositivos USB En Listbox (SOLUCIONADO)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
El problema no pasaba por el wait, pasaba porque se redireccionaban los datos desde el terminal y desde gambas al mismo fichero y no podia capturar la salida, pero eso esta arreglado, daba igual que hubiese un wait puesto, de todos modos sigo tu consejo y lo he quitado. Mira, al terminar de hacer el fichero, soplo tambien me paso un codigo para listar el fichero en un Listbox, pero me da errores de variable. Te adjunto el codigo para que lo mires porque no se por donde van los tiros, te agradeceria que me explicases el fallo asi lo termino de comprender, porque no lo encuentro el problema. Desde ya gracias.

PUBLIC SUB Button1_Click()
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String
DIM removableleer AS String[]
DIM unidades AS String
DIM Vendedor AS String
DIM Modelo AS String
DIM Reno AS String
DIM Tamano AS String
DIM f AS File



unidades = Temp
SHELL "ls /sys/block | grep sd >> " & unidades WAIT              ' ############ SACO EL CONTENIDO DE UNIDADES SD ##############
SHELL "ls /sys/block | grep hd >> " & unidades WAIT              ' ############ SACO EL CONTENIDO DE UNIDADES HD ##############
direccion = Split(File.Load(unidades), gb.NewLine)               ' ############ LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(File.Load(unidades), gb.NewLine)                    ' ############ LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)
KILL unidades

FOR Contadordev = 0 TO path.Max                      ' ##############################################################################
path[Contadordev] = "/dev" &/ path[Contadordev]      ' ############## AÑADO EL /DEV/ A PATH PARA USARLO DE REFERENCIA ###############
NEXT                                                 ' ##############################################################################

removable = Temp
f = OPEN removable FOR CREATE
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor" TO Vendedor ' ######## METO EL FABRICANTE EN UNA VARIABLE Vendedor ########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model" TO Modelo    ' ######## AÑADO MODELO A una variable Modelo #################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable" TO Reno         ' ######## AÑADO REMOVABLE A UNA VARIABLE Reno ################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size" TO Tamano            ' ######## AÑADO TAMAÑO A VARIABLE TAMANO #####################
PRINT #f, direccion[Contadorrem] & "\n" & Vendedor; Modelo; Tamano; Reno        ' ######## AÑADIR TODO A ARCHIVO ##############################
NEXT
CLOSE #f


f = OPEN removable FOR INPUT
DO WHILE NOT Eof(f)
INPUT #f, direccion; Vendedor; Modelo; Tamano; Reno
   list1.add(direccion & Vendedor & Modelo & (Tamano / 2 / 1024) & "K" & IIf(Reno = "1", "Si", "No"))
LOOP
CLOSE #f
KILL removable


END

 



 
última edición por Pablo-GNU el Domingo, 31 Enero 2010, 10:37; editado 1 vez 
Pablo-GNU - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Hola
Shell admite dos formatos distintos e incompatibles entre sí.
Citar:
[ Process = ] SHELL Command [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Name ]

SHELL Command TO Variable


De manera que si utilizara TO no podría usar WAIT.
Shell

A modo de información añado que en el primer formato devuelve un objeto process que tiene sus propios eventos y métodos.

Por último utilizar exec en vez de shell es mas rápido y ocupa menos memoria porque shell hace lo mismo pero invocando a bash para hacerlo. Es decir shell llama a bash o sh o ksh o el que sea y le pasa el string a ejecutar. Exec directamente ejecuta el comando.

Respecto al problema de las variables que dices veo que la variable que se pone tras el TO debe ser string.

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Creo que el problema estaba mas bien en las variables que utilizabamos para el DO, que no podian ser las mismas que para el FOR. Ahora ya esta, ya lista los dispositivos de manera correcta, he tenido que corregir el problema de caracteres en blanco ya que afectaba a la hora de leer del F. Que ta parece? Solo nos queda el hacer el combobox al seleccionar el valor, por ejemplo, pendrive 4GB, nos devuelva a una variable su direccion correspondiente. He pensado en hacer que al volcar los datos al combobox y sobrevivir al filtro de si son desmontables o no, tambien guarde la direccion en una array, entonces al seleccionar el list[2], nos apunte al valor 2 del array, asi al estar alineados, se correspondan tambien... tu que crees? Saludos y gracias, ya va quedando menos!!!!

PUBLIC SUB Button1_Click()
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String
DIM removableleer AS String[]
DIM unidades AS String
DIM Vendedor AS String
DIM Modelo AS String
DIM Reno AS String
DIM Tamano AS String
DIM dire AS String
DIM Vende AS String
DIM Mode AS String
DIM Re AS String
DIM Tama AS Float
DIM f AS File


ComboBox1.Clear
unidades = Temp
SHELL "ls /sys/block | grep sd >> " & unidades WAIT              ' ############ SACO EL CONTENIDO DE UNIDADES SD ##############
SHELL "ls /sys/block | grep hd >> " & unidades WAIT              ' ############ SACO EL CONTENIDO DE UNIDADES HD ##############
direccion = Split(File.Load(unidades), gb.NewLine)               ' ############ LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(File.Load(unidades), gb.NewLine)                    ' ############ LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)
KILL unidades

FOR Contadordev = 0 TO path.Max                      ' ##############################################################################
path[Contadordev] = "/dev" &/ path[Contadordev]      ' ############## AÑADO EL /DEV/ A PATH PARA USARLO DE REFERENCIA ###############
NEXT                                                 ' ##############################################################################

removable = Temp
f = OPEN removable FOR CREATE
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor" TO Vendedor ' ######## METO EL FABRICANTE EN UNA VARIABLE Vendedor ########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model" TO Modelo    ' ######## AÑADO MODELO A una variable Modelo #################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable" TO Reno         ' ######## AÑADO REMOVABLE A UNA VARIABLE Reno ################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size" TO Tamano            ' ######## AÑADO TAMAÑO A VARIABLE TAMANO #####################
Vendedor = Trim(Vendedor)
Modelo = Replace(Trim$(Modelo), " ", "")
Reno = Trim(Reno)
Tamano = Trim(Tamano)
PRINT #f, direccion[Contadorrem];; Vendedor;; Modelo;; Tamano;; Reno        ' ######## AÑADIR TODO A ARCHIVO ##############################
NEXT
CLOSE #f

f = OPEN removable FOR INPUT                         ' ####################### LOOP PARA INTRODUCIR VALOR A COMBOBOX ###########################
DO WHILE NOT Eof(f)
INPUT #f, dire; Vende; Mode; Tama; Re
   IF Re = "1" THEN
   ComboBox1.Add(Vende & " " & Mode & " Capacidad: " & (Round((Tama / 2048), 2)) & " Mb")
   ENDIF
LOOP  
CLOSE #f
KILL removable

END


EDITO:

Mira si queda menos, que de momento ya esta!! Os pego el codigo para ver si lo veis bien o le veis algun fallo, ya que ahora que funciona, si se optimiza o se queda asi, lo pegare en la seccion de Aplicaciones/Fragmento de codigo, para que si alguien lo necesita lo pueda utilizar. Muchas gracias a todos, os habeis portado muy bien conmigo... Nos seguimos hablando y viendo por aqui... para lo que necesiteis, aqui estoy... gracias..

PUBLIC SUB Button1_Click()
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String
DIM removableleer AS String[]
DIM unidades AS String
DIM Vendedor AS String
DIM Modelo AS String
DIM Reno AS String
DIM Tamano AS String
DIM dire AS String
DIM Vende AS String
DIM Mode AS String
DIM Re AS String
DIM Tama AS Float
DIM f AS File


ComboBox1.Clear
unidades = Temp
SHELL "ls /sys/block | grep sd >> " & unidades WAIT              ' ############ SACO EL CONTENIDO DE UNIDADES SD ##############
SHELL "ls /sys/block | grep hd >> " & unidades WAIT              ' ############ SACO EL CONTENIDO DE UNIDADES HD ##############
direccion = Split(File.Load(unidades), gb.NewLine)               ' ############ LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(File.Load(unidades), gb.NewLine)                    ' ############ LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)
KILL unidades

removable = Temp
f = OPEN removable FOR CREATE
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor" TO Vendedor ' ######## METO EL FABRICANTE EN UNA VARIABLE Vendedor ########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model" TO Modelo    ' ######## AÑADO MODELO A una variable Modelo #################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable" TO Reno         ' ######## AÑADO REMOVABLE A UNA VARIABLE Reno ################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size" TO Tamano            ' ######## AÑADO TAMAÑO A VARIABLE TAMANO #####################
Vendedor = Trim(Vendedor)
Modelo = Replace(Trim$(Modelo), " ", "")
Reno = Trim(Reno)
Tamano = Trim(Tamano)
PRINT #f, direccion[Contadorrem];; Vendedor;; Modelo;; Tamano;; Reno        ' ######## AÑADIR TODO A ARCHIVO ##############################
NEXT
CLOSE #f

f = OPEN removable FOR INPUT                         ' ####################### LOOP PARA INTRODUCIR VALOR A COMBOBOX ###########################
DO WHILE NOT Eof(f)
INPUT #f, dire; Vende; Mode; Tama; Re
   IF Re = "1" THEN
   ComboBox1.Add(Vende & " " & Mode & " Capacidad: " & (Round((Tama / 2048), 2)) & " Mb" & " " & dire)
   ENDIF
LOOP  
CLOSE #f
KILL removable

END

PUBLIC SUB ComboBox1_Click()
DIM ar AS String
DIM edit AS File
DIM a AS String
DIM b AS String
DIM c AS String
DIM d AS String
DIM e AS String
DIM local AS String

ar = Temp
edit = OPEN ar FOR CREATE
PRINT #edit, ComboBox1.Text
CLOSE #edit

edit = OPEN ar FOR INPUT
INPUT #edit, a; b; c; d; e; local
unidad.Text = local
unipath.Text = "/dev/" & local
CLOSE #edit
KILL ar

END

 



 
última edición por Pablo-GNU el Domingo, 31 Enero 2010, 20:25; editado 1 vez 
Pablo-GNU - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Citar:

EDITO:
Mira si queda menos, que de momento ya esta!! Os pego el codigo para ver si lo veis bien o le veis algun fallo, ya que ahora que funciona, si se optimiza o se queda asì


Sí que se puede optimizar, pero lo primero es determinar el objetivo de esa optimización.

Para optimizar el código para facilitar su mantenimiento te sugiero empezar con estas tareas:

  • Usa sangrías (indentación) para mostrar el nivel de anidamiento.
  • Quita los símbolos # de los comentarios porque dificultan la lectura del código.
  • Deja únicamente los comentarios que sean pertinentes (lo que no sea evidente al leer el código).
  • Usa nombres completos para los nombres de las variables con el estilo YoSoyUnaVariable.
  • Parece haber variables duplicadas en el código, revísalas y elimina las que efectivamente estén duplicadas.
  • Revisa que los nombres de variables sean apropiados para lograr que el código sea autoexplicativo.


Bien, esto para empezar. Si quieres luego seguimos con más.

Saludos cordiales.
 



 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox (SOLUCIONADO) 
 
Yo creo que podrías hacer una clase con ese software de tal forma que tuvieras con un único método ObtenerUsb y que tuviera un parámetro true o false.

Si es true te devuelve los usb montados. Si es false te devuelve todos los usb del sistema.

De esa forma en tus aplicaciones con solo incluir esa clase podrías llamar a ese método y obtener un array con todos los usb que quieres bien para meterlos en un combo o para hacer con ellos lo que quieras.

Si decides hacerlo asegúrate de que borras los temporales que creaste para dejar el sistema limpio.

Es una sugerencia nada mas.
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Listbox camilo02 Controles/Librerías/Componentes 5 Viernes, 13 Abril 2012, 02:40 Ver último mensaje
camilo02
No hay nuevos mensajes Ayuda Con Listbox soldadozero Controles/Librerías/Componentes 12 Sabado, 15 Junio 2013, 18:24 Ver último mensaje
jguardon
No hay nuevos mensajes Conocer Con Las Funciones Externas De ALSA... vuott Aplicaciones/Fragmentos de Código 2 Sabado, 31 May 2014, 01:45 Ver último mensaje
vuott
No hay nuevos mensajes Conseguir Informaciones Generales De Los D... vuott Aplicaciones/Fragmentos de Código 6 Viernes, 21 Septiembre 2018, 13:40 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 3 de 3
Ir a la página Anterior  1, 2, 3

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron