Título: [Aporte] EnvironEx Publicado por: raul338 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
Funciona en windows 2000 en adelante :P FUENTE original: http://www.winhelponline.com/blog/add-localappdata-environment-variable-in-windows-xp/ (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
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) Título: Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP Publicado por: Psyke1 en 18 Septiembre 2010, 01:49 am Gracias, no lo sabia! :D
PD: Tu nueva firma da pena :-* :laugh: DoEvents! :P Título: Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP Publicado por: Petro_Boca en 18 Septiembre 2010, 02:42 am y que hace la LocalAppData (?)
Título: Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP Publicado por: LeandroA en 18 Septiembre 2010, 03:03 am y que hace la LocalAppData (?) hace esto Código: Option Explicit Título: Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP Publicado por: BlackZeroX en 18 Septiembre 2010, 03:11 am .
Fue Paranoia mia. Dulces Lunas!¡. Título: Re: [Aporte] EnvironEx Publicado por: raul338 en 18 Septiembre 2010, 17:47 pm Actualizado :P Con API!
Título: Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP Publicado por: [D4N93R] 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! Título: Re: [Aporte] EnvironEx Publicado por: BlackZeroX 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
Dulces Lunas!¡. Título: Re: [Aporte] EnvironEx Publicado por: Dessa 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)
Título: Re: [Aporte] EnvironEx Publicado por: BlackZeroX en 18 Septiembre 2010, 22:40 pm .
@Dessa http://support.microsoft.com/kb/252652/es Dulces Lunas!¡. Título: Re: [Aporte] EnvironEx Publicado por: Dessa en 18 Septiembre 2010, 22:58 pm Gracias BlackZeroX , eso queria saber
Si no utiliza el indicador CSIDL_FLAG_CREATE: si la carpeta no existe, la función de SHGetFolder devuelve S_FALSE y nada se coloca en el búfer de cadena. Título: Re: [Aporte] EnvironEx Publicado por: BlackZeroX en 18 Septiembre 2010, 23:11 pm .
Entonces quedo asi... Código
Dulces Lunas!¡. Título: Re: [Aporte] EnvironEx Publicado por: Dessa en 18 Septiembre 2010, 23:33 pm Yo la tenía parecida (siempre me olvido de los &H0 en lugar del 0, luego los cambio)
Una duda desde siempre, estária bien sRet o igual debe usarse MAX_PATH ? Código:
Título: Re: [Aporte] EnvironEx Publicado por: BlackZeroX en 18 Septiembre 2010, 23:41 pm .
MAX_PATH La ruta maxima de windows es de 260 caracteres, si intentas meter una ruta mayor da error (Rutas de Archivos...), en la api no hay problema, pero como ya sabemos que el maximo que puede devolver es de 260 caracteres entonces no tiene caso aumentar el buffer, solo seria un gasto inesesario de memoria, ademas es una ruta de una carpeta donde seguro habra mas carpetas y archivos... Dulces Lunas!¡. Título: Re: [Aporte] EnvironEx Publicado por: Dessa en 18 Septiembre 2010, 23:47 pm Aclarado, entonces MAX_PATH.
Título: Re: [Aporte] EnvironEx Publicado por: Petro_Boca en 19 Septiembre 2010, 04:00 am si con este modulo quiero saber cual es C:\Windows\system32 , como tengo q hacer O.O?
Título: Re: [Aporte] EnvironEx Publicado por: xkiz ™ en 19 Septiembre 2010, 04:07 am creo que CSIDL_SYSTEM
http://msdn.microsoft.com/en-us/library/bb762494%28v=VS.85%29.aspx Título: Re: [Aporte] EnvironEx Publicado por: Petro_Boca en 19 Septiembre 2010, 04:09 am creo que CSIDL_SYSTEM http://msdn.microsoft.com/en-us/library/bb762494%28v=VS.85%29.aspx sisi yase, pero me devuelve numeros :/ Título: Re: [Aporte] EnvironEx Publicado por: Dessa en 19 Septiembre 2010, 04:17 am Código:
Título: Re: [Aporte] EnvironEx Publicado por: Petro_Boca en 19 Septiembre 2010, 04:25 am Código:
la variable seria el &H25 ? Título: Re: [Aporte] EnvironEx Publicado por: Dessa en 19 Septiembre 2010, 04:29 am La constante pàra la carpeta de sistema seria &H25, lee la lista de Raul338 o el link de Xkis o todo el hilo ;)
Título: Re: [Aporte] EnvironEx Publicado por: raul338 en 19 Septiembre 2010, 05:26 am Cita de: BlackZeroX Código
Que eso no lo hace el Trim$ ? Lo de quitar el Chr(0) y lo que sigue ? Lo de hacer una clase para esto seria algo exagerado, tal vez si incluimos otros metodos se aplicaria Cita de: Dessa Si no utiliza el indicador CSIDL_FLAG_CREATE: Si.. habia leido eso, el problema es que nunca encontre las constantes de S_FALSE, E_FAIL y demas por lo que no los puse jejesi la carpeta no existe, la función de SHGetFolder devuelve S_FALSE y nada se coloca en el búfer de cadena. creo que CSIDL_SYSTEM http://msdn.microsoft.com/en-us/library/bb762494%28v=VS.85%29.aspx sisi yase, pero me devuelve numeros :/ que raro que te devuelva numeros, generalmente eso pasa cuando pedis Internet (IE), Panel de control, red, impresoras, etc Título: Re: [Aporte] EnvironEx Publicado por: BlackZeroX en 19 Septiembre 2010, 05:54 am .
Segun lo siguiente deviste haber usado RTrim$() en lugar de Trim$() Aqui Todos los Trim()... Function Trim$(String As String) As String Miembro de VBA.Strings Devuelve una copia de una cadena sin espacios iniciales y finales Function Trim(String) Miembro de VBA.Strings Devuelve una copia de una cadena sin espacios iniciales y finales Function RTrim$(String As String) As String Miembro de VBA.Strings Devuelve una copia de una cadena sin espacios finales Function RTrim(String) Miembro de VBA.Strings Devuelve una copia de una cadena sin espacios finales Function LTrim$(String As String) As String Miembro de VBA.Strings Devuelve una copia de una cadena sin los espacios iniciales Function LTrim(String) Miembro de VBA.Strings Devuelve una copia de una cadena sin los espacios iniciales * En Resumen solo quita los ESPACIOS no los Caracteres NULOS Código
Dulce Infierno Lunar!¡. Título: Re: [Aporte] EnvironEx Publicado por: BlackZeroX en 19 Septiembre 2010, 06:04 am .
Perdon no lei esto: Lo de hacer una clase para esto seria algo exagerado, tal vez si incluimos otros metodos se aplicaria Lo mensionaba para aprovechar el evento initializze y asi crear una ventana con CreateWindowExy el evento finalize para destruir dicha ventana, así jalarias un Hwnd VALIDO en su paramtro, aun que el Hwnd de otra ventana como el del explorer (El escritorio) me parece que tambien sería valido, aun mejor no nos complicamos y nos quedamos con &H0 te parece xP. Dulces Lunas!¡. Título: Re: [Aporte] EnvironEx Publicado por: raul338 en 19 Septiembre 2010, 06:41 am un mejor no nos complicamos y nos quedamos con &H0 te parece xP. Me parece la mejor opcion :xD |