Cómo ir a un directorio (universalmente)

Iniciado por oskoa, 29 Diciembre 2010, 10:38 AM

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

oskoa

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!

Psyke1


Karcrack

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

raul338

En las variables de entorno no esta %LOCALAPPDATA% en winXP asi que mi EnvironEx le gana a ExpandEnvironmentStrings :xD


Karcrack

Las ventajas de ExpandEnvironmentStrings() sobre SHGetFolderPath() son:

  • No necesitas una lista de constantes
  • No es necesario concatenar cadenas
Las desventajas son:

  • Utilizas mas bytes en la cadena de la ruta
  • Ciertas variables de entorno no se pueden obtener usando este metodo, como por ejemplo la ruta de INICIO

raul338

Y si lo haces con la funcion Environ? Mas simple xD

oskoa

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!

Karcrack

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

oskoa

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?