ESCRITORIO REMOTO 1

03-  Control Basico de Escritorio Remoto con Visual Basic (VB.NET)
 
Se trata de una mejora de las anteriores versiones de este proyecto, incluyendo un teclado en el formulario y algunas simplificaciones de interfaz.
 
Codigo:
 
FORM1
 
Imports System.Net.Sockets
Imports System.Text.Encoding
Imports System.Net
Imports System.IO
Imports System.Runtime.InteropServices
Public Class Form1
    Public LAIP As String
    Dim ENVIANTE As New UdpClient() 'IMAGENES
    Dim RECEPTOR As New UdpClient(2000) 'IMAGENES
    Dim ENVIANTEMENSAJES As New UdpClient() ' MENSAJES
    Dim RECEPTORMENSAJES As New UdpClient(3000) ' MENSAJES
    Dim BM2 As Bitmap
    Dim PUNTOX As Integer
    Dim PUNTOY As Integer

    <DllImport("user32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Sub mouse_event(dwFlags As Integer, dx As Integer, dy As Integer, cButtons As Integer, dwExtraInfo As Integer)
    End Sub
    Private Const MOUSEEVENTF_LEFTDOWN As Integer = &H2
    Private Const MOUSEEVENTF_LEFTUP As Integer = &H4
    Private Const MOUSEEVENTF_RIGHTDOWN As Integer = &H8
    Private Const MOUSEEVENTF_RIGHTUP As Integer = &H10
    Public Sub CLICKIZDO()
        mouse_event(MOUSEEVENTF_LEFTDOWN, PUNTOX, PUNTOY, 0, 0)
        mouse_event(MOUSEEVENTF_LEFTUP, PUNTOX, PUNTOY, 0, 0)
    End Sub
    'Public Sub CLICKDCHO()
    '    mouse_event(MOUSEEVENTF_RIGHTDOWN, PUNTOX, PUNTOY, 0, 0)
    '    mouse_event(MOUSEEVENTF_RIGHTUP, PUNTOX, PUNTOY, 0, 0)
    'End Sub
    Private Sub MOVERMOUSE()
        Cursor = New Cursor(Cursor.Current.Handle)
        Cursor.Position = New Point(PUNTOX, PUNTOY)
    End Sub
    Public Sub INSTRUCCIONES() 'ORDENES QUE EJECUTA EL RECEPTORMENSAJES
        Select Case (LabelORDENRECIBIDA.Text.ToUpper)
            Case "ARRIBA"
                PUNTOX = Cursor.Position.X
                PUNTOY = Cursor.Position.Y - 25
                MOVERMOUSE()
            Case "ABAJO"
                PUNTOX = Cursor.Position.X
                PUNTOY = Cursor.Position.Y + 25
                MOVERMOUSE()
            Case "IZQUIERDA"
                PUNTOX = Cursor.Position.X - 25
                PUNTOY = Cursor.Position.Y
                MOVERMOUSE()
            Case "DERECHA"
                PUNTOX = Cursor.Position.X + 25
                PUNTOY = Cursor.Position.Y
                MOVERMOUSE()
            Case "PARA"
                PUNTOX = Cursor.Position.X
                PUNTOY = Cursor.Position.Y
                MOVERMOUSE()
            Case "INTRO"
                CLICKIZDO()
            Case "DOBLE"
                CLICKIZDO()
                CLICKIZDO()
            Case "STANDBY"
                TimerSTANBY.Enabled = True
        End Select

    End Sub
    Public Sub CAPTURA()
        'CAPTURA DE PANTALLA
        Dim BM As Bitmap
        BM = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
        Dim DIBUJO As Graphics
        DIBUJO = Graphics.FromImage(BM)
        DIBUJO.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size)
        DIBUJO.DrawImage(BM, 0, 0, BM.Width, BM.Height)
        'AÑADE EL CURSOR
        Dim BM3 As Bitmap
        BM3 = New Bitmap(BM)
        Dim DIBUJO3 As Graphics
        DIBUJO3 = Graphics.FromImage(BM3)
        DIBUJO3.FillEllipse(Brushes.Black, Cursor.Position.X, Cursor.Position.Y, 30, 30)
        DIBUJO3.DrawImage(BM3, 0, 0, BM.Width, BM.Height)
        'REDUCE TAMAÑO PARA EVITAR PROBLEMAS BUFFER
        BM2 = New Bitmap(CInt(BM3.Width / NumericUpDown1.Value), CInt(BM3.Height / NumericUpDown1.Value))
        Dim DIBUJO2 As Graphics
        DIBUJO2 = Graphics.FromImage(BM2)
        DIBUJO2.DrawImage(BM3, 0, 0, BM2.Width, BM2.Height)
    End Sub
    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If ButtonENVIAIMAGENES.Visible = False Then
            MsgBox("HASTA PRONTO")
        ElseIf ButtonRECIBEIMAGENES.Visible = False Then
            LabelORDENENVIADA.Text = "STANDBY"
            MsgBox("SE HA ACTIVADO STANDBY EN ESCRITORIO REMOTO")
        End If
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        RECEPTOR.Client.ReceiveTimeout = 100 'TIEMPO PARA PASAR A ESPERA
        RECEPTOR.Client.Blocking = False 'RECEPTOR NO BLOQUEADO
        RECEPTORMENSAJES.Client.ReceiveTimeout = 100 'TIEMPO PARA PASAR A ESPERA
        RECEPTORMENSAJES.Client.Blocking = False 'RECEPTOR NO BLOQUEADO
    End Sub
    Private Sub ButtonENVIAIMAGENES_Click(sender As System.Object, e As System.EventArgs) Handles ButtonENVIAIMAGENES.Click
        TextBoxTIEMPO.ReadOnly = True
        OCULTACONTROL()
        LabelORDENRECIBIDA.Text = "STANDBY"
        ENVIAMENSAJES()
        TimerSTANBY.Interval = CInt(TextBoxTIEMPO.Text)
        TimerSTANBY.Enabled = True
        'Me.WindowState = FormWindowState.Minimized
    End Sub
    Private Sub ButtonRECIBEIMAGENES_Click(sender As System.Object, e As System.EventArgs) Handles ButtonRECIBEIMAGENES.Click
        TextBoxTIEMPO.ReadOnly = True
        OCULTAREMOTO()
        LabelORDENENVIADA.Text = "DESPIERTA"
        ENVIAMENSAJES()
        TimerRECIBEIMAGENES.Enabled = True

    End Sub
    Private Sub TimerENVIAIMAGENES_Tick(sender As System.Object, e As System.EventArgs) Handles TimerENVIAIMAGENES.Tick
        'ENVIA
        CAPTURA()
        ENVIANTE.Connect(LAIP, 2000) 'SE CONECTA CON EL RECEPTOR
        Dim ARRAY As New MemoryStream()
        BM2.Save(ARRAY, Imaging.ImageFormat.Jpeg)
        Dim IMAGEN_ARRAY As Byte() = ARRAY.ToArray
        ENVIANTE.Send(IMAGEN_ARRAY, IMAGEN_ARRAY.Length) 'ENVIA EL MENSAJE
    End Sub
    Private Sub TimerRECIBEIMAGENES_Tick(sender As System.Object, e As System.EventArgs) Handles TimerRECIBEIMAGENES.Tick
        'RECIBE
        Try
            Dim IP As IPEndPoint = New IPEndPoint(IPAddress.Any, 0) 'RECIBIRA DESDE CUALQUIER IP, POR CUALQUIER PUERTO
            Dim RECIBEMENSAJE As Byte() = RECEPTOR.Receive(IP) 'RECIBE EL MENSAJE EN BYTES
            Dim IMAGEN As New MemoryStream(RECIBEMENSAJE)
            Dim IMAGENRECIBIDA As Image = Image.FromStream(IMAGEN)
            PictureBox1.Image = IMAGENRECIBIDA
        Catch ex As Exception
        End Try
    End Sub
    Private Sub TimerRECIBEMENSAJES_Tick(sender As System.Object, e As System.EventArgs) Handles TimerRECIBEMENSAJES.Tick
        Try
            Dim IP As IPEndPoint = New IPEndPoint(IPAddress.Any, 0) 'RECIBIRA DESDE CUALQUIER IP, POR CUALQUIER PUERTO
            Dim RECIBEMENSAJE As Byte() = RECEPTORMENSAJES.Receive(IP) 'RECIBE EL MENSAJE EN BYTES
            LabelORDENRECIBIDA.Text = UTF7.GetString(RECIBEMENSAJE) 'DECODIFICA EL MENSAJE A STRING
            INSTRUCCIONES() 'ORDENES QUE EJECUTA EL OTRO ORDENADOR
        Catch ex As Exception
        End Try
    End Sub
    Public Sub ENVIAMENSAJES()
        Try
            ENVIANTEMENSAJES.Connect(LAIP, 3000) 'SE CONECTA CON EL RECEPTOR
            Dim mensaje As Byte() = UTF7.GetBytes(LabelORDENENVIADA.Text) 'CODIFICA EN BYTES
            ENVIANTEMENSAJES.Send(mensaje, mensaje.Length) 'ENVIA EL MENSAJE
        Catch ex As Exception
        End Try
       
    End Sub
    Private Sub TimerSTANBY_Tick(sender As System.Object, e As System.EventArgs) Handles TimerSTANBY.Tick
        Try
            Dim IP As IPEndPoint = New IPEndPoint(IPAddress.Any, 0) 'RECIBIRA DESDE CUALQUIER IP, POR CUALQUIER PUERTO
            Dim RECIBEMENSAJE As Byte() = RECEPTORMENSAJES.Receive(IP) 'RECIBE EL MENSAJE EN BYTES
            LabelORDENRECIBIDA.Text = UTF7.GetString(RECIBEMENSAJE) 'DECODIFICA EL MENSAJE A STRING
            If LabelORDENRECIBIDA.Text = "DESPIERTA" Then
                TimerENVIAIMAGENES.Enabled = True
                TimerRECIBEMENSAJES.Enabled = True
                TimerSTANBY.Enabled = False
            End If
        Catch ex As Exception
        End Try
    End Sub
    Private Sub ButtonGUARDAIMAGENES_Click(sender As System.Object, e As System.EventArgs) Handles ButtonGUARDAIMAGENES.Click
        If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            PictureBox1.Image.Save(SaveFileDialog1.FileName & ".JPG", Imaging.ImageFormat.Jpeg)
        End If
    End Sub
    Private Sub ButtonIZQUIERDA_Click(sender As System.Object, e As System.EventArgs) Handles ButtonIZQUIERDA.Click
        LabelORDENENVIADA.Text = "IZQUIERDA"
        ENVIAMENSAJES()
    End Sub
    Private Sub ButtonARRIBA_Click(sender As System.Object, e As System.EventArgs) Handles ButtonARRIBA.Click
        LabelORDENENVIADA.Text = "ARRIBA"
        ENVIAMENSAJES()
    End Sub
    Private Sub ButtonDERECHA_Click(sender As System.Object, e As System.EventArgs) Handles ButtonDERECHA.Click
        LabelORDENENVIADA.Text = "DERECHA"
        ENVIAMENSAJES()
    End Sub
    Private Sub ButtonABAJO_Click(sender As System.Object, e As System.EventArgs) Handles ButtonABAJO.Click
        LabelORDENENVIADA.Text = "ABAJO"
        ENVIAMENSAJES()
    End Sub
    Private Sub ButtonINTRO_Click(sender As System.Object, e As System.EventArgs) Handles ButtonINTRO.Click
        LabelORDENENVIADA.Text = "INTRO"
        ENVIAMENSAJES()
    End Sub
    Private Sub ButtonDOBLE_Click(sender As System.Object, e As System.EventArgs) Handles ButtonDOBLE.Click
        LabelORDENENVIADA.Text = "DOBLE"
        ENVIAMENSAJES()
    End Sub
    Private Sub ButtonCONECTAR_Click(sender As System.Object, e As System.EventArgs) Handles ButtonCONECTAR.Click
        LISTA_DE_CONTACTOS.Show()
    End Sub
    Public Sub OCULTAREMOTO()
        ButtonCONECTAR.Visible = False
        ButtonRECIBEIMAGENES.Visible = False
        ButtonENVIAIMAGENES.Visible = False
        LabelORDENRECIBIDA.Visible = False
        TextBoxTIEMPO.Visible = False
        NumericUpDown1.Visible = False
    End Sub
    Public Sub OCULTACONTROL()
        ButtonCONECTAR.Visible = False
        ButtonENVIAIMAGENES.Visible = False
        LabelORDENENVIADA.Visible = False
        ButtonRECIBEIMAGENES.Visible = False
        ButtonABAJO.Visible = False
        ButtonARRIBA.Visible = False
        ButtonIZQUIERDA.Visible = False
        ButtonDERECHA.Visible = False
        ButtonINTRO.Visible = False
        ButtonDOBLE.Visible = False
        ButtonGUARDAIMAGENES.Visible = False
        PictureBox1.Visible = False
    End Sub
End Class
 
LISTA DE CONTACTOS
 
Imports Microsoft.VisualBasic.FileIO
Imports System.Net.Sockets
Public Class LISTA_DE_CONTACTOS
    Dim DICCIONARIO As New SortedDictionary(Of String, String)
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'CREA UN NUEVO CONTACTO Y ACTUALIZA EL FICHERO DATOS.txt Y EL LISTBOX
        Dim CONTACTO As String
        Dim IP As String
        CONTACTO = TextBox1.Text
        IP = TextBox2.Text
        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\" & "CONTACTOS.txt", "$" & CONTACTO & "$" & IP & vbCrLf, True)
        MsgBox("SE HA CREADO EL USUARIO: " & CONTACTO & "  IP: " & IP)
        ACTUALIZAR_CONTACTOS()
        TextBox1.Text = ""
        TextBox2.Text = ""
    End Sub
    Private Sub LISTA_DE_CONTACTOS_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'AL CARGAR LLENA EL LISTBOX
        ACTUALIZAR_CONTACTOS()
    End Sub
    Public Sub ACTUALIZAR_CONTACTOS()
        ' VACIAMOS EL LISTBOX Y EL ARRAY DICCIONARIO
        ListBox1.Items.Clear()
        DICCIONARIO.Clear()
        ' RECORREMOS EL FICHERO CONTACTOS.txt PARA LLENAR EL LISTBOX
        Dim filename As String = Application.StartupPath & "\" & "CONTACTOS.txt"
        Dim fields As String()
        Dim delimiter As String = "$"
        Using parser As New TextFieldParser(filename)
            parser.SetDelimiters(delimiter)
            While Not parser.EndOfData
                ' Read in the fields for the current line
                fields = parser.ReadFields()
                ' Add code here to use data in fields variable.
                ListBox1.Items.Add(fields(1))
                ' CREAMOS UN ARRAY DE TIPO DICCIONARIO CON LOS VALORES QUE OBTENEMOS AL RECORRER EL ARCHIVO DE DATOS
                DICCIONARIO.Add(fields(1), fields(2))
            End While
        End Using
        'ORDENAMOS ALFABETICAMENTE EL LISTBOX
        ListBox1.Sorted = True
    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Dim ENUMERADOR As IDictionaryEnumerator
        ENUMERADOR = DICCIONARIO.GetEnumerator
        While ENUMERADOR.MoveNext
            If ENUMERADOR.Key = ListBox1.SelectedItem Then
                Form1.LAIP = ENUMERADOR.Value
                Form1.LabelCONTACTO.Text = ENUMERADOR.Key
            End If
        End While
        Close()
    End Sub
End Class
 
 

3 comentarios:

  1. Hola que tal, se que esta pregunta se sale del post y del tema pero tengo una duda, cómo podría guardar los cambios realizados a una nota creada con el richtextbox, ya se guardar con el SaveFileDialog pero lo que quisiera es poder hacer que cuando vuelva abrir el archivo con un OpenFileDialog y le haga modificaciones esas se guarden al presionar guardar si me pudieras ayudar con esa duda te lo agradecería bastante, de antemano muchas gracias. Saludos

    ResponderEliminar
    Respuestas
    1. Hola:
      No se si esto lo que te interesaba:
      http://youtu.be/yvjCEFNsnXs
      Si falta algo o no he entendido tu pregunta dejame un comentario.
      Saludos.

      Eliminar
  2. Podrías pasarme el proyecto, luisguzboni@gmail.com, gracias

    ResponderEliminar