En un programa necesito saber la letra del disco local, no es para ningun troyano ni nada que se le parezca.
Un saludo.
Esta funcion devuelve un array de strings con la letra de las unidades e información sobre estas, espero que te sirva:
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
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
Para lo que quieres tu serviría así:
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 ;)
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 :)
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:
Function Cuadrado (ByVal numero As Long) As Long
Cuadrado = numero^2
End Function
Para llamar a la funcion se puede llamar asi
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 ;)
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.
Para listar archivos esta funcion con argumento la ruta a listar:
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:
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 ;)
: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
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 ;)
Para sacar el disco local:
dim disco as string
disco = environ("HOMEDRIVE")
Un Saludo. :)
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 ;)
MsgBox Left(App.Path, 3)
Talvez te sirva, te dice la letra de la unidad que estas usando con ese programa
Sancho.Mazorka :¬¬
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.
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 ;)
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 ;)
No me funciona...
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.
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