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 - Meta

#1
Quiero saber si es posible hacerlo con muchos menos códigos.

Código (csharp) [Seleccionar]
using System;

namespace Return_a_patir_del_caracter_20_Consola_01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region Configuración ventana.
            // Título de la ventana.
            Console.Title = "Return a partir del caracter 20";

            // Tamaño de la ventana, x, y.
            Console.SetWindowSize(70, 25);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Gray;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Black;

            // Limpiar pantalla y dejarlo todo gris.
            Console.Clear();

            // Visible el cursor.
            Console.CursorVisible = true;
            #endregion

            Console.WriteLine("Hello World!");
            string line = ReadLine20CharByLine();
        }

        static string ReadLine20CharByLine()
        {
            string result = "";
            ConsoleKeyInfo key;
            int count = 0;
            while ((key = Console.ReadKey()).Key != ConsoleKey.Enter)
            {
                if (key.Modifiers == (ConsoleModifiers.Control | ConsoleModifiers.Shift | ConsoleModifiers.Alt))
                {
                    continue; // ignora caracteres si viene con algún modificador
                }
                if (key.Key == ConsoleKey.Backspace) // si se pulsa BackSpace
                {
                    if (result.Length > 0)
                    {
                        if (count == 0)  // si estás al principio de un renglón que no es el 1ro
                        {                // borra el último caracter del renglón anterior
                            Console.SetCursorPosition(20, Console.CursorTop - 1);
                            Console.Write("\b \b");
                            count = 19;
                        }
                        else       // si no, borra el caracter y retrocede en la misma linea
                        {
                            Console.Write(" \b");
                            count--;
                        }
                        result = result.Substring(0, result.Length - 1);
                    }
                }
                else  // si no se pulsó BackSpace ni ninguna tecla con Modifier
                {     // se suma el caracter a result
                    result += key.KeyChar.ToString();
                    count++;
                    if (count == 20)
                    {
                        count = 0;
                        Console.SetCursorPosition(0, Console.CursorTop + 1);
                    }
                }
            }
            return result;
        }
    }
}


Feliz fin e año 2021.
#2
.NET (C#, VB.NET, ASP) / Salto de línea de palabras
30 Diciembre 2021, 23:35 PM
Buenas.

En modo consola C#.

Al escribir en el teclado al llegar al carácter 20, sigo escribiendo y me sale el renglón abajo. Así sucesivamente.

¿Es posible hacerlo sin pulsar Enter?

Que lo haga solo.

Felices fiestas 2021.
#3
Sin usar archivos bat externos.

Código (csharp) [Seleccionar]
ProcessStartInfo info = new ProcessStartInfo("cmd", "c/ shutdown -s -t 60");
#4
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 (csharp) [Seleccionar]
using System;
using System.IO.Ports;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace Velocímetro_Arduino_Puerto_serie_01
{
    public partial class Form1 : Form
    {
        // Utilizaremos un string como buffer de recepción.
        string recibidos;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
            try
            {
                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
            }

            catch
            {
                MessageBox.Show("No encuentra ningún puerto físico ni virtual.", "Aviso:",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            // // Añade puertos disponibles físicos  y virtuales.
            serialPort1.PortName = comboBox_Puerto.Text.ToString();
        }

        #region Funciones.

        void UsbConectado()
        {
            byte[] miBuffer = Encoding.ASCII.GetBytes("USB_CONECTADO");
            serialPort1.Write(miBuffer, 0, miBuffer.Length);
        }

        void UsbDesconectado()
        {
            byte[] miBuffer = Encoding.ASCII.GetBytes("USB_DESCONECTADO");
            serialPort1.Write(miBuffer, 0, miBuffer.Length);
        }

        // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable.
        protected override void WndProc(ref Message USB)
        {
            if (USB.Msg == 0x219)
            {
                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
            }

            // Detecta si hay cambios en el usb y si los hay los refleja.
            base.WndProc(ref USB);
        }

        // Procesar los datos recibidos en el buffer y extraer las tramas completas.
        void Actualizar(object sender, EventArgs e)
        {
            // Asignar el valor de la trama al label_Recibir_Km.
            label_Recibir_Km.Text = recibidos;

            switch (recibidos)
            {
                case "OK":
                    byte[] miBuffer = Encoding.ASCII.GetBytes("Conectado.      ");
                    serialPort1.Write(miBuffer, 0, miBuffer.Length);
                    label_Recibir_Km.Text = "Arduino conectado.";
                    break;
                default:
                    break;
            }

            // Limpiar.
            recibidos = "";
        }
        #endregion

        #region Botones.
        private void button_Conectar_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
                serialPort1.Open(); // Abrir puerto.
                UsbConectado();
                comboBox_Puerto.Enabled = false;
                comboBox_Baudios.Enabled = false;
                button_Conectar.Enabled = false;
                button_Desconectar.Enabled = true;
                button_Enviar.Enabled = true;
            }

            catch
            {
                MessageBox.Show("El puerto no existe.", "Aviso:",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void button_Desconectar_Click(object sender, EventArgs e)
        {
            UsbDesconectado();
            serialPort1.Close(); // Cerrar puerto.
            comboBox_Puerto.Enabled = true;
            comboBox_Baudios.Enabled = true;
            button_Conectar.Enabled = true;
            button_Desconectar.Enabled = false;
            button_Enviar.Enabled = false;
        }

        private void button_Enviar_Click(object sender, EventArgs e)
        {
            byte[] miBuffer = Encoding.ASCII.GetBytes("KM" + textBox_Km.Text);
            serialPort1.Write(miBuffer, 0, miBuffer.Length);
        }
        #endregion

        // Al cerrar el formulario, cierra el puerto si está abierto.
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                // Al cerrar este programa, indica a Arduino cerrado.
                // Arduino sigue con su rutina al detectar CERRADO.
                byte[] miBuffer = Encoding.ASCII.GetBytes("C#_CERRADO");
                serialPort1.Write(miBuffer, 0, miBuffer.Length);

                // Cerrar puerto.
                serialPort1.Close();
            }

            catch (Exception error)
            {
                MessageBox.Show(error.Message, "Aviso:",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            // Acumula los caracteres recibidos a nuestro "buffer" string.
            recibidos += serialPort1.ReadExisting();

            // Invocar o llamar al proceso de tramas.
            Invoke(new EventHandler(Actualizar));
        }
    }
}
#5
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.
#6
Si te funciona, avisa por aquí.

#7
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 (csharp) [Seleccionar]
using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Text;

namespace Enviar_email_Consola_07
{
    internal class Program
    {
        static void Main(string[] args)
        {
           

            // Variables.
            string usuario, contraseña, destinatario, asunto, mensaje;
            const int MAXIMA_LONGITUD = 2048;

            #region Configuración ventana.
            // Título de la ventana.
            Console.Title = "Gestor correo electrónico";

            // Tamaño de la ventana, x, y.
            Console.SetWindowSize(80, 25);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Black;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Gray;

            // Limpiar pantalla y dejarlo todo en color de fondo.
            Console.Clear();

            // Visible el cursor.
            Console.CursorVisible = true;
            #endregion

            // Título del programa.
            Console.WriteLine("\t\t----------------------------------------");
            Console.WriteLine("\t\t\tEnviar Correo Electrónico");
            Console.WriteLine("\t\t----------------------------------------");

            try
            {
               
                Console.WriteLine("\n");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tTu correo electrónico: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                usuario = Console.ReadLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tIntroducir contraseña: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                contraseña = LeerPassword();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tDestinatario: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                destinatario = Console.ReadLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tAsunto: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                asunto = Console.ReadLine();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tMensaje: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                //mensaje = Console.ReadLine();

                #region Enviar más de 255 caracteres.
                // Enviar mensaje de más de 255 caracteres. ################################
                Stream inputStream = Console.OpenStandardInput();
                byte[] buffer = new byte[MAXIMA_LONGITUD];
                int numerosBytesLeidos = inputStream.Read(buffer, 0, MAXIMA_LONGITUD);
                char[] chars = Console.InputEncoding.GetChars(buffer, 0, numerosBytesLeidos);
                mensaje = new string(chars);
                // #########################################################################
                #endregion
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("\t\tCantidad de texto introducido: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine(mensaje.Length);               

                MailMessage correo = new MailMessage(usuario, destinatario, asunto, mensaje);

                SmtpClient servidor = new SmtpClient("smtp.gmail.com")
                {
                    Port = 587
                };
                NetworkCredential credenciales = new NetworkCredential(usuario, contraseña);
                servidor.Credentials = credenciales;
                servidor.EnableSsl = true;

                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("\t\tEnviando correo...");
                servidor.Send(correo);
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\t\tCorreo enviado satisfactoriamente.");
                correo.Dispose();
                Console.CursorVisible = false;
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("ERROR: \n");
                Console.WriteLine("\t\t" + ex.Message);
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("\t\tNo se ha enviado el correo.");
                Console.ReadKey();
            }

        }

        // A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla.
        public static string LeerPassword()
        {
            ConsoleKeyInfo cki;
            StringBuilder sb = new StringBuilder();
            int contador = 0;

            do
            {
                cki = Console.ReadKey(true);
                if (cki.Key != ConsoleKey.Enter)
                {

                    sb.Append(cki.KeyChar);
                    if (contador < 1)
                    {
                        Console.Write("*");
                    }
                    contador++;
                }

                else
                {
                    break;
                }

            } while (true);
            Console.WriteLine();
            return sb.ToString();
        }
    }
}


Que tengan buen fin de lo que queda de año.  ;-) ;-) ;-) ;-)
#8
Muchas gracias, me ha funcionado.

Que pases muy bien lo que queda de este año 2.021.  ;-) ;-) ;-) ;-) ;-) ;-)
#9
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.

[youtube=640,360]https://www.youtube.com/watch?v=MJXOe60sciA[/youtube]

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.
#10
Hola:

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

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Codificación_UTF_8_01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region Configuración ventana.
            // Título de la ventana.
            Console.Title = "Encoder UTF-8";

            // Tamaño de la ventana, x, y.
            Console.SetWindowSize(80, 25);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Gray;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Black;

            // Limpiar pantalla y dejarlo todo gris.
            Console.Clear();

            // Visible el cursor.
            Console.CursorVisible = true;
            #endregion

            // Cree una codificación UTF-8.
            UTF8Encoding utf8 = new UTF8Encoding();

            // Una cadena Unicode con dos caracteres fuera de un rango de código de 8 bits.
            String unicodeString =
                "Esta cadena Unicode tiene 2 caracteres fuera del " +
                "rango ASCII:\n" +
                "Pi (\u03a0), y Sigma (\u03a3).";
            Console.WriteLine("Cadena original:");
            Console.WriteLine(unicodeString);

            // Codifica la cadena.
            Byte[] encodedBytes = utf8.GetBytes(unicodeString);
            Console.WriteLine();
            Console.WriteLine("Bytes codificados:");
            for (int ctr = 0; ctr < encodedBytes.Length; ctr++)
            {
                Console.Write("{0:X2} ", encodedBytes[ctr]);
                if ((ctr + 1) % 25 == 0)
                    Console.WriteLine();
            }
            Console.WriteLine();

            // Decodifica bytes de nuevo a cadena.
            String decodedString = utf8.GetString(encodedBytes);
            Console.WriteLine();
            Console.WriteLine("Bytes decodificados:");
            Console.WriteLine(decodedString);

            // Pulse cualquier tecla para salir.
            Console.ReadKey();
        }
    }
}


Dejo aquí la captura.


Ni copiando el propio código de MicroSoft funciona.

Saludos.