Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: askrator en 28 Julio 2007, 16:32 PM

Título: Mirar la letra del disco duro
Publicado por: askrator en 28 Julio 2007, 16:32 PM
En un programa necesito saber la letra del disco local, no es para ningun troyano ni nada que se le parezca.

Un saludo.
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 28 Julio 2007, 16:46 PM
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
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 28 Julio 2007, 17:11 PM
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
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 28 Julio 2007, 17:30 PM
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 ;)
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 28 Julio 2007, 22:08 PM
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  :)
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 29 Julio 2007, 04:48 AM
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 ;)
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 29 Julio 2007, 11:19 AM
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.
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 29 Julio 2007, 23:42 PM
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 ;)
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 30 Julio 2007, 14:35 PM
 :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
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 30 Julio 2007, 22:49 PM
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 ;)
Título: Re: Mirar la letra del disco duro
Publicado por: Hendrix en 31 Julio 2007, 00:22 AM
Para sacar el disco local:

Código (vb) [Seleccionar]
dim disco as string
disco = environ("HOMEDRIVE")


Un Saludo.  :)
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 31 Julio 2007, 00:38 AM
La funcion "Environ" sirve para conocer el valor de las variables de entorno. Para conocer estas variables de entorno ejecuta "cmd.exe"y escribe "set". Esas son las variables de entorno...son muy utiles para conocer rapidamente por ejemplo la carpeta de Windows.

Yo antes usaba BATCH y para conocer su valor ponía "%windir%", en VB6.0 hay que poner "Environ("windir")"

SAludos ;)
Título: Re: Mirar la letra del disco duro
Publicado por: Sancho.Mazorka en 31 Julio 2007, 06:17 AM
Código (vb) [Seleccionar]
MsgBox Left(App.Path, 3)

Talvez te sirva, te dice la letra de la unidad que estas usando con ese programa


Sancho.Mazorka    :¬¬
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 31 Julio 2007, 13:49 PM
Muchas gracias a todos por vuestros codigos, todos me han sido utiles sino en este en otros proyectos  ;D

Citar
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...

Jeje si molesta un poco el drivelistbox... Ademas creo que asi haces el proyecto mas pesado  :P

:o Menuda la funcion Environ gracias Hendrix.


MsgBox Left(App.Path, 3)


No conocia eso de left y el numero, muchas gracias Sancho.Mazorka a esto le voy a sacar utilidad creeme   ;D.

Un saludo y muchas gracias a todos, la verda me siento ignorante ante estos codigos.
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 31 Julio 2007, 16:19 PM
Trankilo, VB es un lenguaje que se aprende facil, yo en un mes practicando ya he aprendido mucho, antes no sabia absolutamente nada y ahora aún hay muchas cosas k no entiendo, pero lo veo todo mucho mejor. Lo k tienes es k ler un poko e intentar hacer programas, lo k se te ocurra, así aprenderás. Por cierto, la ayuda MSDN es muy buena tenerla instalada, me ayudó mucho a mi.

Por cierto, voy a aprovechar este post para preguntar yo una cosa para no abrir uno nuevo. ¿Como puedo desde VB mover un archivo a la papelera? Yo lo intento moviendo los archivos a una de las subcarpetas de "C:\RECYCLED", el archivo se mueve a la subcarpeta pero no aparece despues ni en la papelera ni con el explorador, solo aparece ejecutando "cmd.exe" y en esa carpeta escribir "dir" (esto es buena idea para ocultar un troyano jejeje)

Weno, pues la pregunta es esa, como puedo mover un archivo a la papelera desded VB?

Ahh, pongo aki mis variables de entorno, para k veais más o menos las k hay y a k rutas representan:

ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Usuario\Datos de programa
CLIENTNAME=Console
CommonProgramFiles=C:\Archivos de programa\Archivos comunes
COMPUTERNAME=LU
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\Usuario
LOGONSERVER=\\LU
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 9 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0905
ProgramFiles=C:\Archivos de programa
PROMPT=$P$G
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\Usuario\CONFIG~1\Temp
TMP=C:\DOCUME~1\Usuario\CONFIG~1\Temp
USERDOMAIN=Usuario
USERNAME=Usuario
USERPROFILE=C:\Documents and Settings\Usuario
windir=C:\WINDOWS


Saludos ;)
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 1 Agosto 2007, 14:56 PM
Para eliminar un archivo de texto y enviarlo a la Papelera de Reciclaje

    *

      Utilice el método DeleteFile para eliminar el archivo, especificando SendToRecycleBin para el parámetro recycle. El código siguiente muestra cómo eliminar el archivo denominado test.txt y enviarlo a la Papelera de Reciclaje.
      Visual Basic

      My.Computer.FileSystem.DeleteFile("C:\test.txt", _
      FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)



No lo he probado por falta de tiempo pero mira si te sirve  ;)
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 1 Agosto 2007, 16:20 PM
No me funciona...
Título: Re: Mirar la letra del disco duro
Publicado por: askrator en 2 Agosto 2007, 16:16 PM
Lo mejor sera que crees un nuevo tema para que si alguien te pueda ayudar te ayude, por que aqui tu duda no la esta viendo mucha gente.

Un saludo.
Título: Re: Mirar la letra del disco duro
Publicado por: nhaalclkiemr en 2 Agosto 2007, 16:21 PM
Cita de: askrator en  2 Agosto 2007, 16:16 PM
Lo mejor sera que crees un nuevo tema para que si alguien te pueda ayudar te ayude, por que aqui tu duda no la esta viendo mucha gente.

Un saludo.

Si va a ser mejor. Gracias