elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Aporte] EnvironEx
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte] EnvironEx  (Leído 12,308 veces)
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
[Aporte] EnvironEx
« en: 18 Septiembre 2010, 01:43 am »

Hooola!

Resulta que estoy haciendo un programa que hace backups de cierta infomacion y necesitaba obtener (mediante Environ) algo asi:

En windows 7: C:\Users\<Usuario>\AppData\Local\
En windows XP: C:\Documents And Settings\<Usuario>\Configuracion Local\Datos de programa\

Para windows vista y adelante existe la variable de entorno "LocalAppData" pero para windows Xp no, y no encontre forma de hacerlo mediante Environ, hasta que buscando encontre un codigo en VBS, lo que facilmente lo pase a esta funcion:

Código
  1. ' Version original xD
  2. Public Function GetLocalAppData() As String
  3.    GetLocalAppData = CreateObject("Shell.Application").NameSpace(28).Self.Path
  4. End Function
  5.  

Funciona en windows 2000 en adelante :P

FUENTE original: http://www.winhelponline.com/blog/add-localappdata-environment-variable-in-windows-xp/ (Ver los comentarios)




EDIT! V2

Bueno, me pico la curiosidad y fui mas alla! jeje, deje el createObject y uso API ahora asi que bueno, hice esta pequeña Extension de Environ llamada "EnvironEx" que comparando resultados queda

Environ que te devuelve estos resulatdos
Citar
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\User\AppData\Roaming
CLASSPATH=.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=RAUL-PC
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Raul
LOCALAPPDATA=C:\Users\User\AppData\Local
LOGONSERVER=\\RAUL-PC
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=...................................
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 2, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0f02
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\User\AppData\Local\Temp
TMP=C:\Users\User\AppData\Local\Temp
USERDOMAIN=Raul-PC
USERNAME=User
USERPROFILE=C:\Users\User
windir=C:\Windows

Comparando con los comentarios que estan al lado de cada constante. Como veran, hay info que hay en uno que en otro no hay...
Código
  1. Option Explicit
  2. ' Los resultados que tiro con windows 7
  3. Public Enum CSIDL
  4.    CSIDL_PROFILE = 40                      ' C:\Users\Raul
  5.    CSIDL_PERSONAL = 5                      ' C:\Users\Raul\Documents
  6.    CSIDL_DESKTOP = 0                       ' C:\Users\Raul\Desktop
  7.    CSIDL_DESKTOPDIRECTORY = 16             ' C:\Users\Raul\Desktop
  8.    CSIDL_FAVORITES = 6                     ' C:\Users\Raul\Favorites
  9.    CSIDL_MYMUSIC = 13                      ' C:\Users\Raul\Music
  10.    CSIDL_MYPICTURES = 39                   ' C:\Users\Raul\Pictures
  11.    CSIDL_MYVIDEO = 14                      ' C:\Users\Raul\Videos
  12.    CSIDL_LOCAL_APPDATA = 28                ' C:\Users\Raul\AppData\Local
  13.    CSIDL_HISTORY = 34                      ' C:\Users\Raul\AppData\Local\Microsoft\Windows\History
  14.    CSIDL_INTERNET_CACHE = 32               ' C:\Users\Raul\AppData\Local\Microsoft\Windows\Temporary Internet Files
  15.    CSIDL_APPDATA = 26                      ' C:\Users\Raul\AppData\Roaming
  16.    CSIDL_RECENT = 8                        ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Recent
  17.    CSIDL_SENDTO = 9                        ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\SendTo
  18.    CSIDL_TEMPLATES = 21                    ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Templates
  19.    CSIDL_NETHOOD = 19                      ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Network Shortcuts
  20.    CSIDL_PRINTHOOD = 27                    ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
  21.    CSIDL_COOKIES = 33                      ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Cookies
  22.    CSIDL_STARTMENU = 11                    ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu
  23.    CSIDL_STARTUP = 7                       ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  24.    CSIDL_PROGRAMS = 2                      ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
  25.    CSIDL_ADMINTOOLS = 48                   ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
  26.    CSIDL_ALTSTARTUP = 29                   ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  27.    CSIDL_CDBURN_AREA = 59                  ' C:\Users\Raul\AppData\Local\Microsoft\Windows\Burn\Burn
  28.    CSIDL_COMMON_APPDATA = 35               ' C:\ProgramData
  29.    CSIDL_COMMON_ADMINTOOLS = 47            ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
  30.    CSIDL_COMMON_ALTSTARTUP = 30            ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
  31.    CSIDL_COMMON_STARTMENU = 22             ' C:\ProgramData\Microsoft\Windows\Start Menu
  32.    CSIDL_COMMON_PROGRAMS = 23              ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs
  33.    CSIDL_COMMON_STARTUP = 24               ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
  34.    CSIDL_COMMON_TEMPLATES = 45             ' C:\ProgramData\Microsoft\Windows\Templates
  35.    CSIDL_COMMON_OEM_LINKS = 58             ' C:\ProgramData\OEM Links
  36.    CSIDL_COMMON_DESKTOPDIRECTORY = 25      ' C:\Users\Public\Desktop
  37.    CSIDL_COMMON_DOCUMENTS = 46             ' C:\Users\Public\Documents
  38.    CSIDL_COMMON_FAVORITES = 31             ' C:\Users\Raul\Favorites
  39.    CSIDL_COMMON_MUSIC = 53                 ' C:\Users\Public\Music
  40.    CSIDL_COMMON_PICTURES = 54              ' C:\Users\Public\Pictures
  41.    CSIDL_COMMON_VIDEO = 55                 ' C:\Users\Public\Videos
  42.    CSIDL_BITBUCKET = 10                    ' ???
  43.    CSIDL_COMPUTERSNEARME = 61              ' ???
  44.    CSIDL_CONNECTIONS = 49                  ' ???
  45.    CSIDL_CONTROLS = 3                      ' ???
  46.    CSIDL_DRIVES = 17                       ' ???
  47.    CSIDL_INTERNET = 1                      ' ???
  48.    CSIDL_MYDOCUMENTS = 12                  ' ???
  49.    CSIDL_NETWORK = 18                      ' ???
  50.    CSIDL_PRINTERS = 4                      ' ???
  51.    CSIDL_FONTS = 20                        ' C:\Windows\Fonts
  52.    CSIDL_PROGRAM_FILES = 38                ' C:\Program Files
  53.    CSIDL_PROGRAM_FILESX86 = 42             ' C:\Program Files
  54.    CSIDL_PROGRAM_FILES_COMMON = 43         ' C:\Program Files\Common Files
  55.    CSIDL_PROGRAM_FILES_COMMONX86 = 44      ' C:\Program Files\Common Files
  56.    CSIDL_RESOURCES = 56                    ' C:\Windows\resources
  57.    CSIDL_RESOURCES_LOCALIZED = 57          ' C:\Windows\resources\0c0a
  58.    CSIDL_SYSTEM = 37                       ' C:\Windows\system32
  59.    CSIDL_SYSTEMX86 = 41                    ' C:\Windows\system32
  60.    CSIDL_WINDOWS = 36                      ' C:\Windows
  61. End Enum
  62.  
  63. Private Declare Function SHGetFolderPath Lib "shfolder" _
  64.    Alias "SHGetFolderPathA" _
  65.    (ByVal hwndOwner As Long, ByVal nFolder As Long, _
  66.    ByVal hToken As Long, ByVal dwFlags As Long, _
  67.    ByVal pszPath As String) As Long
  68.  
  69. Private Const MAX_PATH = 260
  70.  
  71. Public Function EnvironEx(nCode As CSIDL) As String
  72.    Dim path As String * MAX_PATH
  73.    Call SHGetFolderPath(&H0, nCode, 0, 0, path)
  74.    EnvironEx = Replace$(Trim$(path), vbNullChar, vbNullString)
  75. End Function
  76.  
  77.  

Y ahora si, es un aporte esto ya :xD (No descubri nada del otro mundo, simplemente lo comparto porque seguro hay quienes no sabian de la existencia de esto)


« Última modificación: 31 Diciembre 2010, 17:37 pm por raul338 » En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP
« Respuesta #1 en: 18 Septiembre 2010, 01:49 am »

Gracias, no lo sabia! :D

PD: Tu nueva firma da pena :-* :laugh:

DoEvents! :P


En línea

Petro_Boca

Desconectado Desconectado

Mensajes: 233


Antoo Te Amoo :D


Ver Perfil
Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP
« Respuesta #2 en: 18 Septiembre 2010, 02:42 am »

y que hace la LocalAppData (?)
En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP
« Respuesta #3 en: 18 Septiembre 2010, 03:03 am »

y que hace la LocalAppData (?)

hace esto
Código:
Option Explicit

Private Sub Form_Load()
    MsgBox GetLocalAppData
End Sub

Public Function GetLocalAppData() As String
    GetLocalAppData = CreateObject("Shell.Application").NameSpace(28).Self.Path
End Function
 
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP
« Respuesta #4 en: 18 Septiembre 2010, 03:11 am »

.
El CreateObject(), no lo tendrian que Descargar?... al rato hago algunas pruebas, por que me late que se queda en memoria...

Fue Paranoia mia.

Dulces Lunas!¡.
« Última modificación: 18 Septiembre 2010, 06:47 am por BlackZeroX » En línea

The Dark Shadow is my passion.
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [Aporte] EnvironEx
« Respuesta #5 en: 18 Septiembre 2010, 17:47 pm »

Actualizado :P Con API!
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP
« Respuesta #6 en: 18 Septiembre 2010, 17:52 pm »

PD: Tu nueva firma da pena :-* :laugh:

+1 xD Verdad raul, pon una firma vale xD

Ta bien el aporte!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Aporte] EnvironEx
« Respuesta #7 en: 18 Septiembre 2010, 22:19 pm »

.
El Hwnd no es tan nesesario como parametro..., tambien puedes crear una Ventana X con CreateWindowEX y tomar de hay el Hwnd devuelto y al ultimo destruirla... si es asi seria mejor con un Modulod e Clase para aprovechar los eventos Initialize y Terminate() de la clase

Código
  1.  
  2. Option Explicit
  3.  
  4. Public Enum CSIDL
  5.    CSIDL_ADMINTOOLS = &H30
  6.    CSIDL_ALTSTARTUP = &H1D
  7.    CSIDL_APPDATA = &H1A
  8.    CSIDL_BITBUCKET = &HA
  9.    CSIDL_CDBURN_AREA = &H3B
  10.    CSIDL_COMMON_ADMINTOOLS = &H2F
  11.    CSIDL_COMMON_ALTSTARTUP = &H1E
  12.    CSIDL_COMMON_APPDATA = &H23
  13.    CSIDL_COMMON_DESKTOPDIRECTORY = &H19
  14.    CSIDL_COMMON_DOCUMENTS = &H2E
  15.    CSIDL_COMMON_FAVORITES = &H1F
  16.    CSIDL_COMMON_MUSIC = &H35
  17.    CSIDL_COMMON_OEM_LINKS = &H3A
  18.    CSIDL_COMMON_PICTURES = &H36
  19.    CSIDL_COMMON_PROGRAMS = &H17
  20.    CSIDL_COMMON_STARTMENU = &H16
  21.    CSIDL_COMMON_STARTUP = &H18
  22.    CSIDL_COMMON_TEMPLATES = &H2D
  23.    CSIDL_COMMON_VIDEO = &H37
  24.    CSIDL_COMPUTERSNEARME = &H3D
  25.    CSIDL_CONNECTIONS = &H31
  26.    CSIDL_CONTROLS = &H3
  27.    CSIDL_COOKIES = &H21
  28.    CSIDL_DESKTOP = &H0
  29.    CSIDL_DESKTOPDIRECTORY = &H10
  30.    CSIDL_DRIVES = &H11
  31.    CSIDL_FAVORITES = &H6
  32.    CSIDL_FLAG_CREATE = &H8000
  33.    CSIDL_FLAG_DONT_VERIFY = &H4000
  34.    CSIDL_FLAG_MASK = &HFF00
  35.    CSIDL_FLAG_NO_ALIAS = &H1000
  36.    CSIDL_FLAG_PER_USER_INIT = &H800
  37.    CSIDL_FONTS = &H14
  38.    CSIDL_HISTORY = &H22
  39.    CSIDL_INTERNET = &H1
  40.    CSIDL_INTERNET_CACHE = &H20
  41.    CSIDL_LOCAL_APPDATA = &H1C
  42.    CSIDL_MYDOCUMENTS = &HC
  43.    CSIDL_MYMUSIC = &HD
  44.    CSIDL_MYPICTURES = &H27
  45.    CSIDL_MYVIDEO = &HE
  46.    CSIDL_NETHOOD = &H13
  47.    CSIDL_NETWORK = &H12
  48.    CSIDL_PERSONAL = &H5
  49.    CSIDL_PRINTERS = &H4
  50.    CSIDL_PRINTHOOD = &H1B
  51.    CSIDL_PROFILE = &H28
  52.    CSIDL_PROGRAM_FILES = &H26
  53.    CSIDL_PROGRAM_FILES_COMMON = &H2B
  54.    CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
  55.    CSIDL_PROGRAM_FILESX86 = &H2A
  56.    CSIDL_PROGRAMS = &H2
  57.    CSIDL_RECENT = &H8
  58.    CSIDL_RESOURCES = &H38
  59.    CSIDL_RESOURCES_LOCALIZED = &H39
  60.    CSIDL_SENDTO = &H9
  61.    CSIDL_STARTMENU = &HB
  62.    CSIDL_STARTUP = &H7
  63.    CSIDL_SYSTEM = &H25
  64.    CSIDL_SYSTEMX86 = &H29
  65.    CSIDL_TEMPLATES = &H15
  66.    CSIDL_WINDOWS = &H24
  67. End Enum
  68.  
  69. Private Declare Function SHGetFolderPath Lib "shfolder" _
  70.    Alias "SHGetFolderPathA" _
  71.    (ByVal hwndOwner As Long, ByVal nFolder As Long, _
  72.    ByVal hToken As Long, ByVal dwFlags As Long, _
  73.    ByVal pszPath As String) As Long
  74. '   //  Private Const S_OK = &H0
  75. '   //  Private Const S_FALSE = &H1
  76. '   //  Private Const E_INVALIDARG = &H80070057
  77.  
  78. Private Const MAX_PATH = 260
  79.  
  80. Public Function EnvironEx(ByVal nCode As CSIDL) As String
  81. Dim str_Return As String * MAX_PATH
  82.    SHGetFolderPath &H0, nCode, &H0, &H0, str_Return$
  83.    EnvironEx = Left$(str_Return$, InStr(1, str_Return$, Chr(0)) - 1)   '   //  Resto 1 para quitar el ultimo Chr(0).
  84. End Function
  85.  
  86.  

Dulces Lunas!¡.
« Última modificación: 18 Septiembre 2010, 23:11 pm por BlackZeroX » En línea

The Dark Shadow is my passion.
Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: [Aporte] EnvironEx
« Respuesta #8 en: 18 Septiembre 2010, 22:36 pm »

Sí, pensé lo mismo del Hwnd, creo que tal vez tampoco las constantes para ver chequaer si existe, yá que el el retorno de la funcionl sería el str del Path o un vbnullstring. (correjime si me equivoco ya que la documentacion que encuentro está en Ingles y puedo tardar semanas en traducirla... XD)


En línea

Adrian Desanti
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Aporte] EnvironEx
« Respuesta #9 en: 18 Septiembre 2010, 22:40 pm »

.
@Dessa

http://support.microsoft.com/kb/252652/es

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pequeño aporte
Programación Visual Basic
demon_cry 0 1,147 Último mensaje 12 Junio 2006, 09:38 am
por demon_cry
Mi aporte :USBCnfg
Programación Visual Basic
Anteros 1 1,452 Último mensaje 15 Noviembre 2006, 04:07 am
por satan69
[ Nuevo aporte ] « 1 2 »
Programación Visual Basic
d(-_-)b 11 4,039 Último mensaje 25 Julio 2007, 16:00 pm
por Tengu
pequeño aporte(proxy),pero aporte al fin.:D
Programación Visual Basic
Tengu 0 2,370 Último mensaje 22 Julio 2007, 17:33 pm
por Tengu
Aporte
Ingeniería Inversa
R6ID 0 2,170 Último mensaje 28 Febrero 2008, 11:35 am
por R6ID
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines