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: oskoa en 29 Diciembre 2010, 10:38 AM

Título: Cómo ir a un directorio (universalmente)
Publicado por: oskoa en 29 Diciembre 2010, 10:38 AM
ME gustaria saber en VB6 como hacer para ir a un directorio de una manera FIja y segura.

Yo tengo un codigo que me permite detectar "C:\Windows" sea la letra que sea, eso asegura poder escribir en el directorio windows y subcarpetas de forma segura siempre.

Pero yo necesito escribir algo en varias subcarpetas en Doucments and settnigs, adminsitrador. (en XP) y Users \Admin en seven.

Como no tengo ninguna seguridad de que si "Adminitrador" es adminsitrador, y si admin es admin, me gustaria saber un codigo para que me lo haga seguro.

Y otra cosa, si tengo varias sesiones, como sé a cual se dirige el codigo?

El codigo que tengo apra decidir sobre c:\windows sobre todo, es el siguiente:



Option Explicit

Private Declare Function GetWindowsDirectory _
    Lib "kernel32" Alias "GetWindowsDirectoryA" ( _
        ByVal lpBuffer As String, _
        ByVal nSize As Long) _
    As Long


Private Function GetWinDir() As String
    Dim Temp As String * 256
    Dim x As Integer
    x = GetWindowsDirectory(Temp, Len(Temp)) ' Make API Call (Temp will hold return value)
    GetWinDir = Left$(Temp, x)               ' Trim Buffer and return string
End Function



Y luego en vez de poner EJ:

Kill C:\windows\system32\Hola.dll Pongo:
kill GetWinDir & "\system32\hola.dll

Si pudiera hacer esto con Docuemntds and setiings y adminstrodor, y USers y admin, seria una gran ayuda,

Gracuas!
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: Psyke1 en 29 Diciembre 2010, 11:13 AM
Mirate este módulo que hizo mi amigo raul :
http://goo.gl/0G9QL

DoEvents! :P
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: Karcrack en 29 Diciembre 2010, 15:04 PM
ExpandEnvironmentStrings():
http://msdn.microsoft.com/en-us/library/ms724265(v=vs.85).aspx

Ejemplo:
"%USERPROFILE%\MiCarpeta" -> "C:\Users\MiUsuario\MiCarpeta"
Y asi con cualquier variable de entorno:
http://es.wikipedia.org/wiki/Variable_de_entorno#Valores_por_defecto_de_las_variables_de_entorno
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: raul338 en 29 Diciembre 2010, 15:41 PM
En las variables de entorno no esta %LOCALAPPDATA% en winXP asi que mi EnvironEx (https://foro.elhacker.net/programacion_visual_basic/aporte_environex-t305200.0.html;msg1515402) le gana a ExpandEnvironmentStrings :xD

Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: Karcrack en 29 Diciembre 2010, 16:02 PM
Las ventajas de ExpandEnvironmentStrings() sobre SHGetFolderPath() son:
Las desventajas son:
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: raul338 en 29 Diciembre 2010, 17:33 PM
Y si lo haces con la funcion Environ? Mas simple xD
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: oskoa en 29 Diciembre 2010, 20:31 PM
AAAAAAAAAAAA me habia olvidado de environ, Pasa q hace 6 meses q no toco vb y algunas cosasme aprecen chino XD. ahora leo todo las opciones que me dijeron y en un rato contesto.

mucas gracias!
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: Karcrack en 29 Diciembre 2010, 21:21 PM
Cita de: raul338 en 29 Diciembre 2010, 17:33 PM
Y si lo haces con la funcion Environ? Mas simple xD
Hay que concatenar :-*
Principalmente la funcion de ExpandEnvironmentStrings() es expandir cadenas constantes... por ejemplo; Un packer, en el que puedes elegir donde se desempaqueta el fichero... puedes utilizar las variables de entorno y luego expandirlas sin mas...
Título: Re: Cómo ir a un directorio (universalmente)
Publicado por: oskoa en 30 Diciembre 2010, 00:58 AM
Gracias a todos. Utilicé esta linea de codigo, que funcionó en XP y Seven. (aunque se llaman Adminsitrador y admin los usuarios, pero calculo que funcionará si el usuario se llama "CARLOS").

El problema es que si tengo más de una cuenta de usuario, no funciona. Alguna idea?


Public Function GetApp() As String
    GetApp = CreateObject("Shell.Application").NameSpace(28).Self.Path
End Function


Private Sub Form_Load()
MkDir GetApp & "\Microsoft\Hola"
End Sub




Eso crea una carpeta "hola" en 

C:\Documents and Settings\Administrador\Configuración local\Datos de programa\Microsoft\

Pero si tengo mas de una cuenta de usuario, no anda.
ideas?