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 - Keyen Night

#61
Hay casos en los cuales no funciona, siempre es de mejor practica usar delegados, aunque si es algo muy sencillo se puede usar pero igual no se recomienda.
#62
Hay que filtrar el AddressList para hallar la IPv4 pública ;)

Aquí te dejo el código:

Código (vb.net) [Seleccionar]

   Public Function GetPublicIP() As IPAddress

       GetPublicIP = Nothing

       Dim LocalHost As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName)

       For Each Address In LocalHost.AddressList
           'Si no es IPv6'
           If Not (Address.IsIPv6SiteLocal Or Address.IsIPv6Multicast Or Address.IsIPv6LinkLocal) Then
               'Si es de la familia InterNetwork'
               If Address.AddressFamily = Sockets.AddressFamily.InterNetwork Then
                   'Y no es privada'
                   If Not IsPrivateIP(Address) Then
                       Return Address
                   End If
               End If
           End If
       Next

   End Function

   Public Function IsPrivateIP(ByVal IP As IPAddress) As Boolean

       Dim _0, _1 As Byte

       'Si el primer byte es 10 es privada'
       'Si el primer byte es 172 y el segundo está entre 16-31 es privada'
       'Si el segundo byte es 168 es privada'
       'De lo contrario es pública'

       _0 = IP.GetAddressBytes(0)
       _1 = IP.GetAddressBytes(1)

       Select Case _0
           Case 10
               Return True
           Case 172
               If _1 >= 16 And _1 <= 31 Then Return True
           Case 192
               If _1 = 168 Then Return True
       End Select

       Return False

   End Function
#63
Has lo que dice seba123neo, el For solo dará tantas vueltas como lineas tenga el RichTextBox, será más rápido que el código que tienes actualmente.
#64
Por supuesto el RichTextBox, existe precisamente para esas cosas:

Código (vb.net) [Seleccionar]
       RichTextBox1.Select(INDEX, LONGITUD)

        RichTextBox1.SelectionColor = COLOR

        RichTextBox1.Select(0, 0)
#65
Guardar en donde?, Tienes que seguir alguna formula de un triangulo en especifico o se vale cualquier método :laugh:? Se te olvido colocar el código ;)
#66
Usa las Apis de Windows FindFile y FindNextFile trabajan mucho más rápido cuando son miles de archivos. También te recomiendo hacer el trabajo desde un BackgroundWorker y usar el evento ProgressChanged para modificar cualquier aspecto visual como una barra de progreso o un Label si lo tienes.

Hay 2 maneras de saber si un archivo corresponde a un tipo, primero lo que haces verificar de una lista de extensiones, así lo hice en una aplicación y tengo está lista:

Código (vb.net) [Seleccionar]
           Public Video As String() = New String() {".ts", ".tts", ".m4v", ".mp4", ".mp4v", ".m2t", ".m2ts", ".mts", _
                              ".mov", ".avi", ".m1v", ".m2v", ".mod", ".mp2v", ".mpa", ".mpe", _
                              ".mpeg", ".mpg", ".mpv2", ".3g2", ".3gp2", ".3gp", ".3gpp", ".asf", _
                              ".wmv", ".flv", ".ogg", ".mkv", ".amc", ".mpeg1", ".mpeg2", ".mpeg4", _
                              ".mqv", ".qt", ".qtl", ".wmx", ".wmz"}


La otra es verificar las cabeceras de los archivos, pero eso es más incomodo XD
#67
Los bucles dejan la UI colgada, puedes usar Application.DoEvents dentro del bucle o un Me.Refresh antes de comenzar el bucle, no es la forma correcta pero para este caso esta bien. Environment.NewLine, representa el carácter de nueva linea.

Esos comandos de consola se puede llevar fácilmente a código con ayuda de IO.File, claro es solo una aclaración porque no se si necesitas a juro hacerlo en consola ;)
#68
Yo actualmente uso la 2012 pero prefiero continuar la 2008 mientras me acostumbro a la 2012 ya van 4 años de diferencia 2 versiones es mejor irse actualizando, los cambios siempre cuestan pero bueno :xD

Realmente lo que me importa del 2012 no es tanto el UI, sino son algunos detalles que le dieron: La herramienta que busca posibles optimizaciones para el código, agregar recursos y luego poder modificarlos y reemplazarlos con el proyecto abierto (antes el proceso te los bloqueaba), poder cambiar el nombre del proyecto, la versión del .Net Framework se puede cambiar con mayor facilidad ahora, el completador en el código ahora posee iconos muy diferentes para métodos, propiedades y funciones lo que nos ayuda a ubicar mas rápidamente una opción de manera visual, la jerarquía de llamadas te permite listar en un método el orden en que el código llama a los elementos dentro de el (puede ser útil para hallar objetos no inicializados), puedes usar la herramienta de pruebas para compilar y ejecutar un método individualmente, muestra las relaciones entre If Then End If, While End While (para no confundirse entre las sentencias)...

Por ahora sigo viendo que más hay de nuevo...
#69
Puedes intentar agregar los datos al final del ejecutable, y que los últimos 4 Bytes sean un Int32 que de el tamaño de los mismo, pero no se hasta que punto esto pueda dañar el ensamblado por eso te recomiendo los Resources.

Aquí esta un ejemplo, en Debug no funciona, vaya a saber quien por que :xD

Código (vb.net) [Seleccionar]
Module Module1

   Sub Main()

       'El File.Exists es solo es para que el generador y la prueba sean el mismo archivo'
       'en tu proyecto obviamente una cosa es el generador y otra es el ejecutable'
       'que se genera, esto como es un ejemplo están las dos cosas juntas.'
       If Not IO.File.Exists("C:\ejemplo.exe") Then

           'Hacemos una copia de nosotros mismos'
           IO.File.Copy(Process.GetCurrentProcess.MainModule.FileName, "C:\ejemplo.exe")

           Dim mensaje As String = "Este mensaje fue introducido al final del ensamblado..."
           Dim tamaño As Integer = mensaje.Length

           Dim ejemplo As New IO.FileStream("C:\ejemplo.exe", IO.FileMode.Open, IO.FileAccess.Write)

           'Nos vamos al final del archivo'
           ejemplo.Seek(0, IO.SeekOrigin.End)

           'Escribimos un margen de 8 bytes vacíos, para evitar errores'
           ejemplo.Write(New Byte(8 - 1) {}, 0, 7)

           'Escribimos el mensaje'
           ejemplo.Write(System.Text.Encoding.Default.GetBytes(mensaje), 0, tamaño)

           'Escribimos la longitud del mismo'
           ejemplo.Write(BitConverter.GetBytes(tamaño), 0, 4)

           ejemplo.Flush()
           ejemplo.Close()

           'Iniciamos el ejecutable con el mensaje'
           Process.Start("C:\ejemplo.exe")

       Else

           'Abrimos el archivo de nuestro propio proceso'
           Dim Ensamblado As New IO.FileStream(Process.GetCurrentProcess.MainModule.FileName, IO.FileMode.Open, IO.FileAccess.Read)

           'Nos ubicamos 4 posiciones hacia atras desde el final'
           Ensamblado.Seek(-4, IO.SeekOrigin.End)

           Dim Buffer As Byte() = New Byte(4 - 1) {}

           Dim TamañoDatos As Integer = 0

           'Leemos los ultimos 4 bytes'
           Ensamblado.Read(Buffer, 0, 4)

           'Estos 4 bytes corresponden al tamaño del mensaje, estan Int32'
           TamañoDatos = BitConverter.ToInt32(Buffer, 0)

           'Redimensionamos el buffer para recibir los datos'
           ReDim Buffer(TamañoDatos - 1)

           'Nos colocamos al inicio del mensaje, tomando en cuenta que contamos'
           'de atras hacia adelante el tamaño del mensaje y los 4 bytes que ocupaba'
           'el tamaño del mismo'
           Ensamblado.Seek(-TamañoDatos - 4, IO.SeekOrigin.End)

           'Leemos el mensaje'
           Ensamblado.Read(Buffer, 0, TamañoDatos)

           Ensamblado.Close()

           'Imprimimos el mensaje'
           Console.WriteLine(String.Format("Este ensamblado contiene el siguiente mensaje: {0}", _
                                           System.Text.Encoding.Default.GetString(Buffer)))

           Console.Read()

       End If

   End Sub

End Module

#70
Estas ingresando la información por consola?, o por medio de algún control por ejemplo un Textbox?