Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackZeroX

#1051
Programación Visual Basic / Re: [Ayuda] CMD Echo
11 Septiembre 2011, 00:14 AM
usa la cañeria de comunicacion entre procesos... PIPES

Dulces Lunas!¡.
#1052
.
Asi de simple no podras... para hacerlo es nesesario que cada NODO de tu sistema de red detecte como se a conectado a la red y enviarlo a los demas... lo mejor es que en cada nodo se indique el como se a conectado el pc a la red esta seria la manera mas FACIL la mas dificil seria "Scanear" el modo de conexion... por ejemplo si hay un Router, Moden, conexion desde otra PC, Wi-Fi, etc... por eso seria mas dificil desde mi punto de vista.

P.D.: Deberias dar mas datos en tu duda como veras es muy general y Raul338 ya te movio el tema, practicamente desde que lo publicaste... aun asi esta bien ya que es una duda muy general... lo malo que devio moverse a Programacion General ya que supongo que quieres saber algun podo por programacion de saber esto, o me equivoco?...

Dulces Lunas!¡.
#1053
Windows / Re: Inicio de Windows (XP) lento
10 Septiembre 2011, 03:22 AM
Prueba a borrar el contenido de esta carpeta... esto lo hace CCleaner pero yo lo hago manualmente...



%windir%/Prefetch



Cuando yo lo hago me arranca mas rapido, si tubieras Windows 7 podrias configurar el S.O. para que detecte TODOS los nucleos del procesador, esto ultimo aumentara la velocidad de carga, pero claro aun estas en XP...

Aun que eso ya lo hace CCleaner...

Dulces Lunas!¡.
#1055
Seguridad / Re: Tengo algo dentro ...o eso creo
7 Septiembre 2011, 03:52 AM
Cita de: Constance en  7 Septiembre 2011, 00:51 AM
A ver el titulo yo creo que está bien por eso lo he puesto en seguridad porque pienso que se puede tratar de un virus lo que tengo dentro del pc.....

Mi mente morbosa? penso otra cosa... y no es para menos.

Que AV tienes instalado?, intenta instalar Antivir o Avast y quizas una de las versiones de prueba de NOD32, BitDefender, etc... claro si puedes.

Dulces Lunas!¡.
#1056
Programación Visual Basic / Re: Guardar Ip en .txt
6 Septiembre 2011, 19:59 PM
.
La consulta deberia ser como consulto mi IP local? IP Publica?

Te dejo un ejemplo muy facil que consulta la IP mediante mi Host (ya que retorna la IP sin HTML).

Código (vb) [Seleccionar]


Option Explicit

Const IPWAN         As String = "http://infrangelux.sytes.net/ScanX/?myipaddres=1"
Const PORT          As String = "[PORT]"
Const PORTOPEN      As String = "1"
Const PORTREQUEST   As String = "http://infrangelux.sytes.net/ScanX/?port=[PORT]&nohtml=1"

Private Sub Form_Load()
Dim oXML        As Object
Dim i           As Long
Dim sIPWAN      As String
Dim sRes        As String
    Set oXML = streamHTTP(IPWAN)
    sIPWAN = oXML.responseText
    Set oXML = Nothing  '   //  Release XMLHTTP
   
    For i = 1 To 1024
        Set oXML = streamHTTP(Replace$(PORTREQUEST, PORT, i))
        sRes = oXML.responseText
        If (Strings.StrComp(sRes, PORTOPEN, vbTextCompare) = 0) Then
            MsgBox "Puerto: " & i & " esta abierto en el HOST: " & sIPWAN
        End If
        Set oXML = Nothing  '   //  Release XMLHTTP
    Next
End Sub

Function streamHTTP(ByVal strDowload As String) As Object
Dim oXML                     As Object
    Set oXML = CreateObject("Microsoft.XMLHTTP")
    If Not (oXML Is Nothing) Then
        Call oXML.Open("GET", strDowload, 0)
        Call oXML.Send
    End If
Set streamHTTP = oXML
End Function



P.D.: Si solo quieres la IP local puede hacerlos con las APIS de los Sockets de Windows tal cual como en C/C++

Dulces Lunas!¡.
#1057
@Raul100

Para que la buscas en google si ya te la deje aqui dicha declaracion API unos post mas arribita, y si es la misma solo que el alias o nombre de la funcion REAL es RtlMoveMemory pero se conoce mas comunmente como CopyMemory...

El byval si se pone en los parametros de la declaracion API entonces PUDE no escribirse en las llamadas, de lo contrario si no esta el byval en algun parametro de la declaracion API tendria que declararse byval si no se quiere pasar una variable por referencia, ten en cienta que si no se escribe byval se toma como referencia cada parametro.

Un ejemplo MUY ENTENDIBLE y aplicable a las APIS...

Código (Vb) [Seleccionar]


Option Explicit

Private Sub Form_Load()
Dim sStr    As String
    sStr = "Hola Mundo"
    MsgBox aaa(sStr)
    MsgBox sStr
   
    sStr = "Hola Mundo"
    MsgBox bbb(sStr)
    MsgBox sStr
End Sub

Public Function aaa(valor As String) As String
    valor = "BlackZeroX"
    aaa = valor
End Function

Public Function bbb(ByVal valor As String) As String
    valor = "BlackZeroX"
    bbb = valor
End Function



Nota: Cuando es una funcion/proceso hecho en vb6 como los del ejemplo anterior no se deberia poner byval en las llamadas, solo es valido para APIS.

Dulces Lunas!¡.
#1058
.
Me ire un poco a algo mas interno en vb6, esperando no confundir a nadie... para que comprendan un poco mas la estructra de las variables en VB6 y por ende comprener algunos aspecto y entender unos trucos avanzados con respecto a velocidad en vb6.

Definicion Basica Fundamental.
Puntero o Apuntador: Es una variable que contiene la dirrecion de otra variable.

Guiandome en esta DEFINICION que es irrefutable puedo AFIRMAR y SUSTENTAR LO SIGUIENTE.

Cuando declaras una variable tipo String, Array del tipo que sea y ademas NO TIENE UNA LONGITUD FIJA, se pueden y deben considerarse como APUNTADORES, en vb6 NO HAY PUNTEROS DE MANEJO LIBRE es decir que no podemos declarar y modificar a gusto los punteros de manera deliberada como en C/C++ PERO SE PUEDEN SIMULAR asiendo algunas cosillas, aun asi no le quitara el hecho de que es CUTRE pero FUNCIONAL y es mas puede acercarse un poco a la velocidad de C/C++ pero no la igualara ni superara en ningun momento.

En el caso de C/C++ con respecto a los APUNTADORES que solo le pones el "*" y obtienes el contenido de donde apunte, en VB6 DEBES usar RtlMoveMemory para SIMULAR LA RUTINA DE C/C++ (*) respecto a un APUNTADOR.

En C seria... algo asi no llendo a mas lios...



char a[] = "BlackZeroX";
char* pa = a;  // Se guarda el puntero de la variable "a" en "pa".



En VB6 se hace asi para SIMULAR lo anterior para saltarnos la restriccion que nos pone vb6.

Código (Vb) [Seleccionar]


Dim a as string
Dim b as string

a = "BlackZeroX"
RtlMoveMemory VarPtr(b), VarPtr(a), &H4 ' // Lo mismo que lo anterior en C/C++...
' // Antes de terminar el proceso donde se Autodestruyen ambas variables hay que hacer esto:
RtlMoveMemory VarPtr(b), &H0 &H4 ' // esta seria otra desventaja ya que SI NO SE HACE PROVOCA A LA LARGA UN CRASH.
' // Nota: si "b" apuntaba a un contenido o ya se le habia asignado un contenido X debera de guardarse la _
dirrecion ala que apuntaba en una variable tipo long, y al final antes de su autodestruccion debera de volver _
a tener el mismo puntero, ya que de lo contrario se crearia un Extraordinario Memory leak (Fuga de memoria) _
y al final un Crash...



Caso omiso cuando se declara.

Código (vb) [Seleccionar]


Dim a as string * 20



La variable "a" no apunta a ningun lugar, ya que su memoria ya esta asignada y es CONSTANTE (Su longitud)


En resumen en C/C++ para obtener la longitud de una cadena en VB6 debes hacer esto:



lLn = ((int*)(pSringVB6 - 0x4))
// pSringVB6 es el puntero a la variable string de vb6 obtenida con StrPtr
if (lLn) lLn >>= 1;
/*
Dividimos entre 2 de manera binaria SOLO si se paso con StrPtr() el puntero
de la string de lo contrario No debera ser dividido entre 2 ya que vb6 transforma
una variable String en formato Ansi... es decir quita los Bytes Nulos que sirven
como separadores en el formato Unicode de vb6 aun que no se ocupen para eso.
*/



Ejemplo y codigo en C (dll) + vb6 <click aquí>, Recomendacion Comilador Codeblocks.

En vb6 SIN USAR LEN, LENB, Apis o similares...

Código (vb) [Seleccionar]


Public Function altLen(ByRef sStr As String) As Long
Dim lRet    As Long
   '   //  Simulacion de StrPtr()
   RtlMoveMemory VarPtr(lRet), VarPtr(sStr), &H4           '   //  Leemos el apuntardor a la cadena.
   If (lRet = &H0) Then Exit Function                      '   //  Si el puntero es &H0 es que no hay ninguna cadena.
   RtlMoveMemory VarPtr(lRet), ByVal (lRet - &H4), &H4     '   //  Leemos la longitud en Bytes SOLO de la cadena en UNICODE.
   altLen = (lRet \ 2)                                     '   //  Por ser UNICODE dividimos entre 2
End Function


Public Function altLen2(ByRef sStr As String) As Long
Dim lRet    As Long
   lRet = StrPtr(sStr)
   If (lRet = &H0) Then Exit Function                      '   //  Si el puntero es &H0 es que no hay ninguna cadena.
   RtlMoveMemory VarPtr(lRet), ByVal (lRet - &H4), &H4     '   //  Leemos la longitud en Bytes SOLO de la cadena en UNICODE.
   altLen2 = (lRet \ 2)                                    '   //  Por ser UNICODE dividimos entre 2
End Function



Nota: Duando se declara una variable tipo Array sea cual sea en lugar de apuntar a su primer indice, realmente apunta a su Estructura SafeArray y en esta su miembro pvData apunta a su primer elemento... cabe destacar que si es un array String quiere decir que su elemento al que apunta pvData seran apuntadores ya que no tienen una longitud Definida.

Temibles Lunas!¡.
#1059
mmm aqui te dejo el codigo que mas o menos te daba a entender anteriormente... igual puedes usar strLenW hay una variante llamada strLenA esa no te va a servir de mucho...

Código (Vb) [Seleccionar]

Option Explicit

Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long)

Private Sub Form_Load()
Dim sStr    As String   '   //  Apuntador...
    MsgBox altLen(sStr)
    sStr = "BlackZeroX"
    MsgBox altLen(sStr) & vbCrLf & Len(sStr)
   
    sStr = ""
    MsgBox altLen2(sStr)
    sStr = "BlackZeroX"
    MsgBox altLen2(sStr) & vbCrLf & Len(sStr)
   
End Sub

Public Function altLen(ByRef sStr As String) As Long
Dim lRet    As Long
    '   //  Simulacion de StrPtr()
    RtlMoveMemory VarPtr(lRet), VarPtr(sStr), &H4           '   //  Leemos el apuntardor a la cadena.
    If (lRet = &H0) Then Exit Function                      '   //  Si el puntero es &H0 es que no hay ninguna cadena.
    RtlMoveMemory VarPtr(lRet), ByVal (lRet - &H4), &H4     '   //  Leemos la longitud en Bytes SOLO de la cadena en UNICODE.
    altLen = (lRet \ 2)                                     '   //  Por ser UNICODE dividimos entre 2
End Function


Public Function altLen2(ByRef sStr As String) As Long
Dim lRet    As Long
    lRet = StrPtr(sStr)
    If (lRet = &H0) Then Exit Function                      '   //  Si el puntero es &H0 es que no hay ninguna cadena.
    RtlMoveMemory VarPtr(lRet), ByVal (lRet - &H4), &H4     '   //  Leemos la longitud en Bytes SOLO de la cadena en UNICODE.
    altLen2 = (lRet \ 2)                                    '   //  Por ser UNICODE dividimos entre 2
End Function



Y espero no equivocarme pero tambien se puede con readProcessMemory o igual RTLCopyMemory debes buscar  2 bytes nulos... esos indican el final de la cadena casi = que el Ansi donde es solo 1 Bytes Nulo el que indica el final...

Dulces Lunas!¡.
#1060
.
usa MessageBox() ( realmente son 2 variantes Ansi y Unicole es decir A y W )... te das cuenta en el Alias... xP

Dulces Lunas!¡.