Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => 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 (vb) [Seleccionar]

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


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 (vb) [Seleccionar]
Option Explicit
' Los resultados que tiro con windows 7
Public Enum CSIDL
   CSIDL_PROFILE = 40                      ' C:\Users\Raul
   CSIDL_PERSONAL = 5                      ' C:\Users\Raul\Documents
   CSIDL_DESKTOP = 0                       ' C:\Users\Raul\Desktop
   CSIDL_DESKTOPDIRECTORY = 16             ' C:\Users\Raul\Desktop
   CSIDL_FAVORITES = 6                     ' C:\Users\Raul\Favorites
   CSIDL_MYMUSIC = 13                      ' C:\Users\Raul\Music
   CSIDL_MYPICTURES = 39                   ' C:\Users\Raul\Pictures
   CSIDL_MYVIDEO = 14                      ' C:\Users\Raul\Videos
   CSIDL_LOCAL_APPDATA = 28                ' C:\Users\Raul\AppData\Local
   CSIDL_HISTORY = 34                      ' C:\Users\Raul\AppData\Local\Microsoft\Windows\History
   CSIDL_INTERNET_CACHE = 32               ' C:\Users\Raul\AppData\Local\Microsoft\Windows\Temporary Internet Files
   CSIDL_APPDATA = 26                      ' C:\Users\Raul\AppData\Roaming
   CSIDL_RECENT = 8                        ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Recent
   CSIDL_SENDTO = 9                        ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\SendTo
   CSIDL_TEMPLATES = 21                    ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Templates
   CSIDL_NETHOOD = 19                      ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Network Shortcuts
   CSIDL_PRINTHOOD = 27                    ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
   CSIDL_COOKIES = 33                      ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Cookies
   CSIDL_STARTMENU = 11                    ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu
   CSIDL_STARTUP = 7                       ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
   CSIDL_PROGRAMS = 2                      ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
   CSIDL_ADMINTOOLS = 48                   ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
   CSIDL_ALTSTARTUP = 29                   ' C:\Users\Raul\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
   CSIDL_CDBURN_AREA = 59                  ' C:\Users\Raul\AppData\Local\Microsoft\Windows\Burn\Burn
   CSIDL_COMMON_APPDATA = 35               ' C:\ProgramData
   CSIDL_COMMON_ADMINTOOLS = 47            ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
   CSIDL_COMMON_ALTSTARTUP = 30            ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
   CSIDL_COMMON_STARTMENU = 22             ' C:\ProgramData\Microsoft\Windows\Start Menu
   CSIDL_COMMON_PROGRAMS = 23              ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs
   CSIDL_COMMON_STARTUP = 24               ' C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
   CSIDL_COMMON_TEMPLATES = 45             ' C:\ProgramData\Microsoft\Windows\Templates
   CSIDL_COMMON_OEM_LINKS = 58             ' C:\ProgramData\OEM Links
   CSIDL_COMMON_DESKTOPDIRECTORY = 25      ' C:\Users\Public\Desktop
   CSIDL_COMMON_DOCUMENTS = 46             ' C:\Users\Public\Documents
   CSIDL_COMMON_FAVORITES = 31             ' C:\Users\Raul\Favorites
   CSIDL_COMMON_MUSIC = 53                 ' C:\Users\Public\Music
   CSIDL_COMMON_PICTURES = 54              ' C:\Users\Public\Pictures
   CSIDL_COMMON_VIDEO = 55                 ' C:\Users\Public\Videos
   CSIDL_BITBUCKET = 10                    ' ???
   CSIDL_COMPUTERSNEARME = 61              ' ???
   CSIDL_CONNECTIONS = 49                  ' ???
   CSIDL_CONTROLS = 3                      ' ???
   CSIDL_DRIVES = 17                       ' ???
   CSIDL_INTERNET = 1                      ' ???
   CSIDL_MYDOCUMENTS = 12                  ' ???
   CSIDL_NETWORK = 18                      ' ???
   CSIDL_PRINTERS = 4                      ' ???
   CSIDL_FONTS = 20                        ' C:\Windows\Fonts
   CSIDL_PROGRAM_FILES = 38                ' C:\Program Files
   CSIDL_PROGRAM_FILESX86 = 42             ' C:\Program Files
   CSIDL_PROGRAM_FILES_COMMON = 43         ' C:\Program Files\Common Files
   CSIDL_PROGRAM_FILES_COMMONX86 = 44      ' C:\Program Files\Common Files
   CSIDL_RESOURCES = 56                    ' C:\Windows\resources
   CSIDL_RESOURCES_LOCALIZED = 57          ' C:\Windows\resources\0c0a
   CSIDL_SYSTEM = 37                       ' C:\Windows\system32
   CSIDL_SYSTEMX86 = 41                    ' C:\Windows\system32
   CSIDL_WINDOWS = 36                      ' C:\Windows
End Enum

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

Public Function EnvironEx(nCode As CSIDL) As String
   Dim path As String * MAX_PATH
   Call SHGetFolderPath(&H0, nCode, 0, 0, path)
   EnvironEx = Replace$(Trim$(path), vbNullChar, vbNullString)
End Function



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
Cita de: Petro_Boca en 18 Septiembre 2010, 02:42 AM
y que hace la LocalAppData (?)

hace esto

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
Cita de: *PsYkE1* en 18 Septiembre 2010, 01:49 AM
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 (vb) [Seleccionar]


Option Explicit

Public Enum CSIDL
   CSIDL_ADMINTOOLS = &H30
   CSIDL_ALTSTARTUP = &H1D
   CSIDL_APPDATA = &H1A
   CSIDL_BITBUCKET = &HA
   CSIDL_CDBURN_AREA = &H3B
   CSIDL_COMMON_ADMINTOOLS = &H2F
   CSIDL_COMMON_ALTSTARTUP = &H1E
   CSIDL_COMMON_APPDATA = &H23
   CSIDL_COMMON_DESKTOPDIRECTORY = &H19
   CSIDL_COMMON_DOCUMENTS = &H2E
   CSIDL_COMMON_FAVORITES = &H1F
   CSIDL_COMMON_MUSIC = &H35
   CSIDL_COMMON_OEM_LINKS = &H3A
   CSIDL_COMMON_PICTURES = &H36
   CSIDL_COMMON_PROGRAMS = &H17
   CSIDL_COMMON_STARTMENU = &H16
   CSIDL_COMMON_STARTUP = &H18
   CSIDL_COMMON_TEMPLATES = &H2D
   CSIDL_COMMON_VIDEO = &H37
   CSIDL_COMPUTERSNEARME = &H3D
   CSIDL_CONNECTIONS = &H31
   CSIDL_CONTROLS = &H3
   CSIDL_COOKIES = &H21
   CSIDL_DESKTOP = &H0
   CSIDL_DESKTOPDIRECTORY = &H10
   CSIDL_DRIVES = &H11
   CSIDL_FAVORITES = &H6
   CSIDL_FLAG_CREATE = &H8000
   CSIDL_FLAG_DONT_VERIFY = &H4000
   CSIDL_FLAG_MASK = &HFF00
   CSIDL_FLAG_NO_ALIAS = &H1000
   CSIDL_FLAG_PER_USER_INIT = &H800
   CSIDL_FONTS = &H14
   CSIDL_HISTORY = &H22
   CSIDL_INTERNET = &H1
   CSIDL_INTERNET_CACHE = &H20
   CSIDL_LOCAL_APPDATA = &H1C
   CSIDL_MYDOCUMENTS = &HC
   CSIDL_MYMUSIC = &HD
   CSIDL_MYPICTURES = &H27
   CSIDL_MYVIDEO = &HE
   CSIDL_NETHOOD = &H13
   CSIDL_NETWORK = &H12
   CSIDL_PERSONAL = &H5
   CSIDL_PRINTERS = &H4
   CSIDL_PRINTHOOD = &H1B
   CSIDL_PROFILE = &H28
   CSIDL_PROGRAM_FILES = &H26
   CSIDL_PROGRAM_FILES_COMMON = &H2B
   CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
   CSIDL_PROGRAM_FILESX86 = &H2A
   CSIDL_PROGRAMS = &H2
   CSIDL_RECENT = &H8
   CSIDL_RESOURCES = &H38
   CSIDL_RESOURCES_LOCALIZED = &H39
   CSIDL_SENDTO = &H9
   CSIDL_STARTMENU = &HB
   CSIDL_STARTUP = &H7
   CSIDL_SYSTEM = &H25
   CSIDL_SYSTEMX86 = &H29
   CSIDL_TEMPLATES = &H15
   CSIDL_WINDOWS = &H24
End Enum

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 S_OK = &H0
'   //  Private Const S_FALSE = &H1
'   //  Private Const E_INVALIDARG = &H80070057

Private Const MAX_PATH = 260

Public Function EnvironEx(ByVal nCode As CSIDL) As String
Dim str_Return As String * MAX_PATH
   SHGetFolderPath &H0, nCode, &H0, &H0, str_Return$
   EnvironEx = Left$(str_Return$, InStr(1, str_Return$, Chr(0)) - 1)   '   //  Resto 1 para quitar el ultimo Chr(0).
End Function



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 (Vb) [Seleccionar]


Public Function EnvironEx(ByVal nCode As CSIDL) As String
Dim str_Return As String * MAX_PATH
   SHGetFolderPath &H0, nCode, &H0, &H0, str_Return$
   EnvironEx = Left$(str_Return$, InStr(1, str_Return$, Chr(0)) - 1)   '   //  Resto 1 para quitar el ultimo Chr(0).
End Function



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 ?



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
Cita de: 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

sisi yase, pero me devuelve numeros :/
Título: Re: [Aporte] EnvironEx
Publicado por: Dessa en 19 Septiembre 2010, 04:17 AM



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
Cita de: Dessa en 19 Septiembre 2010, 04:17 AM



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 (vb) [Seleccionar]

EnvironEx = Left$(str_Return$, InStr(1, str_Return$, Chr(0)) - 1)   '   //  Resto 1 para quitar el ultimo Chr(0).

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




Cita de: Petro_Boca en 19 Septiembre 2010, 04:09 AM
Cita de: 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

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 (vb) [Seleccionar]


Option Explicit
Private Sub Form_Load()
Dim Str_Data$
Dim Str_Aux$
   Str_Data = Space$(200)
   Mid$(Str_Data$, 1, 11) = "BlackZeroX" & Chr(0)
MsgBox Strings.Len(Str_Data$)
   Str_Aux$ = Strings.Trim$(Str_Data$)
MsgBox "caracter Nulo = " & Conversion.CBool(InStr(1, Str_Aux$, Chr(0), vbBinaryCompare) > 0) & vbCr & Strings.Len(Str_Aux$) & vbCr & Str_Aux$ & Chr(34)
   Str_Aux$ = Strings.Left$(Str_Data$, Strings.InStr(1, Str_Data$, Chr(0)) - 1)
MsgBox "caracter Nulo = " & Conversion.CBool(InStr(1, Str_Aux$, Chr(0), vbBinaryCompare) > 0) & vbCr & Strings.Len(Str_Aux$) & vbCr & Str_Aux$ & Chr(34)
End Sub



Dulce Infierno Lunar!¡.
Título: Re: [Aporte] EnvironEx
Publicado por: BlackZeroX en 19 Septiembre 2010, 06:04 AM
.
Perdon no lei esto:

Cita de: raul338 en 19 Septiembre 2010, 05:26 AM

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
Cita de: BlackZeroX en 19 Septiembre 2010, 06:04 AMun mejor no nos complicamos y nos quedamos con &H0 te parece xP.

Me parece la mejor opcion :xD