Mirar la letra del disco duro

Iniciado por askrator, 28 Julio 2007, 16:32 PM

0 Miembros y 1 Visitante están viendo este tema.

askrator

En un programa necesito saber la letra del disco local, no es para ningun troyano ni nada que se le parezca.

Un saludo.
ping -l 65510 127.0.0.1


nhaalclkiemr

Esta funcion devuelve un array de strings con la letra de las unidades e información sobre estas, espero que te sirva:

Código (vb) [Seleccionar]
Function Drives() As String()
    'Funcion que devuelve una matriz con las unidades e informacion sobre estas
Dim obj As Object
Dim drive As Object
Dim i As Long
On Error Resume Next
Set obj = CreateObject("Scripting.FileSystemObject")
ReDim resul(0 To ((obj.Drives.count * 6) - 1)) As String
For Each drive In obj.Drives
    resul(i) = drive.driveletter
    If drive.DriveType = "Remote" Then
        If drive.IsReady = True Then resul(i + 1) = drive.ShareName Else resul(1) = "Disco no preparado"
    Else
        If drive.IsReady = True Then resul(i + 1) = drive.VolumeName Else resul(1) = "Disco no preparado"
    End If
    resul(i + 2) = drive.DriveType
    If drive.IsReady = True Then
        resul(i + 5) = drive.FreeSpace
        resul(i + 4) = drive.TotalSize
        resul(i + 3) = drive.FileSystem
    Else
        resul(i + 5) = 0
        resul(i + 4) = 0
        resul(i + 3) = "Desconocido"
    End If
    If resul(i + 1) = "" Then resul(i + 1) = "Sin Nombre"
    Select Case resul(i + 2)
        Case 0: resul(i + 2) = "Desconocido"
        Case 1
            If resul(i + 4) = 0 Or (resul(i + 4) = 1457664 And resul(i + 3) = "FAT") Then
                resul(i + 2) = "Disquete de 3½"
            Else
                resul(i + 2) = "Unidad removible"
            End If
        Case 2: resul(i + 2) = "Disco local"
        Case 3: resul(i + 2) = "Unidad de red"
        Case 4: resul(i + 2) = "CD-ROM"
        Case 5: resul(i + 2) = "Disco RAM"
        Case Else: resul(i + 2) = "Desconocido"
    End Select
    i = i + 6
Next
Drives = resul
End Function
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

askrator

No lo entiendo mucho pero lo voy a estudiar  :xD, en principio con la unidad me sobraba pero gracias por lo demas  ;D, ya te ire diciendo haber que no entiendo, que sera pronto por que madre que follon jeje.

Gracias y un saludo
ping -l 65510 127.0.0.1


nhaalclkiemr

#3
Para lo que quieres tu serviría así:

Código (vb) [Seleccionar]
Function Drives() As String()
    'Funcion que devuelve una matriz con las letras de las unidades
Dim obj As Object
Dim drive As Object
Dim i As Long
On Error Resume Next
Set obj = CreateObject("Scripting.FileSystemObject")
ReDim resul(0 To (obj.Drives.count  - 1)) As String
For Each drive In obj.Drives
    resul(i) = drive.driveletter
    i = i + 1
Next
Drives = resul
End Function


Lo más esencial a entender de este código es la variable "obj", a la cual asigno un objeto de tipo "FileSystemObject" (FSO). Este objeto contiene información de cada una de las unidades y tambien de todos los archivos del sistema.

Con la instrucción "For each" lo que hago es asignar a la variable "drive" un contenedor de la propiedad "drive" del objeto "obj" (cada contenedor es una unidad). Despues uso la propiedad "driveletter" del objeto "drive" (k va cojiendo el valor de cada una de las unidades) para obtener la letra de la unidad.

Si aún no entiendes algo dímelo. Y si te interesa te puedo decir también como utilizar el "FileSystemObject" para obtener un listado de archivos y carpetas con sus atributos, tamaño, etc... de la ruta que quieras.

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

askrator

Me da un error al escribir el codigo, me sale esta linea en rojo

ReDim resul(0 To (obj.Drives.count  - 1) As String

Si te digo la verdad... No se muy bien como se usan las Funciones, se que devuelven un valor pero he mirado por internet y sigo dudando  :-[ :-[ :-[ vamos que sigo dudando con el codigo.

Un saludo y muchas gracias  :)
ping -l 65510 127.0.0.1


nhaalclkiemr

Ya he arreglado esa linea, es k al modificarla la puse mal... ahora ya la puse bien, te explico, las funciones son partes del código independientes a las que se les pueden pasar valores y pueden devolver un valor (o no)

un ejemplo muy simple, esta funcion que calcula el cuadrado de un numero:

Código (vb) [Seleccionar]
Function Cuadrado (ByVal numero As Long) As Long
Cuadrado = numero^2
End Function


Para llamar a la funcion se puede llamar asi

Código (vb) [Seleccionar]
resultado = Cuadrado(5)


El propio nombre de la funcion es una variable (Cuadrado), y es el valor que devolverá la funcion, es decir, "Cuadrado" va a ser la variable que al terminar la funcion se pasará a la variable "resultado", el numero 5 es el argumento, es decir, va a ser la variable numero en la "funcion"

En resumen, tu llamas a la funcion "Cuadrado" con el argumento "5", lo k hará la funcion es calcular el cuadrado del argumento (5) y guardarlo en la variable "Cuadrado", al terminar la funcion la variable "resultado" cojerá el valor del nombre de la funcion (Cuadrado)

La diferencia de esta funcion con la mía es que en la mía no paso ningun argumento (no hace falta) y que la funcion devuelve una matriz en vez de un número.

Si deseas llamar a una funcion que no devuelva ningun valor usa esto:

Call funcion(argumentos)

Donde "funcion" es el nombre de la funcion, asi llamarás a una funcion que no devolverá ningun valor.

Informate bien sobre funciones pork es esencial en vb conocer su uso, despues hay detalles como pasar valores "ByVal" (por valor) o "ByRef" (por referencia), pero para eso busca información que hay mucha.

Weno, espero haberte ayudado, busca informacion que hay mucha, y es facil usar funciones y son realmente utiles.

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

askrator

#6
Bien ya entiendo las funciones y entiendo la tuya  :D :D muchas gracias nhaalclkiemr.

Solo dos dudas

Se crea el array resul con 5 entradas, como se donde esta instalado windows???

Como saco los valores del array fuera de la funcion??. Si pongo

MsgBox resul(5)

En la funcion y luego la llamo desde el programa salta la ventana con la letra, pero como saco los valores del array de la funcion y los pongo en variables o en otro array del programa para usarlas??? busco informacion y no me sale nada  :(

Lo unico que se me acaba de ocurrir es poner esto

Text1.Text = resul(5)

Dentro de la funcion, pero habra metodos más elegantes creo yo...

Solo una cosa mas, esta solo por curiosidad  :rolleyes: :rolleyes:

Como usas FileSystemObject para obtener un listado de archivos y carpetas con sus atributos, tamaño, etc...  :rolleyes: :rolleyes:

Un saludo y otra vez muchas gracias.
ping -l 65510 127.0.0.1


nhaalclkiemr

Para listar archivos esta funcion con argumento la ruta a listar:

Código (vb) [Seleccionar]
Function FileList (ByVal directory As String) As String()
Dim obj As Object
Dim f As Object
Dim fs As Object
Dim i As Long
Set obj = CreateObject("Scripting.FileSystemObject")
Set f = obj.GetFolder(directory)
Set fs = f.Files
If fs.count = 0 Then Exit Function
ReDim x(0 To (fs.count - 1)) As String
For Each files In fs
x(i) = files.Name
Next
FileList = x
End Function


Para carpetas esta:

Código (vb) [Seleccionar]
Function FolderList (ByVal directory As String) As String()
Dim obj As Object
Dim f As Object
Dim sf As Object
Dim i As Long
Set obj = CreateObject("Scripting.FileSystemObject")
Set f = obj.GetFolder(directory)
Set sf = f.SubFolders
If sf.count = 0 Then Exit Function
ReDim x(0 To (sf.count - 1)) As String
For Each folder In sf
x(i) = folder.Name
Next
FolderList = x
End Function


Si kieres saber mas sobre el "FileSystenObject" mira en la ayuda MSDN...yo lo aprendí todo aí...te aparecen sus propiedades, objetos, métodos, funciones, etc...

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

askrator

 :xD :xD :xD :xD :xD :xD :xD :xD mirando mirando se me a ocurrido esto.

En un programa pones:
1- Drivelistbox -> visible = false

Ahora el codigo


Private Sub Form_Load()
Dim uni As String
uni = Drive1.Drive
MsgBox uni
End Sub

A mi me funciona igual jeje y mirando mirando creo que en menos lineas se puede hacer lo mismo que lo que me dices.

Un saludo
ping -l 65510 127.0.0.1


nhaalclkiemr

Ya pero necesitas un objeto drivelistbox...yo te puse akel pork lo tenia para mi troyano y lo necesitaba asi...y no keria añadir un drivelistbox...

SAludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%