Foro de elhacker.net

Programación => 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:

Código:

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():
Código:
http://msdn.microsoft.com/en-us/library/ms724265(v=vs.85).aspx

Ejemplo:
Código:
"%USERPROFILE%\MiCarpeta" -> "C:\Users\MiUsuario\MiCarpeta"
Y asi con cualquier variable de entorno:
Código:
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:
  • 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


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

Código:
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?