FAQ - Preguntas Frecuentes


1.- Donde se guarda el ejecutable luego de compilar el programa?



 
Debes ingresar a la carpeta de tu proyecto buscar la carpeta “bin” y dentro de ella la carpeta “debug” donde estará el ejecutable de tu aplicación. Igualmente puedes añadir esta linea para que muestre la ruta completa de la aplicación (ej: C#):

textBox1.Text = System.Windows.Forms.Application.ExecutablePath;

En este caso mostrará en un textbox la ruta completa del ejecutable creado.

2.- Compimir Aplicaciones .NET

http://www.madebits.com/netz/download.php

Similar a UPX

3.- Compresión de carpetas y archivos en .NET

DotNetZip

http://www.dotnetzip.codeplex.com

DotNetZip es una herramienta fácil de usar, rápida, gratuita biblioteca de clases y herramientas para manipular los archivos zip o carpetas. Comprimir y descomprimir es fácil: con DotNetZip,. NET escrito en Visual Basic, C # (cualquier lenguaje .NET) puede crear, leer, extraer, o actualizar archivos zip. En mono, o MS. NET.

DotNetZip funciona con la version full de .NET Framework, y también funciona en dispositivos móviles que utilizan el. NET Compact Framework. Crear y leer archivos zip en VB, C #, o cualquier otro. NET, o cualquier otro entorno de programación. DotNetZip apoya estos escenarios:
- Una aplicación ASP.NET que se crea de forma dinámica los archivos ZIP y permite que un navegador para descargar
- Un servicio de Windows que periódicamente comprime un directorio para fines de copia de seguridad y de archivo
- Un programa de WPF que modifica los archivos existentes - cambiar el nombre de las entradas, la eliminación de las entradas de un archivo, o añadir nuevas entradas a un archivo
- Una aplicación de Windows Forms que crea AES-archivos zip cifrado de la vida privada de los contenidos archivados.
- Una secuencia de comandos administrativos en PowerShell o VBScript que realiza la copia de seguridad y archivo.
- Un servicio de WCF que recibe un archivo zip como un archivo adjunto, y dinámicamente descomprime el zip a un flujo para el análisis de
- Una vieja escuela ASP (VBScript) de aplicación que genera un archivo ZIP a través de la interfaz COM para DotNetZIp
- Una aplicación de Windows Forms que se lee o actualizaciones de los archivos de SAO
- La creación de archivos zip de los contenidos corriente, de ahorro de un arroyo, la extracción de un arroyo, la lectura de un arroyo
- La creación de archivos de auto extracción.

SharpZipLib o Formalmente NZipLib

http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx

ziplib (SharpZipLib, formalmente NZipLib)es una libreria Zip, GZip, Tar y BZip2 escrita totalmente C#. Es implmentada como un ensamblado (instalable en el GAC), y puede ser facilmente incorporada en otros proyectos (sobre cualquier lenguaje de la plataforma .NET). El creador de #ziplib lo expreso de esta manera: "He portado la libreria zip a C# por que necesito compresion gip/zip y no quiero usar libzip.dll o algo parecido. Quiero todo  en C# puro."

4.- docking, Incrustar una aplicación  en un control o formulario

http://www.elguille.info/NET/dotnet/setParentNET.aspx

5.- Sockets, tutorial básico

Una red de computadoras (ordenadores) consiste en máquinas interconectadas mediante canales de comunicación.  Estas máquinas son Hosts y Routers. Los Hosts son computadoras que ejecutan aplicaciones, por ejemplo un navegador. Los Routers son equipos cuyo trabajo es retransmitir información de un canal de comunicación a otro. Estos pueden ejecutar programas, pero normalmente no son aplicativos. Para este post un canal de comunicación es un medio de transmisión de secuencias de bytes de un host a otro, este puede ser broadcast, como Ethernet, un modem dial-up, o algo más sofisticado.

Otro término que tenemos que definir es Protocolo. Un protocolo es un acuerdo acerca de los paquetes intercambiados por comunicación de los programas y lo que significan, además describe como está estructurado, por ejemplo: donde está la información del destinatario en el paquete y de que tamaño es. Un ejemplo es Http (Hypertext Transfer Protocol) que resuelve el problema de transferir objectos hipertexto entre servidores y hacerlo entendible por personas.

Ahora vamos directo al grano: ¿Qué es un Socket?

Un socket es una abstracción que permite a la aplicación “enchufarse” a la red para poder recibir y enviar data. Los principales tipos de socket hoy en día son los Stream Socket y los Datagram Socket. Los Stream Sockets utilizan TCP e IP para proveer n servicio confiable. Los Datagram Sockets usan UDP.

Otro concepto importante son el Stream Reader y el Stream Writer.

Son clases que nos ayudan a escribir y leer del buffer del socket. Sino existieran habría que leer el buffer y escribir en él directamente, cosa que es un poco engorrosa e innecesaria para la mayoría de las aplicaciones.

Código de ejemplo:

Codigo Servidor

public class NetworkServer
 
{
   public static void Main()
   {
      //creamos un thread para que el server
      //se ejecute en paralelo con el cliente
      //esto es solo por motivos prácticos del demo
      new Thread(new ThreadStart(
           delegate {
               new NetworkServer().Start(); }
                   )).Start();
 
      //Iniciamos el Cliente
      new Client().Connect();
      Console.WriteLine("Listo");
      Console.Read();
   }
 
   public  void Start()
   {
      // Creamos un TcpListener y le indicamos que
      //puerto va a poner en escucha.
      TcpListener tcpListener = new TcpListener(9898);
 
       //Iniciamos la esucha
      tcpListener.Start();
 
      //Este método queda bloqueado hasta que
      //se conecte un cliente
      Socket socketForClient = tcpListener.AcceptSocket();
      if (socketForClient.Connected)
      {
 
         // Si se conecta
         Console.WriteLine("Cliente conectado.");
         //Creamos el networkSream, el Reader y el writer
 
         NetworkStream networkStream =
                  new NetworkStream(socketForClient);
 
         StreamWriter streamWriter =
                  new StreamWriter(networkStream);
 
         StreamReader streamReader =
                  new StreamReader(networkStream);
 
         //Esta es la data a enviar.
         string theString = "Esta es la data de envio";
 
         try
         {
             //Escribimos la data en el stream
             streamWriter.WriteLine(theString);
 
             //Ahora le decimos que la mande.
             streamWriter.Flush();
 
             //Esperamos data del cliente
             //Y la escribimos por consola.
              theString = streamReader.ReadLine();
              Console.WriteLine(theString);
           }
           finally
           {
               //Cerramos las conexiones
               streamReader.Close();
               streamWriter.Close();
               networkStream.Close();
               socketForClient.Close();
           }
       }
   }
}

Codigo Cliente

public class Client
{
   public void Connect()
   {
       TcpClient socketForServer;
       string server = "localhost";
 
       try
       {  
           //Creamos un TcpCliente y le pasamos
           //el server y el puerto.
           socketForServer = new TcpClient(server, 9898);
       }
       catch
       {
           Console.WriteLine(
           "No se pudo conectar a {0}:9898", server);
           return;
       }
 
 
       //aqui es lo mismo que en el server. Usamos StreamWriter y Reader.
       NetworkStream networkStream = socketForServer.GetStream();
 
       StreamReader streamReader =
             new System.IO.StreamReader(networkStream);
 
       StreamWriter streamWriter =
             new System.IO.StreamWriter(networkStream);
 
       try
       {
           string outputString = streamReader.ReadLine();
           Console.WriteLine(outputString);
           streamWriter.WriteLine("Mensaje desde el Cliente");
           streamWriter.Flush();
       }
       catch
       {
           Console.WriteLine("Exception reading from Server");
       }
       finally
       {
           networkStream.Close();
       }
   }
}
Autor: D4N93R

6.- Serializar Datatable


Codigo Ejemplo

Public Shared Function Serialize(ByVal Obj As Object, ByVal AsByte As Boolean) As Byte()
       Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
       Dim ms As New IO.MemoryStream
       bf.Serialize(ms, Obj)
       Return ms.ToArray
End Function
 
Public Shared Function Deserialize(ByVal Obj As Byte()) As Object
       Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
       Dim ms As New IO.MemoryStream(Obj)
       Return bf.Deserialize(ms)
End Function

Autor: elmaro

7.- Denegar Acceso a Archivo o Directorios [SUB]

Codigo Ejemplo

Imports System.IO
Imports System.Security.AccessControl

 Public Sub ProtectedFolderOrFile(ByVal F As String, ByVal bool As Boolean)        
Dim dInfo As New DirectoryInfo(F), _
        dSecurity As DirectorySecurity = dInfo.GetAccessControl()
 
       Select Case bool
           Case True
               dSecurity.SetAccessRule(New FileSystemAccessRule(dSecurity.GetOwner(GetType(System.Security.Principal.NTAccount)), FileSystemRights.FullControl, AccessControlType.Deny))
           Case False
               dSecurity.RemoveAccessRule(New FileSystemAccessRule(dSecurity.GetOwner(GetType(System.Security.Principal.NTAccount)), FileSystemRights.FullControl, AccessControlType.Deny))
               dInfo.SetAccessControl(dSecurity)
               dSecurity.AddAccessRule(New FileSystemAccessRule(dSecurity.GetOwner(GetType(System.Security.Principal.NTAccount)), FileSystemRights.FullControl, AccessControlType.Allow))
       End Select
       dInfo.SetAccessControl(dSecurity)
   End Sub

8.-Raiz de una Ecuacion de  Segundo Grado

Codigo Ejemplo

 Dim x1, x2, bn As Double
       Dim a, b, c As Integer
 
       a = 1
       b = 6
       c = 1
 
       bn = b * -1
 
       Dim radicando As Double = Math.Pow(b, 2) - 4  * a * c
 
       If radicando = 0 Then
              x1 = (bn) / (2 *a)
              MsgBox(x1 & " y es raiz doble")
       ElseIf radicando > 0 Then
              x1 = (bn + Math.Sqrt(radicando)) / (2 *a)
              x2 = (bn - Math.Sqrt(radicando)) / (2 * a)
              MsgBox(x1)
              MsgBox(x2)
       Else
              Msgbox ("La ecuacion no tiene racies reales")
       End If

9.- ListView Items

Codigo Ejemplo

Items Seleccionados:
ListView1.SelectedItems

Si solo seleccionas 1:
ListView1.SelectedItems(0)

Obtener
nombre de ese item:
ListView1.SelectedItems(0).Text

10.- Presionar boton de un programa externo

Codigo Ejemplo

Para hacer eso tenes que saber el handle del botón que quieres 
presionar. Y enviarle con SendMessage "un click"

 <System.Runtime.InteropServices.DllImport("user32.DLL")> _
   Public Function SendMessage( _
           ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
           ByVal wParam As Integer, ByVal lParam As Integer _
           ) As Integer
   End Function
 
   <System.Runtime.InteropServices.DllImport("user32.DLL")> _
Public Function SendMessage( _
       ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
       ByVal wParam As Integer, ByVal lParam As String _
       ) As Integer
   End Function

Ver Perfil



Re: Presionar boton de un programa externo. ( VB. Net )
« Respuesta #1 en: 01 Marzo 2010, 16:45 »


Para hacer eso tenes que saber el handle del botón que quieres presionar. Y enviarle con SendMessage "un click"

Acá tienes el código del SendMessage:
Código
   <System.Runtime.InteropServices.DllImport("user32.DLL")> _
   Public Function SendMessage( _
           ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
           ByVal wParam As Integer, ByVal lParam As Integer _
           ) As Integer
   End Function
 
   <System.Runtime.InteropServices.DllImport("user32.DLL")> _
Public Function SendMessage( _
       ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
       ByVal wParam As Integer, ByVal lParam As String _
       ) As Integer
   End Function
Para buscar el handle del boton puedes instalarte WinID (asi sabes como buscarlo desde la aplicacion)

<System.Runtime.InteropServices.DllImport("user32.dll", _
   EntryPoint:="FindWindow")> _
   Public Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
   End Function
 
   <System.Runtime.InteropServices.DllImport("user32.dll")> _
   Public Function EnumChildWindows(ByVal hWndParent As System.IntPtr, ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Integer) As Boolean
   End Function
 
   Public Function GetChildWindows(ByVal ParentHandle As IntPtr) As IntPtr()
       Dim ChildrenList As New List(Of IntPtr)
       Dim ListHandle As GCHandle = GCHandle.Alloc(ChildrenList)
       Try
           EnumChildWindows(ParentHandle, AddressOf EnumWindow, GCHandle.ToIntPtr(ListHandle))
       Finally
           If ListHandle.IsAllocated Then ListHandle.Free()
       End Try
       Return ChildrenList.ToArray
   End Function
 
   Private Function EnumWindow(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean
       Dim ChildrenList As List(Of IntPtr) = GCHandle.FromIntPtr(Parameter).Target
       If ChildrenList Is Nothing Then Throw New Exception("GCHandle Target could not be cast as List(Of IntPtr)")
       ChildrenList.Add(Handle)
       Return True
   End Function
 
   <System.Runtime.InteropServices.DllImport("user32.dll")> _
   Public Sub GetClassName(ByVal hWnd As System.IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer)
       ' Leave function empty    
   End Sub

Completar la constante a enviar.


autor: elmaro

11.- [Tutorial] ¿System.Threading? ¡Cómo y Cuándo! (C#)

http://foro.elhacker.net/net/tutorial_iquestsystemthreading_iexclcomo_y_cuando_c-t277825.0.html;msg1367009#msg1367009

12.- Colores en  RichTextBox

Codigo Ejemplo

1er Ejemplo

Private Reservadas As String() = _
    {"if", "then", "else", "echo", "@"} 'En este arreglo pones todas las palabras que quieras que aparezcan en color


    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Dim i As Integer = RichTextBox1.SelectionStart
        Dim ActualCursor As Integer = RichTextBox1.SelectionStart 'recordar el punto de donde se estaba escribiendo
        Dim j As Integer = 0
        If i <> 0 Then 'evitar que el indice se salga del rango
            Do
                i = i - 1 'recorre en reversa hasta encontrar un espacio
                j = j + 1 'cuenta los caracteres de la palabra
            Loop While RichTextBox1.Text(i) <> CChar(" ") And i <> 0 'termina cuando encuentra un espacio
        End If
        Dim substring As String = RichTextBox1.Text.Substring(i, j).Trim() 'obtiene la ultima palabra escrita, quitandole los espacios

        If Reservadas.Contains(substring) Then 'comprobar que la palabra este en la lista
            RichTextBox1.Find(substring, RichTextBoxFinds.Reverse)
            RichTextBox1.SelectionColor = Color.Blue 'Colorea el texto
            RichTextBox1.SelectionStart = ActualCursor
        End If

        RichTextBox1.SelectionColor = Color.Black 'Vuelve al color primario
        RichTextBox1.SelectionStart = ActualCursor
    End Sub

2do Ejemplo

Dim lastPos As Integer ' Donde se estaba escribiendo
   Dim nLine As Integer   ' Linea donde se trabaja
   Dim start As Integer   ' Indice del principio de la linea dentro del texto
   Dim final As Integer   ' Fin de la linea (largo de la linea)
 
   Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged
       ' "@" se colorea                         (NOTA: Funciona a medias, con el tema
       ' "@asfdasd" : @ se colorea        ( de que si se borra queda el color que estaba)
       colorear("@", Color.Red, False, False)
       ' "echo" se colorea
       ' "malechor" : echo no se colorea
       colorear("echo", Color.Blue, False)
   End Sub
 
   Sub colorear(ByVal clave As String, ByVal color As Color, Optional ByVal spaceAntes As Boolean = True, Optional ByVal spaceDespues As Boolean = True)
       Try
           ' Para recordar en que posicion estaba y no provocar problemas
           lastPos = rtf.SelectionStart
           ' Obtenemos la linea a trabajar
           nLine = rtf.GetLineFromCharIndex(lastPos)
           ' Obtenemos el indice de la linea (indice dentro de todo el texto, no conviene separar la linea en otra variable)
           start = rtf.GetFirstCharIndexOfCurrentLine()
           ' establecemos el limite para buscar la palabra clave
           final = rtf.Lines(nLine).Length
 
           ' Para saber si se tiene que escribir la palabra clave por separado
           If spaceAntes Then clave = " " & clave
           If spaceDespues Then clave = clave & " "
 
           ' Buscamos la palabra clave, si no esta, no hacemos nada
           If Not rtf.Text.IndexOf(clave, start, final) = -1 Then
               rtf.SelectionStart = rtf.Text.IndexOf(clave, start, final)
               rtf.SelectionLength = clave.Length ' Para no colorear demas....
               rtf.SelectionColor = color
           End If
 
           ' Volvemos a donde se estaba escribiendo, y al color normal
           rtf.SelectionStart = lastPos
           rtf.SelectionLength = 0
           rtf.SelectionColor = rtf.ForeColor
       Catch ex As Exception
 
       End Try
   End Sub

autor: Xtriker

autor: raul338

13.- Bloquear Fichero

Codigo Ejemplo

Dim fs As New FileStream("c:\op.txt", FileMode.Open)
 
'Bloquear
fs.Lock(0, fs.Length)
 
'Desbloquear
fs.Unlock(0, fs.Length)

autor: elmaro

14.- Sockets en .NET

http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNET.htm

http://www.developerfusion.com/tools/convert/vb-to-csharp

15.- Copiar un List en otro (Por valor no por referencia)

Codigo Ejemplo

Class Persona
  Public Nombre as String
  Public Apellido as String
End Class

Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO
 
<Serializable()> _
Class Persona
  Public Nombre as String
  Public Apellido as String
 
  Public Function Clonar() As Persona
  End Function
End Class

en la funcion Clonar pones esto:
 Dim clon As Persona  ' Objeto donde se va a copiar por valor
 
       ' Serializadores, objeto en memoria
       Dim formatter As IFormatter = New BinaryFormatter()
       Dim str As Stream = New MemoryStream()
 
       formatter.Serialize(str, Me)  ' Copiamos a un stream en la memoria
       str.Seek(0, SeekOrigin.Begin) ' Vamos al principio para volver a "leer"
       clon = CType(formatter.Deserialize(str), Persona) ' Lo leemos y lo guardamos en el objeto "clonado"
 
       Return clon

Por lo cual todo junto te quedaria asi:

Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO
 
<Serializable()> _
Class Persona
  Public Nombre as String
  Public Apellido as String
 
  Public Function Clonar() As Persona
       Dim clon As Persona
 
       Dim formatter As IFormatter = New BinaryFormatter()
       Dim str As Stream = New MemoryStream()
 
       formatter.Serialize(str, Me)
       str.Seek(0, SeekOrigin.Begin)
       clon = CType(formatter.Deserialize(str), Persona)
 
       Return clon
  End Function
End Class

autor: raul338

Comments