Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: raul338 en 18 Septiembre 2010, 01:43 am



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
  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/ (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)


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

Private Sub Form_Load()
    MsgBox GetLocalAppData
End Sub

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


Título: Re: [SNIPPET] Mi primer snippet (copiado), obtener LocalAppData en Windows XP
Publicado por: BlackZeroX 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!¡.


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


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
  1.  
  2. Public Function EnvironEx(ByVal nCode As CSIDL) As String
  3. Dim str_Return As String * MAX_PATH
  4.    SHGetFolderPath &H0, nCode, &H0, &H0, str_Return$
  5.    EnvironEx = Left$(str_Return$, InStr(1, str_Return$, Chr(0)) - 1)   '   //  Resto 1 para quitar el ultimo Chr(0).
  6. End Function
  7.  
  8.  

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:

Public Function ShEnviron(nCode As CSIDL) As String
   Dim sRet As String * 260
   Call SHGetFolderPath(0, nCode, 0, 0, sRet)
   ShEnviron = Split(sRet, Chr$(0))(0)
End Function










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:


Option Explicit
Private Declare Function SHGetFolderPath Lib "shfolder" Alias "SHGetFolderPathA" (ByVal hwndOwner As Long, ByVal nFolder As Long, ByVal hToken As Long, ByVal dwFlags As Long, ByVal pszPath As String) As Long
Private Const MAX_PATH = 260

Private Sub Form_Load()
   
   Dim sRet As String * MAX_PATH
   Call SHGetFolderPath(0, &H25, 0, 0, sRet)
   MsgBox Split(sRet, Chr$(0))(0)

End Sub






Título: Re: [Aporte] EnvironEx
Publicado por: Petro_Boca en 19 Septiembre 2010, 04:25 am
Código:


Option Explicit
Private Declare Function SHGetFolderPath Lib "shfolder" Alias "SHGetFolderPathA" (ByVal hwndOwner As Long, ByVal nFolder As Long, ByVal hToken As Long, ByVal dwFlags As Long, ByVal pszPath As String) As Long
Private Const MAX_PATH = 260

Private Sub Form_Load()
   
   Dim sRet As String * MAX_PATH
   Call SHGetFolderPath(0, &H25, 0, 0, sRet)
   MsgBox Split(sRet, Chr$(0))(0)

End Sub






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
  1. EnvironEx = Left$(str_Return$, InStr(1, str_Return$, Chr(0)) - 1)   '   //  Resto 1 para quitar el ultimo Chr(0).
  2.  

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 la carpeta no existe, la función de SHGetFolder devuelve S_FALSE y nada se coloca en el búfer de cadena.
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 jeje



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
  1.  
  2. Option Explicit
  3. Private Sub Form_Load()
  4. Dim Str_Data$
  5. Dim Str_Aux$
  6.    Str_Data = Space$(200)
  7.    Mid$(Str_Data$, 1, 11) = "BlackZeroX" & Chr(0)
  8. MsgBox Strings.Len(Str_Data$)
  9.    Str_Aux$ = Strings.Trim$(Str_Data$)
  10. MsgBox "caracter Nulo = " & Conversion.CBool(InStr(1, Str_Aux$, Chr(0), vbBinaryCompare) > 0) & vbCr & Strings.Len(Str_Aux$) & vbCr & Str_Aux$ & Chr(34)
  11.    Str_Aux$ = Strings.Left$(Str_Data$, Strings.InStr(1, Str_Data$, Chr(0)) - 1)
  12. MsgBox "caracter Nulo = " & Conversion.CBool(InStr(1, Str_Aux$, Chr(0), vbBinaryCompare) > 0) & vbCr & Strings.Len(Str_Aux$) & vbCr & Str_Aux$ & Chr(34)
  13. End Sub
  14.  
  15.  

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