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

#11
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.
#12
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 (csharp) [Seleccionar]
       private void button_Activar_Click(object sender, EventArgs e)
       {
           byte[] mBuffer = Encoding.ASCII.GetBytes("EncenderLed"); // Comando a enviar.
           serialPort1.Write(mBuffer, 0, mBuffer.Length);
       }


Al recibir datos es así.
Código (csharp) [Seleccionar]
       // Al recibir datos.
       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));
       }


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

Código (csharp) [Seleccionar]
           // Limpiar.
           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
#13
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 (csharp) [Seleccionar]
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 (csharp) [Seleccionar]
using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace Apagar_PC_con_botones_y_cancelar_01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button_Apagar_Click(object sender, EventArgs e)
        {
            ProcessStartInfo info = new ProcessStartInfo("cmd", "c/ shutdown -s -t 60");
            info.UseShellExecute = false;
            info.CreateNoWindow = true;
            info.WindowStyle = ProcessWindowStyle.Hidden;
            Process.Start(info);
        }

        private void button_Cancelar_Click(object sender, EventArgs e)
        {
            ProcessStartInfo info = new ProcessStartInfo("cmd", "c/ shutdown -a");
            info.UseShellExecute = false;
            info.CreateNoWindow = true;
            info.WindowStyle = ProcessWindowStyle.Hidden;
            Process.Start(info);
        }
    }
}


¿Es lo qué buscas?

Saludos.
#14
El mejor IDE que he visto es Visual Studio y Eclipse.
#15
Hola:

¿Exactamente qué te refieres?

¿Adaptar código de Python a C#?

¿Añadir código de Python de un archivo externo o un trozo de código directamente etiquetado incrustado en C# por medio?

¿Una dll hecho con Python (que yo sepa no se puede) y lo lee C#?

Saludos.
#16
Buenas:

Quiero enviar un email en modo consola que supere los 255 caracteres tal como se hace en cualquier navegador.

¿Es posible hacerlo?

Aquí dejo un ejemplo con  Ggail.

// Activar / desactivar Acceso de aplicaciones poco seguras en Google.
// https://myaccount.google.com/lesssecureapps

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)
        {
            #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

            // Variables.
            string usuario, contraseña, destinatario, asunto, mensaje;

            // 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();

                //----------------------------------------------
                byte[] bytes = new byte[2000]; // Nuevo tamanho máximo.
                Stream inputStream = Console.OpenStandardInput(bytes.Length);
                Console.SetIn(new StreamReader(inputStream));
                //----------------------------------------------

                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t\tMensaje: ");
                Console.ForegroundColor = ConsoleColor.Gray;
                mensaje = Console.ReadLine();
                Console.WriteLine();

                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 < 4)
                    {
                        Console.Write("*");
                    }
                    contador++;
                }

                else
                {
                    break;
                }

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


Felices fiestas camaradas.
#17
Hola:

Ver respuestas.

Saludos.
#18
Muchas gracias y los consejos mi muy distinguido amigo.
#19
Buenas:

Ya no falla. Lo corregí arriba y dejé una descripción.



Lo que hace el programa.
1. Solo se usa las flechas del teclado y la tecla Enter.
2. Te pide que introduzcas un nombre, que puedes manejar con la flecha del teclado.
3. Cuando termines de introducir un nombre, pulsas Enter, el cursor > irá en ATRÁS como puedes ver abajo.


4. Pulsas las teclas derecha o izquierda para elegir con el cursor > en GUARDAR y pulse Enter, guardará el nombre de un archivo de texto plano con la extensión .txt. Se llama Archivo.txt.
5. Si haz pulsado la tecla Enter en > Guardar, te muestra el mensaje de abajo.


6. Se pulsa Enter otra vez y se cierra el programa.
7. Al ejecutar el programa de nuevo, lee el Archivo.txt su contenido y lo muestra en pantalla.

Hasta aquí llega.

Ya que la estructura del programa indicas que lo tengo estilo chapuza, pues intentar hacerlo la mejor manera posible.

Una vez que domine esta parte. Debo hacer un mini menú de elegir 8 relés en el cual elijo uno a uno y escribo más guardo el nombre de cada uno de ellos.

Saludos.
#20
Hola gente del foro:

¿Cómo están?

Tengo un programa que al ejecutarlo, con el teclado Enter y las flechas puedo escribir. Pulso Enter y le doy en Guardar con Enter otra vez.

Cierro el programa, lo vuelvo abrir.

Si ejecuto y cierro el programa, misteriosamente el archivo .txt está todo borrado, sobre todo si lo hago rápido.

¿Por qué ocurre esto?

¿Hay alguna forma de solucionarlo?

Código completo C#:
Código (csharp) [Seleccionar]
using System;
using System.IO;

namespace LCD_nombre_archivo_consola_12
{
    class Program
    {
        // Variables.
        static string guardarNombre = ""; // Guardar nombre escrito.
        static int coordenadaX = 0; // Coordenada X del setCursorPisition.
        static ConsoleKey tecla; // Guarda cualquier tecla pulsada.
        static int index = 0; // Índice.

        // Caracteres de este array.
        static readonly char[] roALFANUMERICO = new char[]
        {
         'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
         'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
         'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
         'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
         '¿', '?', '(', ')', '[', ']', '{', '}', '<', '>', '=', '$', '&', '@', '\'', '"', ' '
        };

        // Dirección del carácter del array. El 83 presenta al espacio ' ' del array roALFANUMERICO indicado justo arriba.
        // Hay un total de 85 caracteres. Se cuenta desde el 0 al 84.
        static readonly int[] roINDICE_ARRAY = new int[]
        {
         84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84
        };

        // Palabras del array para imprimir en pantalla.
        static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };

        static void Main(string[] args)
        {
            // Título de la pantalla.
            Console.Title = "Cambiar nombre";

            Inicio();
        }

        static void MainMenu()
        {
            Console.Clear(); // Limpiar pantalla.

            Console.SetCursorPosition(0, 0);
            Console.Write("Nombre del relé 1:  ");
            Console.SetCursorPosition(0, 1);

            // Recorre el índice del array, del 0 hasta donde llegue.
            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                // Imprime los caracteres del array.
                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
            }

            Console.SetCursorPosition(3, 3);
            Console.Write(roTEXTO[0]); // ATRÁS.
            Console.SetCursorPosition(12, 3);
            Console.Write(roTEXTO[1]); // GUARDAR.
        }

        #region Inicio.
        static void Inicio()
        {
            Console.SetWindowSize(20, 5); // Residemensiona pantalla. X = 20, Y = 5.
            Console.BackgroundColor = ConsoleColor.Gray; // Fondo gris.
            Console.ForegroundColor = ConsoleColor.Black; // Letras negras.

            // ¿El archivo Existe?
            if (File.Exists("Archivo.txt"))
            {
                // Sí. Lee el archivo de texto.
                string nombre = File.ReadAllText("Archivo.txt");
                int a, b; // Almacena ídice array.
                for (a = 0; a < nombre.Length; a++)
                {
                    for (b = 0; roALFANUMERICO[b] != nombre[a]; b++)
                    {
                        ;
                    }
                    roINDICE_ARRAY[a] = b; // b indica índice y lo añade al roINDICE_ARRAY.
                }
            }
            // No. El Archivo.txt no existe.
            else
            {
                // Crea un archivo nuevo, escribe el contenido en el archivo y, a continuación, lo cierra.
                // Si el archivo de destino ya existe, se sobrescribe.
                File.WriteAllText("Archivo.txt", guardarNombre);
            }

            MainMenu(); // Dibuja el menú.

            while (true)
            {
                Console.CursorVisible = true; // Cursor invisible.
                index = 0;

                // Si se cumple estas condiciones, Enter, flecha izquierda, flecha derecha
                if ((tecla == ConsoleKey.Enter) || (tecla == ConsoleKey.RightArrow) || (tecla == ConsoleKey.LeftArrow))
                {
                    MainMenu(); // Dibuja el menú.
                }

                // Posiciona cursor.
                Console.SetCursorPosition(coordenadaX, 1);

                // Almacena en la variable tecla, la tecla pulsada.
                tecla = Console.ReadKey(true).Key;

                // Si coincide una tecla pulsada.
                switch (tecla)
                {
                    case ConsoleKey.RightArrow: // Flecha derecha detectada.
                        // ¿CoordenadaX menor que 15?
                        if (coordenadaX < 15)
                        {
                            coordenadaX++; // Sí. Añada + 1 en la coordenadaX.
                        }
                        // No. Sale de aquí.
                        break;

                    case ConsoleKey.LeftArrow: // Flecha izquierda detectada.
                        // ¿coordenadaX es mayor que 0?
                        if (coordenadaX > 0)
                        {
                            coordenadaX--; // Sí. Decremente o quita -1.
                        }
                        // No. Sale de aquí.
                        break;

                    case ConsoleKey.UpArrow: // Flecha arriba.
                        roINDICE_ARRAY[coordenadaX]++; // En el índice del array añade + en coordenadaX.
                        // ¿El índice del array es mayor o igual que el array Alfanumérico?
                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
                        {
                            roINDICE_ARRAY[coordenadaX] = 0; // Sí. Deja en 0 la coordenada del índice del array.
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.DownArrow: // Flecha abajo detectado.
                        roINDICE_ARRAY[coordenadaX]--; // Decrementa a -1 el índice del array.
                        // ¿La coordenadaX del indice del array es menor que 0?
                        if (roINDICE_ARRAY[coordenadaX] < 0)
                        {
                            // Sí. Imprimir el valor alfanumérico.
                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.Enter: // Detecta la tecla Enter.
                        Console.SetCursorPosition(1, 3); // Posición del cursor.
                        Console.CursorVisible = false; // Se oculta el cursor.
                        Console.Write(">"); // Imprime en pantalla >.

                        // ¿La tecla almacenada es distinto a la tecla Enter?
                        while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter)
                        {
                            // Sí.
                            switch (tecla)
                            {
                                case ConsoleKey.RightArrow:
                                    index = 1;
                                    Console.SetCursorPosition(1, 3);
                                    Console.Write(" ");
                                    Console.SetCursorPosition(10, 3);
                                    Console.Write(">");
                                    break;
                                case ConsoleKey.LeftArrow:
                                    Console.SetCursorPosition(10, 3);
                                    Console.Write(" ");
                                    Console.SetCursorPosition(1, 3);
                                    Console.Write(">");
                                    index = 0;
                                    break;

                                case ConsoleKey.UpArrow:
                                    Inicio();
                                    break;

                                case ConsoleKey.DownArrow:
                                    Inicio();
                                    Console.SetCursorPosition(coordenadaX, 1);
                                    break;
                            }
                        }

                        if (index == 0)
                        {
                            Atras();
                        }
                        if (index == 1)
                        {
                            Guardar();
                        }
                        break;
                }
            }
        }
        #endregion

        static void Atras()
        {
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS PULSADO ATRÁS   ");
            Console.ReadKey(); // Pulse cualquier tecla para salir.
        }

        static void Guardar()
        {
            guardarNombre = "";
            Console.Clear(); // Limpia la pantalla.

            // Lee todo el contennido del array y lo guarda en guardarNombre.
            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
            {
                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
            }
            Console.SetCursorPosition(0, 2);
            Console.Write(guardarNombre); // Imprime el contenido.

            // Crear Archivo.txt y el contenido de guardarNombre.
            File.WriteAllText("Archivo.txt", guardarNombre);

            Console.SetCursorPosition(0, 1);
            Console.Write("HAS GUARDADO       ");

            // Pulsa otra vez tecla.
            Console.ReadKey();
        }
    }
}


Saludos camaradas.

Edito:
Ya funciona. Tenía que poner el else despuués del if, para que no se ejecute siempre, que lo tenía en el aire. Aún así voy a leer atentamente tus consejos.