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.
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ú
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
RichTextBox1.Select(INDEX, LONGITUD)
RichTextBox1.SelectionColor = COLOR
RichTextBox1.Select(0, 0)
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"}
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