Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente
 
Dispositivos USB En Listbox (SOLUCIONADO)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Pues yo lo he probado y le he dado varias veces y no me muestra nada, no se ha que se debera, si con udev si le interrogas bien le sacas de todo, pero claro podrias saber si es extraible o no?

PUBLIC SUB Button1_Click()
DIM listado AS String
DIM corte AS String[]
DIM Contador AS Integer
DIM ruta AS String[]

SHELL "ls /sys/block" TO listado
corte = Split(listado, gb.NewLine)

FOR Contador = 0 TO corte.Max
ruta[Contador] = "/dev/" & corte[Contador]
NEXT


END

De momento Con esto he conseguido sacar las subcarpetas presentes en /sys/block, pero el problema que tengo es que al intentar añadirlas a ruta metiendole delante el /dev/ para formar el path del dispositivo fisico (de momento sin filtrar), no consigo sacarlo. Me devuelve error Object Null en la linea de accion dentro del FOR. Sigo investigando... Gracias
 



 
última edición por Pablo-GNU el Viernes, 29 Enero 2010, 10:14; 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 
 
PUBLIC SUB Form_Open()
Dim Arbol as new treeview(me)
DIM FTemp AS String, Var AS String
me.arrangement=arrange.fill

FTemp = Temp 'crear un nombre de archivo temporal
SHELL ("lsusb >" & fTemp) wait  'Llenar FTemp con la información requerida
LlenarArbol(fTemp,Arbol) 'Llenar el arbol
KILL FTemp 'borrar el archivo temporal
END
 


Y luego la rutina LlenarArbol
PRIVATE SUB LlenarArbol(ftemp AS String, Arbol as treeview)
 DIM F AS file, Linea AS String, Partes AS String[], Clave AS String, Dev AS String, Nombre AS String    
 arbol.Add("Bus 0", System.Host, Stock["16/home"]) 'poner el valor raíz
 
 f = OPEN (ftemp) FOR READ
 f.EndOfLine = gb.Unix
 
 DO WHILE NOT Eof(f)
   LINE INPUT #f, linea 'leer la línea entera
   partes = Split(linea, ":") 'dividirla en tres partes por el :
   clave = Left(partes[0], 7) 'la clave será algo como 'Bus 1'
   insertarbus(clave,Arbol) 'insertar la el bus en el arbol con padre raíz
   Dev = Right(partes[0], 3) 'obtener el dev nº
   Nombre = Mid(partes[2], 5) 'obtener el nombre del dispositivo
   insertardev(dev, nombre, clave,Arbol) 'insertar dispositivo en arbol
 LOOP
 END
 
 PRIVATE SUB insertarbus(Clave AS String, Arbol as treeview)
 TRY arbol.Add(clave, Clave, Stock["16/connect"], "Bus 0")    
 FINALLY
 CATCH

 END
 
 PRIVATE SUB insertardev(dev AS String, nombre AS String, padre AS String, Arbol as treeview)
 TRY arbol.Add(padre & "/" & dev, dev & ": " & nombre, Stock["16/attach"], padre)
 TRY arbol.item.EnsureVisible
 FINALLY
 CATCH
 END

Ya te dije que solo le faltaba un wait porque si no salía nada era por tiempo.

Y en cuanto a lo de udev una línea de lsusb es esta:
Citar:
Bus 006 Device 003: ID 03f0:3e17 Hewlett-Packard

Y de ahí sabemos que 03f0 es el vendor y que 3E17 es el idProduct de manera que solo por ver esta línea tenemos subsystem="USB, Vendor="03F0" e IdProduct 3E17 con lo cual se puede obtener la información que se quiera sobre ello entre ella el atributo renovable que será 1 si es renovable y 0 si no lo es. Supongo que la opción mas sencilla si quieres mas información que la que sale del lsusb es mediante udevinfo. También hay información sobre el tamaño del dispositivo y no se cuantas cosas mas.

No estoy nada ducho en eso de reglas udev así que es probable que haya opciones mejores. En cualquier caso toma esto como ejemplo de volcar un comando linux a un archivo y extraer lo que conviene. Ese treeview está sacada únicamente de lo que se ve en un usb. Si luego te quieres ir con esa información a buscar el dispositivo en Udev tendrás toda la información que tenga linux sobre él.

Un ejemplo de interrogar a udev por su lugar
udevinfo -a -n /dev/sdb

Eso así sin mas te sacará toda la información que tenga de ese dispositivo y luego se irá a su dispositivo padre y hará igual y luego al abuelo, ..., etc hasta llegar al dispositivo de la placa que gestiona USB de manera que por poder incluso puedes hacer que al pinchar el usb te salga su dispositivo padre con todos sus datos y al pinchar en él la info del abuelo, ..., etc.
           

[Edito para no responderme a mi mismo]
He estado mirando como encontrar toda la info de un usb interrogando a udev y tal y he llegado a la siguiente conclusión:

1. Averiguar que dispositivos de almacenamiento están montados
Citar:
ls /dev/disk/by-uuid -la | grep /sd


Pongamos que de alli he sacado tres líneas como estas
Citar:
lrwxrwxrwx 1 root root  10 ene 29 21:49 1A608B95608B7673 -> ../../sda1
lrwxrwxrwx 1 root root  10 ene 29 21:49 1d31438e-599e-4d5e-9c48-0d6d76d6ffed -> ../../sda2
lrwxrwxrwx 1 root root  10 ene 29 21:49 4A73-4A71 -> ../../sdb1


Ahora interrogo a udev sobre esos dispositivos (sda1 y sda2 forman parte del dispositivo sda pero probablemente cuesta menos que haga los dos a que quite letra y examine el dispositivo sda que es el que interesa
Citar:

udevinfo -a -n /dev/sda1 'para obtener información de /dev/sda1
udevinfo -a -n /dev/sda2 'para obtener información de /dev/sda2
udevinfo -a -n /dev/sdb1 'para obtener información de /dev/sdb1

Pongo el resultado de examinar /dev/sdb1
Citar:
Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/block/sdb/sdb1':
    KERNEL=="sdb1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{start}=="8064"
    ATTR{size}=="7815296"
    ATTR{stat}=="      51      103      987      204        0        0        0        0        0      148      204"

  looking at parent device '/block/sdb':
    KERNELS=="sdb"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{removable}=="1"
    ATTRS{size}=="7823360"
    ATTRS{capability}=="13"
    ATTRS{stat}=="      76      205     2003      308        0        0        0        0        0      196      308"

Es mucho mas largo porque sale desde sdb1 a su padre que es sdb a su abuelo que será el host usb en placa, el bisabuelo que será otro dispositivo en placa, ..., etc, pero los que nos importan son estos dos. El primero es sdb1 y su padre es sdb que es el dispositivo en sí mismo. Allí está la propiedad "removable" que en este caso es 1 con lo que se que estoy ante un dispositivo usb removible y montado.

Si quisiera saber mas podría mirar en /etc/mtab o en /proc/mounts donde habrá una línea como esta
Citar:
/dev/sdb1 /home/casa/m vfat rw 0 0

de la que obtengo el sistema de ficheros con que está montado el dispositivo y en que directorio está montado, con lo que ya tengo toda la información que el sistema tiene sobre ese dispositivo.

Un poco lioso pero desde el punto de vista informático fácil porque para los humanos andar buscando strings es una lata pero para una máquina es un momento así que todo es volcar esos comandos a un archivo o string y luego buscar la string adecuada. Suena complicado cuando se lee, pero para un ordenador no es nada.

Hay otra forma de hacer esto a traves del vendor e idproduct y también a traves del serial, pero todos vienen a hacer lo mismo porque la información está repartida de esa forma.

Ha estado entretenido esto je je je
   
[/editado]
 



 
última edición por soplo el Sabado, 30 Enero 2010, 00:19; editado 3 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Tambien me parece un buen metodo, la verdad, sobre todo el udevinfo, pero creo que tienes que tener una version anterior a ubuntu 9.04 o no usar ubuntu, porque udevinfo ha sido reemplazado por udevadm, y el comando se formularia de esta manera:

udevadm info --attribute-walk --name /dev/sdg


Ahora yo quiero preguntarte una cosa y por eso era el tema de usar el /sys/block/, de que manera trata a las pcmcia? Se que estan en desuso, pero en mi trabajo hay portatiles con lector de compact flash por pcmcia y posiblemente usen esas para montar los dispositivos, cambiando tambien de sdx a hdx. Con lo que creo que lsusb no nos devolveria nada respecto a ella, por eso me gusta la parte primera de tu ultimo ejemplo que no usas el lsusb y usas informacion de disco, eso tambien esta muy bien. Y el comando de udevadm esta muy bien porque con guardar todo lo que veas es muy sencillo.

Ademas si por ahorrar filtro, le metes el udevadm a alguno de los dispositivos virtuales, puedes pedir que busque en el resultado presente la linea de removable = "1" tambien y al estar a 0 que la descarte.

SHELL "ls /sys/block" TO listado
corte = Split(listado, gb.NewLine)

Entonces asi tienes ya todos los ramx, loopx. sdx. y hdx. Y con eso ya preguntar directamente a udevadm para poder buscar el removable "1", el que lo tenga "0" a la basura y el que lo tenga a "1", Cojemos su fabricante y modelo y a una variable con la referencia a su dispositivo fisico, que te parece? Es mas corto asi que todo lo que deciamos antes?

EDITO Al igual que tu para no contestarme a mi mismo

He hecho esto...

PUBLIC SUB Button1_Click()
DIM salida AS String
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String




SHELL "ls /sys/block" TO salida                     ' ################## SACO EL CONTENIDO DE UNIDADES #################
direccion = Split(salida, gb.NewLine)               ' ################## LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(salida, gb.NewLine)                    ' ################## LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)

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

removable = Temp
FOR Contadorrem = 0 TO path.Max
SHELL "udevadm info --attribute-walk --name " & path[Contadorrem] & " >>" & removable WAIT
NEXT

END


Entonces saco todos los datos de todos los ficheros que me interesa, Pero me he dado cuenta de que el comando se aplica correctamente, pero no me muestra el nombre de la compact Flash que tengo pinchada en el lector de tarjeta, pero no me muestra el nombre de la Compact Flash, que seria lo interesante, ya que sino me mostraria simpre el Lector y todas sus unidades posibles y no la que realmente tiene pinchada, por eso te decia de hacerlo leyendo ficheros desde /sys/block. Como lo ves?

Seria usar lo siguiente, el lugar de:

removable = Temp
FOR Contadorrem = 0 TO path.Max
SHELL "udevadm info --attribute-walk --name " & path[Contadorrem] & " >>" & removable WAIT
NEXT


Por esto otro:

removable = Temp
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable >>" & removable WAIT
NEXT


Y ahora tendriamos que filtrar por los valores que obtenga un "1", y relacionarlos con su correspondiente valor en direccion[] osea el /sdb/ por ejemplo... una vez sacado eso, seria repetir el codigo otra vez pero esta vez que le meta lo que seria el fichero vendor y el device ubicado en /device, pero bueno eso seria mas adelante, una vez resuelto lo anterior, y la verdad es que se me escapa bastante, tu como lo harias? Gracias por hecharme una mano... de verdad...

EDITO 2:

Ahora he probado a hacer lo siguiente:

DIM salida AS String
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String
DIM removableleer AS String[]




SHELL "ls /sys/block" TO salida                     ' ################## SACO EL CONTENIDO DE UNIDADES #################
direccion = Split(salida, gb.NewLine)               ' ################## LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(salida, gb.NewLine)                    ' ################## LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)

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


removable = Temp
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor >>" & removable WAIT   ' ##### AÑADO FABRICANTE A TEMPORAL #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model >>" & removable WAIT    ' ##### AÑADO MODELO A TEMPORAL #########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable >>" & removable WAIT       ' ##### AÑADO REMOVABLE A TEMPORAL #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size >>" & removable WAIT            ' ##### AÑADO TAMAÑO A TEMPORAL #########
NEXT
removableleer = Split(File.Load(removable), gb.NewLine)
KILL removable



He probado ha volcaro todos esos valores a un temporal y cargarlos en una array, asi tengo ya toda la salida de valores en gambas, pero claro, tendria que tener una manera de poder filtrarlo ya que, por ejemplo en las virtuales y en las ram no existe vendor y device, de hecho en nada mas que las ram existe dato, que seria el tamaño. Ahora habria que encontrar la manera de filtrarlo... Como lo ves?
 



 
última edición por Pablo-GNU el Sabado, 30 Enero 2010, 14:12; editado 7 veces 
Pablo-GNU - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Es que tu todo lo haces haciendo un ls a /sys/block y yo creo que eso es un error. Cualqueir dispositivo de disco estará montado y por tanto aparecerá en /etc/mtab o en /proc/mounts o podría estar desmontado pero estar presente en /etcl/fstab.

Así que basta con revisar /etc/mtab lpara ver que dispositivos hay. Te quedas los que no te interesan y preguntas por el resto.
Por ejemplo
cat /proc/mounts | grep /sd >Dispositivos.txt
cat /proc/mounts | grep /hd >>Dispositivos.txt

Ahora en Dispositivos.txt tienes todos los /sd y los /hd montados.
Ahora recorres el fichero interrogando a cada uno por si es renovable o no como hemos dicho
udevadm info --attribute-walk --name /dev/xx

Como hemos dicho antes (entiendo que funciona igual que udevinfo) los que montas serán hda1 o sda1 y a tí te interesa el dispositivo padre sda o hda. Miras si es renovable y ya está.

De hecho en /proc/mounts o en /etc/mtab además tienes el sistema de ficheros que tienen esos dispositivos y el directorio donde se montan cosa que veo útil para trabajar con la info que haya en ellos.
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
He estado jugando mas con el codigo, el tema es que el dispositivo puede estar montado o no, pero bueno, la mejor manera segun he leido por muchos sitios es leer directamente sobre /sys/block, ya que casi todos los comandos como udevinfo o udevadm leen sobre esos ficheros para sacar los datos.. por eso se recomienda trabajar desde la base. He conseguido filtrarlo aun mas y organizar los datos a leer para que siempre se repitan en una misma manera y descartar ya los virtuales... Te enseño el codigo y el fichero resultante:

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


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
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor >>" & removable WAIT   ' ##### AÑADO FABRICANTE A TEMPORAL #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model >>" & removable WAIT    ' ##### AÑADO MODELO A TEMPORAL #########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable >>" & removable WAIT       ' ##### AÑADO REMOVABLE A TEMPORAL #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size >>" & removable WAIT            ' ##### AÑADO TAMAÑO A TEMPORAL #########
NEXT
removableleer = Split(File.Load(removable), gb.NewLine)
removableleer.Resize(removableleer.Length - 1)
KILL removable
END
 


Ahora te adjunto una imagen de como se ve el pantallazo, de manera detallada:

 arrays

Como puedes ver, el indice 0 del array direccion se corresponde con los valores de los indices 0 a 3 del array removableleer. Entonces como puedo hacer que un Listbox liste los valores de esta manera, siempre y cuando el valor de Removable sea "1":

Fabricante & Dispositivo & Tamaño & Unidad.

Y si yo lo selecciono, haga la referencia correcta al dispositivo fisico que le corresponda segun la array direccion. Joe que lio.. espero haberme explicado bien... Es que la verdad, no se como trabajar bien con las arrays, me hago un poco de confusion y aun no controlo todas las opciones de un for y demas... te agradezco toda tu ayuda... gracias...
 



 
última edición por Pablo-GNU el Sabado, 30 Enero 2010, 19:56; editado 2 veces 
Pablo-GNU - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Yo creo que tienes un error en esto:
removable = Temp
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor >>" & removable WAIT   ' ##### AÑADO FABRICANTE A TEMPORAL #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model >>" & removable WAIT    ' ##### AÑADO MODELO A TEMPORAL #########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable >>" & removable WAIT       ' ##### AÑADO REMOVABLE A TEMPORAL #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size >>" & removable WAIT            ' ##### AÑADO TAMAÑO A TEMPORAL #########
NEXT
removableleer = Split(File.Load(removable), gb.NewLine)
removableleer.Resize(removableleer.Length - 1)
KILL removable

Bueno, no es que esté mal pero grabas varios registros de un mismo dispositivo lo cual te complica todo a la hora de trabajarlo posteriormente.
así que yo haría lo siguiente:
Dim Vendedor as string, Modelo as string, Reno as string, Tamano as long
Dim F as file

...
...
...

removable = Temp
f=open removable for create
f.endofline=gb.unix
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor >>" & removable to Vendedor ' ##### METO EL FABRICANTE EN UNA VARIABLE Vendedor #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model >>" & removable to Modelo  ' ##### AÑADO MODELO A una variable Modelo #########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable >>" & removable to Reno    ' ##### AÑADO REMOVABLE A UNA VARIABLE Reno #####
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size >>" & removable To Tamano           ' ##### AÑADO TAMAÑO A VARIABLE TAMANO #########
print #f, direccion[Contadorrem];;Vendedor;;Modelo;;renovable;;tamano 'grabar info en archivo
NEXT
close #f


y así obtienes un fichero que tiene dirección,vendedor, producto, renovable si/no,tamaño separados por espacios
A partir de ahí meterlo donde quieras u ordenarlo o lo que sea no tiene ningún problema. Por ejemplo meterlo en un list
F=open removable for input
do while not eof(f)
   input #f,Direccion, Vendedor,Modelo, Reno, Tamano
   list1.add(Direccion & (" & Vendedor & ":" & Modelo & ") " & tamano /1024 & "K" & iif(Renovable="1","","No")
loop
close #f
kill removable

 



 
última edición por soplo el Sabado, 30 Enero 2010, 20:58; editado 2 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Hola soplo, tu ultima aclaracion es bastante buena, la verdad es que simplificaria bastante la forma de trabajar... pero al probarlo le encuentro un problema, las salidas del terminal no las guarda en las variables. He parado el programa en cada paso que da al hacer el cat, pero en las variables a las que envias con el TO la salida, no contienen nada dentro... Miro a ver que le encuentro... Luego he cambiado un poco el tema de listarlo para verlo como a mi me interesaria, y tengo un fallo de Variables, me devuelve que espera un Wanted String[], got String instead. Y la variable de Tamano tambien he tenido que cambiartela al tipo String.

EDITO

Lo de las variables lo he solucionado y he modificado el print para que lo ordene un poco mejor ya que juntaba direccion con vendor sin salto de linea entre ellos. Pero no resuelvo el tipo de variable... que te parece la modificacion?

removable = Temp
f = OPEN removable FOR CREATE
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor" WAIT TO Vendedor ' ##### METO EL FABRICANTE EN UNA VARIABLE Vendedor #####"
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model" WAIT TO Modelo  ' ##### AÑADO MODELO A una variable Modelo #########"
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable" WAIT TO Reno    ' ##### AÑADO REMOVABLE A UNA VARIABLE Reno #####"
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size" WAIT TO Tamano           ' ##### AÑADO TAMAÑO A VARIABLE TAMANO #########
PRINT #f, direccion[Contadorrem] & "\n" & Vendedor; Modelo; Tamano; Reno 'grabar info en 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

 



 
última edición por Pablo-GNU el Sabado, 30 Enero 2010, 23:27; 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 
 
Pablo, quita la cláusula WAIT de las sentencias EXEC.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
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 
 
Fabianfv, no tengo ninguna sentencia EXEC, tengo todas SHELL, tambien me recomiendas quitarlas? Porque? Te pregunto porque asi aprendo.. jejeje. Muchas gracias y lo dicho, espero que esto sirva para mas gente, porque se esta haciendo eterna... siento que sea tan larga...
 



 
Pablo-GNU - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dispositivos USB En Listbox 
 
Pruébalo. Hace unos meses tuve ese problema, no obtenía la salida del comando (SHELL o EXEC, da igual) y sólo al quitar la cláusula WAIT pude obtenerla. No encuentro una razón para explicar ese comportamiento, excepto que se tratara de un bug de gambas. Si mal no recuerdo la versión que usaba en ese momento era la 2.15 o 2.16.

Por otro lado ¿por qué necesitas la cláusula WAIT para ejecutar "cat"? ¿supones que esos archivos pueden ser muy grandes y por tanto sea necesaria una ejecución síncrona?

Edición:

Tengo pendiente escribir una rutina que realice un reconocimiento de los dispositivos de almacenamiento conectados al sistema y que obtenga otra información complementaria, pero no tenía planeado hacerlo hasta dentro de al menos un mes. Veré si puedo adelantarlo para la próxima semana así intercambiamos las posibles soluciones.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
última edición por fabianfv el Domingo, 31 Enero 2010, 01:06; editado 1 vez 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
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 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente

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