elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ... 261
211  Programación / .NET (C#, VB.NET, ASP) / Al recibir datos, se me comen las palabras o faltan caracteres en: 30 Diciembre 2021, 06:11 am
Buenas:

Al recibir datos por puerto serie, muchas veces se me come las palabras.

¿Hay alguna forma que no fallen las entradas de mensajes por puerto serie?

Dejo el código fuente aquí.

Código
  1. using System;
  2. using System.IO.Ports;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Windows.Forms;
  6.  
  7. namespace Velocímetro_Arduino_Puerto_serie_01
  8. {
  9.    public partial class Form1 : Form
  10.    {
  11.        // Utilizaremos un string como buffer de recepción.
  12.        string recibidos;
  13.  
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.  
  19.        private void Form1_Load(object sender, EventArgs e)
  20.        {
  21.            // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
  22.            try
  23.            {
  24.                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  25.            }
  26.  
  27.            catch
  28.            {
  29.                MessageBox.Show("No encuentra ningún puerto físico ni virtual.", "Aviso:",
  30.                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
  31.            }
  32.  
  33.            // // Añade puertos disponibles físicos  y virtuales.
  34.            serialPort1.PortName = comboBox_Puerto.Text.ToString();
  35.        }
  36.  
  37.        #region Funciones.
  38.  
  39.        void UsbConectado()
  40.        {
  41.            byte[] miBuffer = Encoding.ASCII.GetBytes("USB_CONECTADO");
  42.            serialPort1.Write(miBuffer, 0, miBuffer.Length);
  43.        }
  44.  
  45.        void UsbDesconectado()
  46.        {
  47.            byte[] miBuffer = Encoding.ASCII.GetBytes("USB_DESCONECTADO");
  48.            serialPort1.Write(miBuffer, 0, miBuffer.Length);
  49.        }
  50.  
  51.        // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable.
  52.        protected override void WndProc(ref Message USB)
  53.        {
  54.            if (USB.Msg == 0x219)
  55.            {
  56.                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
  57.            }
  58.  
  59.            // Detecta si hay cambios en el usb y si los hay los refleja.
  60.            base.WndProc(ref USB);
  61.        }
  62.  
  63.        // Procesar los datos recibidos en el buffer y extraer las tramas completas.
  64.        void Actualizar(object sender, EventArgs e)
  65.        {
  66.            // Asignar el valor de la trama al label_Recibir_Km.
  67.            label_Recibir_Km.Text = recibidos;
  68.  
  69.            switch (recibidos)
  70.            {
  71.                case "OK":
  72.                    byte[] miBuffer = Encoding.ASCII.GetBytes("Conectado.      ");
  73.                    serialPort1.Write(miBuffer, 0, miBuffer.Length);
  74.                    label_Recibir_Km.Text = "Arduino conectado.";
  75.                    break;
  76.                default:
  77.                    break;
  78.            }
  79.  
  80.            // Limpiar.
  81.            recibidos = "";
  82.        }
  83.        #endregion
  84.  
  85.        #region Botones.
  86.        private void button_Conectar_Click(object sender, EventArgs e)
  87.        {
  88.            try
  89.            {
  90.                serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
  91.                serialPort1.Open(); // Abrir puerto.
  92.                UsbConectado();
  93.                comboBox_Puerto.Enabled = false;
  94.                comboBox_Baudios.Enabled = false;
  95.                button_Conectar.Enabled = false;
  96.                button_Desconectar.Enabled = true;
  97.                button_Enviar.Enabled = true;
  98.            }
  99.  
  100.            catch
  101.            {
  102.                MessageBox.Show("El puerto no existe.", "Aviso:",
  103.                MessageBoxButtons.OK, MessageBoxIcon.Warning);
  104.            }
  105.        }
  106.  
  107.        private void button_Desconectar_Click(object sender, EventArgs e)
  108.        {
  109.            UsbDesconectado();
  110.            serialPort1.Close(); // Cerrar puerto.
  111.            comboBox_Puerto.Enabled = true;
  112.            comboBox_Baudios.Enabled = true;
  113.            button_Conectar.Enabled = true;
  114.            button_Desconectar.Enabled = false;
  115.            button_Enviar.Enabled = false;
  116.        }
  117.  
  118.        private void button_Enviar_Click(object sender, EventArgs e)
  119.        {
  120.            byte[] miBuffer = Encoding.ASCII.GetBytes("KM" + textBox_Km.Text);
  121.            serialPort1.Write(miBuffer, 0, miBuffer.Length);
  122.        }
  123.        #endregion
  124.  
  125.        // Al cerrar el formulario, cierra el puerto si está abierto.
  126.        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  127.        {
  128.            try
  129.            {
  130.                // Al cerrar este programa, indica a Arduino cerrado.
  131.                // Arduino sigue con su rutina al detectar CERRADO.
  132.                byte[] miBuffer = Encoding.ASCII.GetBytes("C#_CERRADO");
  133.                serialPort1.Write(miBuffer, 0, miBuffer.Length);
  134.  
  135.                // Cerrar puerto.
  136.                serialPort1.Close();
  137.            }
  138.  
  139.            catch (Exception error)
  140.            {
  141.                MessageBox.Show(error.Message, "Aviso:",
  142.                MessageBoxButtons.OK, MessageBoxIcon.Warning);
  143.            }
  144.        }
  145.  
  146.        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  147.        {
  148.            // Acumula los caracteres recibidos a nuestro "buffer" string.
  149.            recibidos += serialPort1.ReadExisting();
  150.  
  151.            // Invocar o llamar al proceso de tramas.
  152.            Invoke(new EventHandler(Actualizar));
  153.        }
  154.    }
  155. }
  156.  
212  Programación / .NET (C#, VB.NET, ASP) / MAnejar dispositivo por vía Web en: 29 Diciembre 2021, 06:31 am
Hola:

Me descargué una aplicación para controlar un SAI/UPS de mi ordenador o PC, al instalarlo, veo que los datos se comunican por puerto RS232 o el propio USB. Ahora uso el RS232.

Veo que el SAI envía datos al PC y lo lee el programa que en realidad es una Web, por supuesto, tiene SERVICIOS activado, si no, no funciona.

Con esto quiero decir, que debo crear un servicio y una web para controlar datos al enviar y recibir.

Por ejemplo, si el SAI me envía al PC un dato por el puerto serie, en este caso:

"245 VAC de Entrada"

"230 VAC de Salida"


Esto automaticamente lo lee la Web.

También en la Web se le puede enviar comandos al puerto serie desde la Web, por ejemplo, un comando que me desactive el altavoz del SAI.

Pulso un botón, en el puerto serie envía este dato:

"MUTE_ZUMBADOR"

Y el SAI lo sabe.

Con Visual Studio Community 2022 y usando el lenguaje C#. ¿Cuál es la mejor plataforma para crear una Web y servicio?

¿O cuál proyecto inicio?

Quiero saber los pasos.

Saludos.
213  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda como integrar *.py en C# en: 28 Diciembre 2021, 23:43 pm
Si te funciona, avisa por aquí.

214  Programación / .NET (C#, VB.NET, ASP) / Re: ¿Cómo enviar más de 255 letras? en: 28 Diciembre 2021, 23:41 pm
Muy buen planteamiento. Muchísimas gracias, ya me sirvió.

Dejo el código completo por si alguien lo necesita.

Funciona todo al 100 %, con tildes incluidos.
Código
  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Net.Mail;
  5. using System.Text;
  6.  
  7. namespace Enviar_email_Consola_07
  8. {
  9.    internal class Program
  10.    {
  11.        static void Main(string[] args)
  12.        {
  13.  
  14.  
  15.            // Variables.
  16.            string usuario, contraseña, destinatario, asunto, mensaje;
  17.            const int MAXIMA_LONGITUD = 2048;
  18.  
  19.            #region Configuración ventana.
  20.            // Título de la ventana.
  21.            Console.Title = "Gestor correo electrónico";
  22.  
  23.            // Tamaño de la ventana, x, y.
  24.            Console.SetWindowSize(80, 25);
  25.  
  26.            // Color de fondo.
  27.            Console.BackgroundColor = ConsoleColor.Black;
  28.  
  29.            // Color de las letras.
  30.            Console.ForegroundColor = ConsoleColor.Gray;
  31.  
  32.            // Limpiar pantalla y dejarlo todo en color de fondo.
  33.            Console.Clear();
  34.  
  35.            // Visible el cursor.
  36.            Console.CursorVisible = true;
  37.            #endregion
  38.  
  39.            // Título del programa.
  40.            Console.WriteLine("\t\t----------------------------------------");
  41.            Console.WriteLine("\t\t\tEnviar Correo Electrónico");
  42.            Console.WriteLine("\t\t----------------------------------------");
  43.  
  44.            try
  45.            {
  46.  
  47.                Console.WriteLine("\n");
  48.                Console.ForegroundColor = ConsoleColor.Cyan;
  49.                Console.Write("\t\tTu correo electrónico: ");
  50.                Console.ForegroundColor = ConsoleColor.Gray;
  51.                usuario = Console.ReadLine();
  52.                Console.WriteLine();
  53.                Console.ForegroundColor = ConsoleColor.Cyan;
  54.                Console.Write("\t\tIntroducir contraseña: ");
  55.                Console.ForegroundColor = ConsoleColor.Gray;
  56.                contraseña = LeerPassword();
  57.                Console.WriteLine();
  58.                Console.ForegroundColor = ConsoleColor.Cyan;
  59.                Console.Write("\t\tDestinatario: ");
  60.                Console.ForegroundColor = ConsoleColor.Gray;
  61.                destinatario = Console.ReadLine();
  62.                Console.WriteLine();
  63.                Console.ForegroundColor = ConsoleColor.Cyan;
  64.                Console.Write("\t\tAsunto: ");
  65.                Console.ForegroundColor = ConsoleColor.Gray;
  66.                asunto = Console.ReadLine();
  67.                Console.WriteLine();
  68.                Console.ForegroundColor = ConsoleColor.Cyan;
  69.                Console.Write("\t\tMensaje: ");
  70.                Console.ForegroundColor = ConsoleColor.Gray;
  71.                //mensaje = Console.ReadLine();
  72.  
  73.                #region Enviar más de 255 caracteres.
  74.                // Enviar mensaje de más de 255 caracteres. ################################
  75.                Stream inputStream = Console.OpenStandardInput();
  76.                byte[] buffer = new byte[MAXIMA_LONGITUD];
  77.                int numerosBytesLeidos = inputStream.Read(buffer, 0, MAXIMA_LONGITUD);
  78.                char[] chars = Console.InputEncoding.GetChars(buffer, 0, numerosBytesLeidos);
  79.                mensaje = new string(chars);
  80.                // #########################################################################
  81.                #endregion
  82.                Console.WriteLine();
  83.                Console.ForegroundColor = ConsoleColor.DarkCyan;
  84.                Console.Write("\t\tCantidad de texto introducido: ");
  85.                Console.ForegroundColor = ConsoleColor.Gray;
  86.                Console.WriteLine(mensaje.Length);                
  87.  
  88.                MailMessage correo = new MailMessage(usuario, destinatario, asunto, mensaje);
  89.  
  90.                SmtpClient servidor = new SmtpClient("smtp.gmail.com")
  91.                {
  92.                    Port = 587
  93.                };
  94.                NetworkCredential credenciales = new NetworkCredential(usuario, contraseña);
  95.                servidor.Credentials = credenciales;
  96.                servidor.EnableSsl = true;
  97.  
  98.                Console.WriteLine();
  99.                Console.ForegroundColor = ConsoleColor.Yellow;
  100.                Console.WriteLine("\t\tEnviando correo...");
  101.                servidor.Send(correo);
  102.                Console.WriteLine();
  103.                Console.ForegroundColor = ConsoleColor.Green;
  104.                Console.WriteLine("\t\tCorreo enviado satisfactoriamente.");
  105.                correo.Dispose();
  106.                Console.CursorVisible = false;
  107.                Console.ReadKey();
  108.            }
  109.            catch (Exception ex)
  110.            {
  111.                Console.ForegroundColor = ConsoleColor.Red;
  112.                Console.WriteLine("ERROR: \n");
  113.                Console.WriteLine("\t\t" + ex.Message);
  114.                Console.WriteLine();
  115.                Console.ForegroundColor = ConsoleColor.Yellow;
  116.                Console.WriteLine("\t\tNo se ha enviado el correo.");
  117.                Console.ReadKey();
  118.            }
  119.  
  120.        }
  121.  
  122.        // A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla.
  123.        public static string LeerPassword()
  124.        {
  125.            ConsoleKeyInfo cki;
  126.            StringBuilder sb = new StringBuilder();
  127.            int contador = 0;
  128.  
  129.            do
  130.            {
  131.                cki = Console.ReadKey(true);
  132.                if (cki.Key != ConsoleKey.Enter)
  133.                {
  134.  
  135.                    sb.Append(cki.KeyChar);
  136.                    if (contador < 1)
  137.                    {
  138.                        Console.Write("*");
  139.                    }
  140.                    contador++;
  141.                }
  142.  
  143.                else
  144.                {
  145.                    break;
  146.                }
  147.  
  148.            } while (true);
  149.            Console.WriteLine();
  150.            return sb.ToString();
  151.        }
  152.    }
  153. }

Que tengan buen fin de lo que queda de año.  ;-) ;-) ;-) ;-)
215  Programación / .NET (C#, VB.NET, ASP) / Re: Escribir bien las tildes, ñ y demás en: 26 Diciembre 2021, 21:39 pm
Muchas gracias, me ha funcionado.

Que pases muy bien lo que queda de este año 2.021.  ;-) ;-) ;-) ;-) ;-) ;-)
216  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda como integrar *.py en C# en: 26 Diciembre 2021, 16:35 pm
Buenas:  ::)

Muy curioso el FFT.

Lo más parecido a lo que indicas, si tienes el archivo.py, puedes cargarlo en el proyecto de C#. Algo explica en este vídeo.



La otra manera de hacerlo, es leer bien el código Python y adaptarlo a C# directamente. Como se hace mucho en C++ al C# o al revés.

¿Cómo ejecuto un script de Python desde C #?
https://www.it-swarm-es.com/es/c%23/como-ejecuto-un-script-de-python-desde-c/1067937383/

Saludos.
217  Programación / .NET (C#, VB.NET, ASP) / Escribir bien las tildes, ñ y demás en: 26 Diciembre 2021, 16:28 pm
Hola:

Quiero hacer este ejemplo y no muestra bien los caracteres en consola.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Codificación_UTF_8_01
  8. {
  9.    internal class Program
  10.    {
  11.        static void Main(string[] args)
  12.        {
  13.            #region Configuración ventana.
  14.            // Título de la ventana.
  15.            Console.Title = "Encoder UTF-8";
  16.  
  17.            // Tamaño de la ventana, x, y.
  18.            Console.SetWindowSize(80, 25);
  19.  
  20.            // Color de fondo.
  21.            Console.BackgroundColor = ConsoleColor.Gray;
  22.  
  23.            // Color de las letras.
  24.            Console.ForegroundColor = ConsoleColor.Black;
  25.  
  26.            // Limpiar pantalla y dejarlo todo gris.
  27.            Console.Clear();
  28.  
  29.            // Visible el cursor.
  30.            Console.CursorVisible = true;
  31.            #endregion
  32.  
  33.            // Cree una codificación UTF-8.
  34.            UTF8Encoding utf8 = new UTF8Encoding();
  35.  
  36.            // Una cadena Unicode con dos caracteres fuera de un rango de código de 8 bits.
  37.            String unicodeString =
  38.                "Esta cadena Unicode tiene 2 caracteres fuera del " +
  39.                "rango ASCII:\n" +
  40.                "Pi (\u03a0), y Sigma (\u03a3).";
  41.            Console.WriteLine("Cadena original:");
  42.            Console.WriteLine(unicodeString);
  43.  
  44.            // Codifica la cadena.
  45.            Byte[] encodedBytes = utf8.GetBytes(unicodeString);
  46.            Console.WriteLine();
  47.            Console.WriteLine("Bytes codificados:");
  48.            for (int ctr = 0; ctr < encodedBytes.Length; ctr++)
  49.            {
  50.                Console.Write("{0:X2} ", encodedBytes[ctr]);
  51.                if ((ctr + 1) % 25 == 0)
  52.                    Console.WriteLine();
  53.            }
  54.            Console.WriteLine();
  55.  
  56.            // Decodifica bytes de nuevo a cadena.
  57.            String decodedString = utf8.GetString(encodedBytes);
  58.            Console.WriteLine();
  59.            Console.WriteLine("Bytes decodificados:");
  60.            Console.WriteLine(decodedString);
  61.  
  62.            // Pulse cualquier tecla para salir.
  63.            Console.ReadKey();
  64.        }
  65.    }
  66. }

Dejo aquí la captura.


Ni copiando el propio código de MicroSoft funciona.

Saludos.
218  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda como integrar *.py en C# en: 26 Diciembre 2021, 14:56 pm
Hola:

Así sin más nunca lo he hecho. Lo que he hecho y hice un documento, es crear una dll de C++ nativo y que lo lea C#. O lo que es lo mismo de lo que quieres hacer.

Crear una dll hecho con Python y lo lea C#.

Revisa el documento si es así lo que deseas. En este ejemmplo es mostrar un texto y una suma cuya funciones está en C++ con una dll y C# lo llama para mostrar los datos. También se puede crear controles visuales.

Es así lo más parecido que te puedo ayudar.

Saludos.
219  Programación / .NET (C#, VB.NET, ASP) / Re: Comunicación SerialPort concurrente en: 26 Diciembre 2021, 04:31 am
Felices fiestas.  ;-)

¿Tienes claro que comandos envias y qué esperas recibir de él?

Puedes hacer una mini lista sobre comandos aquí para poder hacer ejemplos.

Si usas el Windows Form, añades un botón en el formulario, hablando en C# para este ejemplo, para enviar comandos es así.
Código
  1.        private void button_Activar_Click(object sender, EventArgs e)
  2.        {
  3.            byte[] mBuffer = Encoding.ASCII.GetBytes("EncenderLed"); // Comando a enviar.
  4.            serialPort1.Write(mBuffer, 0, mBuffer.Length);
  5.        }

Al recibir datos es así.
Código
  1.        // Al recibir datos.
  2.        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  3.        {
  4.            // Acumula los caracteres recibidos a nuestro 'buffer' (string).
  5.            recibidos += serialPort1.ReadExisting();
  6.  
  7.            // Invocar o llamar al proceso de tramas.
  8.            Invoke(new EventHandler(Actualizar));
  9.        }

No olvidar que cada comando recibido, debes vaciar la variable para que no se concatenen, que luego no funciona.

Código
  1.            // Limpiar.
  2.            recibidos = "";

Ya nos contarás más información sobre ello. Que dispositivos es y si te sabes realmente los comandos y respuestas a enviar o lo haces tuyo propio o viene en documentación del dispositivo.

Saludos.  :D
220  Programación / .NET (C#, VB.NET, ASP) / Re: C# Ejecutar archivo .bat en: 26 Diciembre 2021, 04:02 am
Buenas y felices fiestas 2021.

En este código de abajo, añades el programa CMD.exe y luego el comando como apagar el PC o ordenador en 60 segundos.
Código
  1. ProcessStartInfo info = new ProcessStartInfo("cmd", "c/ shutdown -s -t 60");

En el Windows Form con Visual Studio Community 2022 gratuito. Añades dos botones. Este es su código completo para que te hagas una idea, se incluye más código para que no muestre la ventana del cmd a la hora de ejecutarlo.

Código
  1. using System;
  2. using System.Diagnostics;
  3. using System.Windows.Forms;
  4.  
  5. namespace Apagar_PC_con_botones_y_cancelar_01
  6. {
  7.    public partial class Form1 : Form
  8.    {
  9.        public Form1()
  10.        {
  11.            InitializeComponent();
  12.        }
  13.  
  14.        private void button_Apagar_Click(object sender, EventArgs e)
  15.        {
  16.            ProcessStartInfo info = new ProcessStartInfo("cmd", "c/ shutdown -s -t 60");
  17.            info.UseShellExecute = false;
  18.            info.CreateNoWindow = true;
  19.            info.WindowStyle = ProcessWindowStyle.Hidden;
  20.            Process.Start(info);
  21.        }
  22.  
  23.        private void button_Cancelar_Click(object sender, EventArgs e)
  24.        {
  25.            ProcessStartInfo info = new ProcessStartInfo("cmd", "c/ shutdown -a");
  26.            info.UseShellExecute = false;
  27.            info.CreateNoWindow = true;
  28.            info.WindowStyle = ProcessWindowStyle.Hidden;
  29.            Process.Start(info);
  30.        }
  31.    }
  32. }

¿Es lo qué buscas?

Saludos.
Páginas: 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ... 261
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines