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
C# - VB.NET / Re: E-mail y filtrado
Enero 10, 2022, 02:31:23 AM
El código que tengo por ahora es este de aquí abajo pero funciona raro.

Antes que nada, usar gmail y activarlo.
// Activar / desactivar Acceso de aplicaciones poco seguras en Google.
// No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

// Descargar onePOP, compilar su dll y añadirlo en referencias.
// No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: php


using System;
using System.Collections.Generic;
using OpenPop.Pop3;
using OpenPop.Mime;
using System.Text.RegularExpressions;
using System.Timers;

namespace Recibir_email_Consola_05
{
    class Program
    {

        // Disparador de eventos del timer. Dispara cada cierto tiempo por el timer.
        public static void DisparadorEventosTimer(object source, ElapsedEventArgs e)
        {
            Console.SetCursorPosition(0, 5);
            Console.Out.WriteLine("Evento: ");

            ConnectPop3 oC = new ConnectPop3();

            List<OpenPop.Mime.Message> lstMessages = oC.GetMessages();


            if (lstMessages != null)
            {

                foreach (var oMessage in lstMessages)
                {
                    Console.SetCursorPosition(0, 6);
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine("EMAIL DE: *******************************************************");
                    Console.ForegroundColor = ConsoleColor.Gray;

                    //string email = oMessage.Headers.ReturnPath.ToString();
                    string email = oMessage.Headers.From.ToString();

                    // Expresión regular detectar dirección email.
                    Regex rx = new Regex(@"<(.*?)>");
                    //Regex rx = new Regex(@"");
                    // Guarda la dirección email en la variable "emailCompleto".
                    string emailCompleto = rx.Match(email).Groups[1].Value;
                    // Muestra solo la dirección del email.
                    Console.WriteLine(emailCompleto);

                    // ¿Son email filtrados? Sí, ejecuta las intrucciones necesarios para leer asunto y mensajes.
                    if ((emailCompleto == "[email protected]") || (emailCompleto == "[email protected]"))
                    {
                        Console.WriteLine("{0} a pasado el filtro: ", emailCompleto);

                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine();
                        Console.WriteLine("ASUNTO: ********************************************************");
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(oMessage.Headers.Subject + "\n"); // Asunto.
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine();
                        Console.WriteLine("MENSAJE: *******************************************************");
                        Console.ForegroundColor = ConsoleColor.Gray;

                        // ¿Es texto sin formato? Sí.
                        // if (oMessage.MessagePart.IsText == true)
                        if (oMessage.MessagePart.IsText)
                        {
                            Console.WriteLine("Texto sin formato.");
                            Console.WriteLine(oMessage.MessagePart.GetBodyAsText());
                        }
                        // No. Texto con formato.
                        else
                        {
                            Console.WriteLine("Texto con formato.");

                            // Encuentra el primer texto sin formato.
                            MessagePart plainTextPart = oMessage.FindFirstPlainTextVersion();
                            if (plainTextPart != null)
                            {
                                // El mensaje tenía una versión de texto sin formato.
                                Console.WriteLine(plainTextPart.GetBodyAsText());
                            }
                            else
                            {
                                // Trate de encontrar un cuerpo para mostrar en algunas de las otras versiones de texto.
                                List<MessagePart> textVersions = oMessage.FindAllTextVersions();
                                if (textVersions.Count >= 1)
                                {
                                    Console.WriteLine(textVersions[0].GetBodyAsText());
                                }
                                else
                                {
                                    Console.WriteLine("<<OpenPop>> No se puede encontrar un cuerpo de versión de texto en este mensaje para mostrar <<OpenPop>>");
                                }
                            }
                        }
                    }

                    // No. Entonces,ignorará los email no filtrados.
                    else
                    {
                        Console.WriteLine("No ha pasado el filtro y no se leerá ningún email.");
                    }
                }
            }

            // Letras amarillas.
            //Console.ForegroundColor = ConsoleColor.Yellow;
            //Console.WriteLine();
            //Console.WriteLine("FIN DEL PROGRAMA.");
        }

        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Recibir e-mail con Consola C#";

            // Tamaño de la ventana, x, y, o ancho y alto.
            const byte ancho = 80;
            const byte alto = 40;
            Console.SetWindowSize(ancho, alto);

            // Cursor invisible.
            Console.CursorVisible = false;

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

            try
            {
                Timer miTimer = new Timer
                {
                    Enabled = true
                };
                miTimer.Elapsed += new ElapsedEventHandler(DisparadorEventosTimer);
                miTimer.Interval = 10000; // 10 segundos.

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

            // Cualquier error mostrado en mensaje y de color rojo.
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine();
                Console.WriteLine(ex);

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

    public class ConnectPop3
    {
        public string email = "[email protected]";
        public string contraseña = "g0923490xgh0945g450Xj4025g";
        public int puerto = 995;
        public bool usarSLL = true;
        public string Hostame = "pop.gmail.com";

        public List<OpenPop.Mime.Message> GetMessages()
        {
            using (Pop3Client oClient = new Pop3Client())
            {
                oClient.Connect(Hostame, puerto, usarSLL);
                oClient.Authenticate(email, contraseña);

                int messageCount = oClient.GetMessageCount();
                List<OpenPop.Mime.Message> lstMessages = new List<OpenPop.Mime.Message>(messageCount);

                for (int i = messageCount; i > 0; i--)
                {
                    lstMessages.Add(oClient.GetMessage(i));
                }

                return lstMessages;
            }
        }
    }
}
#2
C# - VB.NET / E-mail y filtrado
Enero 09, 2022, 01:29:03 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Buenas:

En modo consola puedo enviar correo electrónico, cuyo código fuente lo dejo abajo para que lo vean. Solo puede enviar mensajes o e-mail, funciona muy bien.

Ahora quiero hacer otro programa, que solo lee email también en modo consola y  los e-mail que tanga filtrado, si tengo tres e-mail filtrados, pues solo acepta esos e-mail en pantalla. Todo esto, lee un mensaje por cada 5 minutos. Mensaje, Asunto y la dirección del e-mail.

¿Cómo se hace?

Aquí abajo dejo el codigo de enviar e-mail por consola que funciona al 100 %, con tildes, ñ y otros símbolos correctamente a parte de enviar más de 255 caracteres.

Para que funcione y se usa gmail.

// Activar / desactivar Acceso de aplicaciones poco seguras en Google.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código C#:
Código: php
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 = 40000;

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

            // Tamaño de la ventana, x, y, o ancho y alto.
            const byte ancho = 80;
            const byte alto = 25;
            Console.SetWindowSize(ancho, alto);

            // 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.
                // #########################################################################
                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)
                {
                    // Enviar textos con tildes.
                    BodyEncoding = Encoding.UTF8
                };

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


Feliz año 2.022. ;)
#3
Buenas:

Me está dando resultados diferentes de un terminal que el propio mio en hexadecimal y no se el motivo. Cuando los datos recibidos son los mismos.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Quiero saber el motivo. Muchas gracias.

Configuración puerto serie.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Código C#:
Código: php
using System;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Terminal_UPS_SAI_02
{
    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)
        {
            try
            {
                // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
                comboBox_Puerto.DataSource = SerialPort.GetPortNames();

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

                // Añadir en la variable recibidos datos codificados.
                recibidos += serialPort1.Encoding = Encoding.GetEncoding(437);

                // Añadir datos recibidos en el evento.
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
            }

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

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

        private void button_Conectar_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
                serialPort1.BaudRate = Convert.ToInt32(comboBox_Baudios.Text); // Baudios.
                serialPort1.Open(); // Abrir puerto.
                comboBox_Puerto.Enabled = false;
                comboBox_Baudios.Enabled = false;
                button_Conectar.Enabled = false;
                button_Desconectar.Enabled = true;
                groupBox_Control_Zumbador.Enabled = true;
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "Aviso:",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

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

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

        // Al cerrar el formulario, cierra el puerto si está abierto.
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                serialPort1.Close(); // Cerrar puerto.
            }

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

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

        // Procesar los datos recibidos en el bufer y extraer tramas completas.
        private void Actualizar(object sender, EventArgs e)
        {

            // Asignar el valor de la trama al richTextBox.
            richTextBox1.Text += recibidos;

            // Pasar a hexadecimal.
            foreach (byte b in recibidos)
            {
                // x = minúscula, X = mayúscula.
                richTextBox1.Text += b.ToString("X2");
            }

            // Nueva línea.
            richTextBox1.Text += Environment.NewLine;

            // Pasar a binario.
            foreach (string leer in recibidos.Select(c => Convert.ToString(c, 2)))

            {
                richTextBox1.Text += leer.ToString();
            }

            // Nueva línea.
            richTextBox1.Text += Environment.NewLine;
            richTextBox1.Text += Environment.NewLine;

            // Selecciona la posición final para leer los mensajes entrantes.
            richTextBox1.SelectionStart = richTextBox1.Text.Length;

            // Mantiene el scroll en la entrada de cada mensaje.
            richTextBox1.ScrollToCaret();

            // Limpiar.
            recibidos = "";
        }

        private void button_Activar_Click(object sender, EventArgs e)
        {
            //byte[] mBuffer = Encoding.ASCII.GetBytes("K60:1\r"); // Comando K60:1 activar.
            byte[] mBuffer = Encoding.ASCII.GetBytes("X87\r"); // Comando X87 Flags.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_Desactivar_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("K60:0\r"); // Comando K60:0 desactivar.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_Mute_temporal_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("K60:2\r"); // Comando K60:2 Mute temporal.
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_Limpiar_Click(object sender, EventArgs e)
        {
            // Limpiar.
            richTextBox1.Clear();
        }
    }
}


¿Alguna idea?

Saludos camaradas. ;)
#4
Hola:

Quiero crear en modo consola dos programas.

Programa 1, hace como si fuera el hyper Terminal de Windows, que usa el puerto serie.Introduzco por ejemplo, el valor 4 + 2, pulse Enter, lo envía por el puerto serie esos datos al Programa 2.

Programa 2, recibe datos del puerto serie por parte del Programa 1 y devuelve los datos calculados como en este caso, 4 + 2 = 6.

Ejemplo de como hacerlo.

Tengo dos programas abiertos en cada ordenador o PC en el cual se comunica por el puerto serie, tienen el protocolo 9600 y el Programa 1 tiene el COM1 y el Programa 2 tiene el COM2.

1) Teniendo los dos programas arrancados o ejecutados, el Programa 1 me pide que introduzca algún valor o fórmula matemática sencilla como este. Envío 1 + 4 y luego pulso Enter.

2) Esa información 1 + 4 es enviado al puerto serie desde el Programa 1 y le llega al Programa 2, en el cual detecta un valor matemático que en este caso es 1 + 4, lo calcula y devuelve este resultado 1 + 4 = 5 al Programa 1.

3) El Programa 1 recibe los datos y muestra en pantalla esto: 1 + 4 = 5.

Los dos programas, por supuesto, usan el mismo protocolo.
Código: php
         // Cree un nuevo objeto SerialPort con la configuración predeterminada.
            SerialPort Puerto_serie = new SerialPort("COM4");

            Puerto_serie.BaudRate = 115200;
            Puerto_serie.Parity = Parity.None;
            Puerto_serie.StopBits = StopBits.One;
            Puerto_serie.DataBits = 8;
            Puerto_serie.Handshake = Handshake.None;
            Puerto_serie.RtsEnable = true;

            // Establecer los tiempos de espera de lectura / escritura.
            Puerto_serie.ReadTimeout = 500; // Milisegundos.
            Puerto_serie.WriteTimeout = 500;

            // Detecta cualquier dato recibido.
            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            Puerto_serie.Open(); // Abrir puerto.

¿Es posible hacerlo?

Saludos.
#5
Dudas y pedidos generales / CheckBox modo consola
Julio 08, 2020, 07:34:43 PM
Buenas:

En la consola de C#, quiero crear un menú que solo aparezca checkBox como indica abajo.


En este programa solo se usa las teclas de las flechas y la tecla Enter.

Como se puede ver, con la > indica en que opciones estás. Si pulsas arriba todo el rato, por ejemlo si estás en la [ ] Opción A, vuelves a pulsar arriba, directamente el > estrá por debajo, ocurre lo mismo pero al revés.

Como ejemplo, elejo la [ ] Opción B, pulse Enter y se pone una X en medio, como que está seleccionado.

Quedaría así:
> [X] Opción B.

Como indica en la captura de arriba.

En realidad quiero poner siete opciones en total, desde la A hasta la G.

En la primera parte de la pantalla quedaría algo así.

Código: php
 [ ] Opción A
  [X] Opción B
[ ] Opción C
> [X] Opción D

Si sigo pulsando la tecla hacia abajo, cambia otra página de menús, en realidad es el mismo. Quedaría como indica abajo.
Código: php
>  [X] Opción E
[ ] Opción F
[ ] Opción G
  Salir


Si pulsas salir, vuelves al menú principal. Por supuesto, todo dato guardado que en su variable, cada opción en su variable, y de paso, cada variable que en realidad es boleano, queda guardado en un Archivo.txt. Guarda datos de una opción desde que pulse Enter, sea  marcando la X o no. Todo queda guardado. A parte de todo esto, al ejecutar la aplicación, lee todos los datos que estaba almacenado en Archivo.txt.

Lo he intentado pero no doy para más, dejo el código de ejemplo aquí abajo.
Código: csharp
using System;

namespace CheckBox_consola_01_cs
{
    class Program
    {
        #region Variables.
        private static readonly string[] TEXTO = new string[] {
            "[ ] Opción A        ",
            "[X] Opción B        ",
            "[ ] Opción C        ",
            "SALIR"
        };
        #endregion

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

            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5);

            // Fondo verde.
            Console.BackgroundColor = ConsoleColor.Blue;

            // Letras negras.
            Console.ForegroundColor = ConsoleColor.White;

            // Oculto el cursor.
            Console.CursorVisible = false;

            // Almacena la tecla pulsada en la variable.
            ConsoleKey teclaInicial;

            do
            {
                // Limpiar pantalla.
                Console.Clear();

                // Posición del cursor del título del MENÚ PRINCIPAL.
                Console.SetCursorPosition(0, 0);

                // Título.
                Console.Write("   MENÚ PRINCIPAL   ");

                // Pocisión de la hora.
                Console.SetCursorPosition(4, 2);

                // Formato numérico dd/MM/yyyy.
                Console.Write(DateTime.Now.ToString("ddd dd MMM"));

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

                // ¿Haz pulsado la tecla Enter?
                if (teclaInicial == ConsoleKey.Enter)
                {
                    // Sí. Se ejecuta esta función.
                    MenuPrincipal();
                }
            } while (teclaInicial != ConsoleKey.Escape);

            #region Menú Principal.
            void MenuPrincipal()
            {

                // Contador de teclas y navegador.
                int opcion = 0;
                bool salir = false;
                // Capturar tecla para luego validar.
                ConsoleKey tecla;

                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.

                    // Rellenar fondo verde.
                    //Console.BackgroundColor = ConsoleColor.Green;

                    // Letras negras.
                    //Console.ForegroundColor = ConsoleColor.Black;

                    // Limpiar pantalla.
                    Console.Clear();

                    switch (opcion)
                    {
                        case 0:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 0);
                            Console.Write(">");
                            break;
                        case 1:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 1);
                            Console.Write(">");
                            break;
                        case 2:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 2);
                            Console.Write(">");
                            break;
                        case 3:
                            Console.SetCursorPosition(2, 0);
                            Console.Write(TEXTO[0]); // ( ) Opción A.
                            Console.SetCursorPosition(2, 1);
                            Console.Write(TEXTO[1]); // ( ) Opción B.
                            Console.SetCursorPosition(2, 2);
                            Console.Write(TEXTO[2]); // ( ) Opción C.
                            Console.SetCursorPosition(2, 3);
                            Console.Write(TEXTO[3]); // Salir.
                            Console.SetCursorPosition(0, 3);
                            Console.Write(">");
                            break;
                        default:
                            Console.Write("Fuera de rango.     ");
                            break;
                    }

                    // Fin de pintar el menú principal.
                    //******************************************************************

                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;

                    // Validar el tipo de tecla.
                    if (tecla == ConsoleKey.Enter)
                    {
                        switch (opcion)
                        {
                            case 0:
                                //OpcionA();
                                break;
                            case 1:
                                //OpcionB();
                                break;
                            case 2:
                                //OpcionC();
                                break;
                            case 3:
                                salir = true;
                                break;
                            default:
                                break;
                        }
                    }

                    if (tecla == ConsoleKey.DownArrow)
                    {
                        opcion++;
                    }

                    if (tecla == ConsoleKey.UpArrow)
                    {
                        opcion--;
                    }

                    // Si está en la última opción, salta a la primera.
                    if (opcion > 3)
                    {
                        opcion = 0;
                    }

                    // Si está en la primera posición, salta a la última.
                    if (opcion < 0)
                    {
                        opcion = 3;
                    }
                    // Uso la tecla escape como salida.
                } while (salir == false);
            }
            #endregion
        }
    }
}

El código está incomleto y mal diseñado, seguro que se hace en menos código.

Gracias.
#6
Gracias por las respuestas.

Si en C# se hace mejor, sea en consola, Windows Form o WPF, me da igual, quiero hacerlo. Como no entiendo la mecánica de Python, pues......
#7
Dudas y pedidos generales / Adaptar este script a C#
Julio 08, 2020, 05:50:16 PM
Buenas:

Este código hecho Python abajo, quiero adaptarlo a C#, sea en consola Windows Form o WPF, que haga la misma función.

Código: python
    import os, sys, tkFileDialog,Tkinter
         
    root = Tkinter.Tk()
    root.withdraw()
         
    formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
         
    input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,
                                     title='Seleccione el archivo para intercambiar bin HI a LO como A16->A15, A17->A16...A21->A20 y A15->21')
    if not input:
        print "Error: no se puede abrir el archivo."
        sys.exit()
         
    output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Crear nombre de archivo de salida.')
    if not output:
        print "Error: no se puede crear el archivo de salida."
        sys.exit()
         
         
        # Leer el archivo de entrada a una matriz de bytes.
        data = bytearray(input.read())
         
        # Calculando el tamaño de la habitación en 2 exponentes.
        expsize = 0
        bytesize = len(data)
        while bytesize > 1:
                expsize += 1
                bytesize = bytesize // 2
         
        # Iniciar una matriz de bytes vacía de tamaño adecuado.
        buffer = bytearray()
        for i in range(2**expsize): buffer.append(0)
         
        # Hagamos el intercambio.
        count = 0   
        for i in range(len(data)):
                addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1)
                + ((i & 0x080000) >> 1) +   ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
                if addr != i: count += 1
                buffer[addr] = data[i]
        print "Intercambiadas %s (%s) direcciones" % (count, hex(count))
         
        # Escribir archivo de salida.
        output.write(buffer)
         
        # Cerrar archivos maneja.
        input.close()
        output.close()


Gracias.
#8
Disculpe usted, tienes razón.

Muchísimas gracias por la ayuda.
#9
Hola:

Antes que nada.

¿Con Visual studio 2019 Community 2019 se puede usar PowerShell?

A lo que iba.

Quiero adaptar este código de Python 2.7 a PowerShell.

¿Es posible?

Código: python
import os, sys, tkFileDialog,Tkinter
     
root = Tkinter.Tk()
root.withdraw()
     
formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
     
input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,
                                 title='Seleccione el archivo para intercambiar bin HI a LO como A16->A15, A17->A16...A21->A20 y A15->21')
if not input:
    print "Error: no se puede abrir el archivo."
    sys.exit()
     
output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Crear nombre de archivo de salida.')
if not output:
    print "Error: no se puede crear el archivo de salida."
    sys.exit()
     
     
    # Leer el archivo de entrada a una matriz de bytes.
    data = bytearray(input.read())
     
    # Calculando el tamaño de la habitación en 2 exponentes.
    expsize = 0
    bytesize = len(data)
    while bytesize > 1:
            expsize += 1
            bytesize = bytesize // 2
     
    # Iniciar una matriz de bytes vacía de tamaño adecuado.
    buffer = bytearray()
    for i in range(2**expsize): buffer.append(0)
     
    # Hagamos el intercambio.
    count = 0
    for i in range(len(data)):
            addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1)
            + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
            if addr != i: count += 1
            buffer[addr] = data[i]
    print "Intercambiadas %s (%s) direcciones" % (count, hex(count))
     
    # Escribir archivo de salida.
    output.write(buffer)
     
    # Cerrar archivos maneja.
    input.close()
    output.close()


Gracias.
#10
Al ejecutar tu programa me sale esto.

CitarSystem.IndexOutOfRangeException: 'Índice fuera de los límites de la matriz.'

Modifiqué el código del primer post y funciona.
Solamente tenía que poner Inici() en dos partes indicado abajo.
Código: php

                                case ConsoleKey.UpArrow:
                                    Inicio();
                                    break;

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


Aún hay un problema.
Cuando está el > en ATRÁS GUARDAR.

Si pulsas todo el rato derecho o izquiero, tiene que cambiarse la >. Ya que si pulsas izquierda, que queda todo el rato el > ATRÁS y no se pasa a GUARDAR.

Dejo el código completo.

Código: csharp,136,140
using System;
namespace LCD_nombre_archivo_consola_10
{
    class Program
    {
        static string guardarNombre = "";
        static int coordenadaX = 0;
        private static ConsoleKey tecla;

        // 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 80 presenta al espacio del array roALFANUMERICO.
        static readonly int[] roINDICE_ARRAY = new int[]
        {
         80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
        };

        private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };

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

            Inicio();
        }

        private static void MainMenu()
        {
            Console.Clear();

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

            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                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 Inico.
        private static void Inicio()
        {
            Console.SetWindowSize(20, 5);
            Console.BackgroundColor = ConsoleColor.Gray;
            Console.ForegroundColor = ConsoleColor.Black;

            MainMenu();
           
            while (true)
            {
                Console.CursorVisible = true;
                index = 0;
                if (tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow)
                {
                    MainMenu();
                }
                Console.SetCursorPosition(coordenadaX, 1);

                tecla = Console.ReadKey(true).Key;
                switch (tecla)
                {
                    case ConsoleKey.RightArrow:
                        if (coordenadaX < 15)
                        {
                            coordenadaX++;
                        }
                        break;

                    case ConsoleKey.LeftArrow:
                        if (coordenadaX > 0)
                        {
                            coordenadaX--;
                        }
                        break;

                    case ConsoleKey.UpArrow:
                        roINDICE_ARRAY[coordenadaX]++;
                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
                        {
                            roINDICE_ARRAY[coordenadaX] = 0;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.DownArrow:
                        roINDICE_ARRAY[coordenadaX]--;
                        if (roINDICE_ARRAY[coordenadaX] < 0)
                        {
                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.Enter:
                        Console.SetCursorPosition(1, 3);
                        Console.CursorVisible = false;
                        Console.Write(">");

                        while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter)
                        {

                            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

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

        private static void Guardar()
        {
            guardarNombre = "";
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS GUARDADO       ");
            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
            {
                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
            }
            Console.SetCursorPosition(0, 2);
            Console.Write(guardarNombre);
            Console.ReadKey();
        }
    }
}

Solo falla lo que comenté arriba, lo de las flechas > ATRÁS GUARDAR.

Gracias.
#11
Buenas:

Menuda explicación.  :)
Hay cosas que quiero matizar.

1)
Escribí bien el Hola como se puede ver abajo. Está un poco separado > GUARDAR. El >ATRÁS pegado. Tiene que estar así: > ATRÁS, no con el > pegado en atrás cmo aquí, >ATRÁS.
Otra cosa, que si pulsa la tecla izquierda, se queda el > en izquierda, la idea es, independiente de que pusle la tecla todo el rato izquierda o derecha, se pueda mover en >ATRÁS o GUARDAR. Como indica en la imagen de abajo.


2)
Entando la > en ATRÁS o en GUARDAR, si pulsas la tecla arriba o abajo, tiene que poder ir otra vez a editar el nombre como indica abajo.
Vamos a suponer que estamos en >ATRÁS como indica abajo.


Si pulsa la tecla arriba o abajo estés en >ATRÁS o >GUARDAR, directament te lleva a editar otra vez el nombre.


Todo lo demás que haz hecho, está perfecto. ;)

Saludos. En general, buen trabajo. ;)
#12
Hola:

Este código funciona a medias. Más bien, no logro situarlo. Está escrito en consola C#.

Lo que hace el programa:

Se usa solo las teclas flechas del teclado y la tecla Enter.

El programa empieza así;


Como puedes ver arriba, puedes escribir con las flechas arriba y abajo letras para poner un nombre. Por ejemplo, voy a poner Hola amigo. Lo puedes ver en la captura de abajo.



Pulsa Enter.
Se muestra el > al lado de ATRÁS. Tal como muestra abajo.


Lo que debe hace en esta parte indicado en la imagen de arriba es:
1. Si toco las flechas del teclado izquierda y derecha, me señala con > Atrás o en GUARDAR.
2. Si pulso las flecha arriba o abajo, puedes volver a editar la palabra "Hola amigo", puedes corregir o escribir otra cosa.
3. Si pulsas Enter donde estabas escribiendo "Hola amigo", vuelves en ATRÁS con el >.
4. Estando en > ATRÁS, si pulsas Enter, muestra un mensaje tal como muestra en la captura de abajo y el programa se acaba ahí.



El problema que no me funciona esta parte y la que voy a indicar ahora tampoco me funciona.
Si estoy en > ATRÁS, al pulsas las flechas derecha o izquierda, debo estar ya en > GUARDAR.

Precisamente no me sale.

A parte de esto, si pulsas Enter cuando estés en > GUARDAR. Se queda guardado el texto "Hola amigo" guardado en una variable que en este caso se llama static string guardarNombre = "";

Se tiene que mostrar la imagen de abajo.


Y se acaba el programa.

Me perdí. Alguna idea como se programa esto.

Código C#:
Código: php
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LCD_nombre_archivo_consola_08
{
    class Program
    {
        static string guardarNombre = "";
        static int coordenadaX = 0;
        private static ConsoleKey tecla;

        // 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 80 presenta al espacio del array roALFANUMERICO.
        static readonly int[] roINDICE_ARRAY = new int[]
        {
            80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
        };

        private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };

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

            Inicio();
        }

        #region Inico.
        private static void Inicio()
        {
            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5); // X

            // Fondo verde, azul, gris.
            Console.BackgroundColor = ConsoleColor.Gray;

            // Letras negras, blanco, negro.
            Console.ForegroundColor = ConsoleColor.Black;

            // Limpiar pantalla.
            Console.Clear();

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

            // Recorre todo el índice del array y el de los datos alfanumérico
            // y los rellena.
            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
            }

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

            while (true)
            {
                Console.SetCursorPosition(coordenadaX, 1);

                // Almacena cualquier tecla pulsada en la variable key.
                tecla = Console.ReadKey(true).Key;
                switch (tecla)
                {
                    case ConsoleKey.RightArrow:
                        if (coordenadaX < 15)
                        {
                            coordenadaX++;
                        }
                        break;

                    case ConsoleKey.LeftArrow:
                        if (coordenadaX > 0)
                        {
                            coordenadaX--;
                        }
                        break;

                    case ConsoleKey.UpArrow:
                        roINDICE_ARRAY[coordenadaX]++;
                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
                        {
                            roINDICE_ARRAY[coordenadaX] = 0;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.DownArrow:
                        roINDICE_ARRAY[coordenadaX]--;
                        if (roINDICE_ARRAY[coordenadaX] < 0)
                        {
                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.Enter:
                        Console.SetCursorPosition(1, 3);
                        Console.CursorVisible = false;
                        Console.Write(">");

                        while (true)
                        {
                            tecla = Console.ReadKey(true).Key;

                            switch (tecla)
                            {
                                case ConsoleKey.RightArrow:
                                case ConsoleKey.LeftArrow:
                                    index = 1 - index;
                                    break;

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

                                case ConsoleKey.Enter:
                                   
                                    break;
                            }

                            for (int a = 0; a < 2; a++)
                            {
                                Console.SetCursorPosition(1 + (10 * a), 3);
                                if (a == index)
                                {
                                    Console.Write(">");
                                }
                                else
                                {
                                    Console.Write(" ");
                                }
                            }

                            if (index == 0)  // se pulsó Atrás
                            {
                                Atras();
                                //break;  // vuelve a la edición de letras
                            }

                            if (index == 1)  // se pulsó Guardar
                            {
                                Guardar();
                            }
                        }
                }
            }
        }
        #endregion

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

        private static void Guardar()
        {
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS GUARDADO       ");
            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
            {
                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
            }
            Console.SetCursorPosition(0, 2);
            Console.Write(guardarNombre);
        }
    }
}


Gracias.
#13
Hola:

Seguro que la de POO en C# tiene que ser duro, dificil. Lo voy a tener en cuenta.

Muchísimas gracias por al explicación.
#14
Hola:

Trabajando en modo consola C# 2019.

Quiero hacer un programa de ejemplo sobre creación de menús y submenús como se hacía en la época de antes, solo usando la consola de C#, nada de WindowsForm ni WPF.

Los código que hago son muy extensos, muy repetitivos pero fáciles de actualizar si quiere añadir nuevos submenús o funciones.

¿Me pueden dar alguna idea o consejos a la hora de hacer menús y menús?

Lo que he hecho hasta ahora es horrible pero funciona.

Me da que hay que hacer estructura de diseño antes, de hacer programación directa.


Ver vídeo.


Código: php
using System;

namespace Menu_consola_18_cs
{
    class Program
    {
        // Variable general para guardar el > de la última opción que haz entrado
        // en la hora de volver atrás. Por ejemplo:
        private static int guardarOpcion = 0;
        static void Main(string[] args)
        {
            Console.Title = "Menú de opciones";

            // Tamaño ventana consola.
            // X anchura.
            Console.WindowWidth = 20;

            // Y altura.
            Console.WindowHeight = 5;

            // Ocultar cursor.
            Console.CursorVisible = false;

            // Fondo verde.
            Console.BackgroundColor = ConsoleColor.Green;

            // Letras negras.
            Console.ForegroundColor = ConsoleColor.Black;

            MenuPrincipal();
        }

        #region Menú principal.
        public static void MenuPrincipal()
        {
            // Almacena la tecla pulsada en la variable.
            ConsoleKey teclaInicial;

            // Limpiar pantalla.
            Console.Clear();

            // Posición del cursor del título del MENÚ PRINCIPAL.
            Console.SetCursorPosition(0, 0);

            // Título.
            Console.Write("   MENÚ PRINCIPAL   ");

            // Pocisión de la hora.
            Console.SetCursorPosition(4, 2);

            // Formato numérico dd/MM/yyyy.
            Console.Write(DateTime.Now.ToString("ddd dd MMM"));

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

            // ¿Haz pulsado la tecla Enter?
            if (teclaInicial == ConsoleKey.Enter)
            {
                // Sí. Se ejecuta esta función.
                MenuOpciones();
            }
        }
        #endregion

        #region Menú de opciones principales.
        public static void MenuOpciones()
        {
            // Contador de teclas y navegador.
            int opcion = 0;
            opcion = guardarOpcion;

            // Capturar tecla para luego validar.
            ConsoleKey tecla;

            while (true)
            {
                //******************************************************************
                // Dibujo el menú principal.

                // Limpiar pantalla.
                Console.Clear();

                switch (opcion)
                {
                    case 0:
                        Console.SetCursorPosition(0, 0);
                        Console.Write("> Opción A.         ");
                        Console.SetCursorPosition(0, 1);
                        Console.Write("  Opción B.         ");
                        Console.SetCursorPosition(0, 2);
                        Console.Write("  Opción C.         ");
                        Console.SetCursorPosition(0, 3);
                        Console.Write("  Salir.            ");
                        break;
                    case 1:
                        Console.SetCursorPosition(0, 0);
                        Console.Write("  Opción A.         ");
                        Console.SetCursorPosition(0, 1);
                        Console.Write("> Opción B.         ");
                        Console.SetCursorPosition(0, 2);
                        Console.Write("  Opción C.         ");
                        Console.SetCursorPosition(0, 3);
                        Console.Write("  Salir.            ");
                        break;
                    case 2:
                        Console.SetCursorPosition(0, 0);
                        Console.Write("  Opción A.         ");
                        Console.SetCursorPosition(0, 1);
                        Console.Write("  Opción B.         ");
                        Console.SetCursorPosition(0, 2);
                        Console.Write("> Opción C.         ");
                        Console.SetCursorPosition(0, 3);
                        Console.Write("  Salir.            ");
                        break;
                    case 3:
                        Console.SetCursorPosition(0, 0);
                        Console.Write("  Opción A.         ");
                        Console.SetCursorPosition(0, 1);
                        Console.Write("  Opción B.         ");
                        Console.SetCursorPosition(0, 2);
                        Console.Write("  Opción C.         ");
                        Console.SetCursorPosition(0, 3);
                        Console.Write("> Salir.            ");
                        break;
                    default:
                        Console.Write("Fuera de rango.     ");
                        break;
                }

                // Fin de pintar el menú principal.
                //******************************************************************

                // Leer tecla ingresada por el usuario.
                tecla = Console.ReadKey(true).Key;

                // Validar el tipo de tecla.
                if (tecla == ConsoleKey.Enter)
                {
                    switch (opcion)
                    {
                        case 0:
                            OpcionA();
                            break;
                        case 1:
                            OpcionB();
                            break;
                        case 2:
                            OpcionC();
                            break;
                        case 3:
                            guardarOpcion = 0;
                            MenuPrincipal();
                            break;
                        default:
                            break;
                    }
                }

                // Flecha abajo del teclado.
                if (tecla == ConsoleKey.DownArrow)
                {
                    opcion++;
                }

                // Flecha arriba del teclado.
                if (tecla == ConsoleKey.UpArrow)
                {
                    opcion--;
                }

                // Si está en la última opción del menú, salta a la primera.
                if (opcion > 3)
                {
                    opcion = 0;
                }

                // Si está en la primera posición del menú, salta a la última.
                if (opcion < 0)
                {
                    opcion = 3;
                }
            }
        }
        #endregion

        #region Opción A (0).
        public static void OpcionA()
        {
            ConsoleKey teclaOpcionA;
            Console.Clear();
            do
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine("Estás en Opción A.");
                Console.SetCursorPosition(0, 2);
                Console.WriteLine("Pulse Enter para");
                Console.SetCursorPosition(0, 3);
                Console.WriteLine("Salir.");

                // Almacena el teclado pulsado en la variable teclaSubMenuA.
                teclaOpcionA = Console.ReadKey(true).Key;

            } while (teclaOpcionA != ConsoleKey.Enter);
        }
        #endregion

        #region Opción B (1).
        public static void OpcionB()
        {
            // Contador de teclas y navegador.
            int opcionB = 0;

            // Capturar tecla para luego validar.
            ConsoleKey teclaOpcionB;

            while (true)
            {
                switch (opcionB)
                {
                    case 0:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción B.  ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("> SubOpción B-1.    ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  SubOpción B-2     ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Salir.            ");
                        break;
                    case 1:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción B.  ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  SubOpción B-1.    ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("> SubOpción B-2     ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Salir.            ");
                        break;
                    case 2:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción B.  ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  SubOpción B-1.    ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  SubOpción B-2     ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("> Salir.            ");
                        break;
                    default:
                        Console.Write("Fuera de rango.     ");
                        break;
                }

                // Leer tecla ingresada por el usuario.
                teclaOpcionB = Console.ReadKey(true).Key;

                // Validar el tipo de tecla.
                if (teclaOpcionB == ConsoleKey.Enter)
                {
                    switch (opcionB)
                    {
                        case 0:
                            OpcionB1();
                            break;
                        case 1:
                            OpcionB2();
                            break;
                        case 2:
                            guardarOpcion = 1;
                            MenuOpciones();
                            break;
                        default:
                            Console.Write("Fuera de rango.     ");
                            break;
                    }
                }

                if (teclaOpcionB == ConsoleKey.DownArrow)
                {
                    opcionB++;
                }

                if (teclaOpcionB == ConsoleKey.UpArrow)
                {
                    opcionB--;
                }

                // Si está en la última opción, salta a la primera.
                if (opcionB > 2)
                {
                    opcionB = 0;
                }

                // Si está en la primera posición, salta a la última.
                if (opcionB < 0)
                {
                    opcionB = 2;
                }
            }
        }

        #endregion

        #region Opcion B-1.
        public static void OpcionB1()
        {
            ConsoleKey teclaOpcionB1;
            Console.Clear();
            do
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine("Estás en Opción B-1.");
                Console.SetCursorPosition(0, 2);
                Console.WriteLine("Pulse Enter para    ");
                Console.SetCursorPosition(0, 3);
                Console.WriteLine("volver atrás.       ");

                // Almacena el teclado pulsado en la variable teclaSubMenuA.
                teclaOpcionB1 = Console.ReadKey(true).Key;

            } while (teclaOpcionB1 != ConsoleKey.Enter);
        }
        #endregion

        #region Opcion B-2.
        public static void OpcionB2()
        {
            ConsoleKey teclaOpcionB2;
            Console.Clear();
            do
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine("Estás en Opción B-2.");
                Console.SetCursorPosition(0, 2);
                Console.WriteLine("Pulse Enter para    ");
                Console.SetCursorPosition(0, 3);
                Console.WriteLine("volver atrás.       ");

                // Almacena el teclado pulsado en la variable teclaSubMenuA.
                teclaOpcionB2 = Console.ReadKey(true).Key;

            } while (teclaOpcionB2 != ConsoleKey.Enter);
        }
        #endregion

        #region Opción C (2).
        public static void OpcionC()
        {
            // Contador de teclas y navegador.
            int opcionC = 0;

            // Capturar tecla para luego validar.
            ConsoleKey teclaOpcionC;
            Console.Clear();
           
            while(true)
            {
                switch (opcionC)
                {
                    case 0:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción C.  ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("> Color 1.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  Color 2.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Opción C-1.       ");
                        break;
                    case 1:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción C.  ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  Color 1.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("> Color 2.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Opción C-1.       ");
                        break;
                    case 2:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción C.  ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  Color 1.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  Color 2.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("> Opción C-1.       ");
                        break;
                    case 3:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("> Color 3.          ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  Color 4.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  Color 5.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Salir.            ");
                        break;
                    case 4:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("  Color 3.          ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("> Color 4.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  Color 5.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Salir.            ");
                        break;
                    case 5:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("  Color 3.          ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  Color 4.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("> Color 5.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("  Salir.            ");
                        break;
                    case 6:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("  Color 3.          ");
                        Console.SetCursorPosition(0, 1);
                        Console.WriteLine("  Color 4.          ");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  Color 5.          ");
                        Console.SetCursorPosition(0, 3);
                        Console.WriteLine("> Salir.            ");
                        break;

                    default:
                        Console.Write("Fuera de rango.     ");
                        break;
                }

                // Leer tecla ingresada por el usuario.
                teclaOpcionC = Console.ReadKey(true).Key;

                // Validar el tipo de tecla.
                if (teclaOpcionC == ConsoleKey.Enter)
                {
                    switch (opcionC)
                    {
                        case 0:
                            // Fondo azul.
                            Console.BackgroundColor = ConsoleColor.Blue;

                            // Letras blancas.
                            Console.ForegroundColor = ConsoleColor.White;
                            break;
                        case 1:
                            // Fondo verde.
                            Console.BackgroundColor = ConsoleColor.Green;

                            // Letras negras.
                            Console.ForegroundColor = ConsoleColor.Black;
                            break;
                        case 2:
                            OpcionC1();
                            break;
                        case 3:
                            // Fondo negro.
                            Console.BackgroundColor = ConsoleColor.Black;

                            // Letras rojo.
                            Console.ForegroundColor = ConsoleColor.Red;
                            break;
                        case 4:
                            // Fondo negro.
                            Console.BackgroundColor = ConsoleColor.Black;

                            // Letras rojo.
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            break;
                        case 5:
                            // Fondo negro.
                            Console.BackgroundColor = ConsoleColor.Red;

                            // Letras rojo.
                            Console.ForegroundColor = ConsoleColor.DarkRed;
                            break;
                        case 6:
                            guardarOpcion = 2;
                            MenuOpciones();
                            break;
                        default:
                            Console.Write("Fuera de rango.     ");
                            break;
                    }
                }

                if (teclaOpcionC == ConsoleKey.DownArrow)
                {
                    opcionC++;
                }

                if (teclaOpcionC == ConsoleKey.UpArrow)
                {
                    opcionC--;
                }

                // Si está en la última opción, salta a la primera.
                if (opcionC > 6)
                {
                    opcionC = 0;
                }

                // Si está en la primera posición, salta a la última.
                if (opcionC < 0)
                {
                    opcionC = 6;
                }
            }
        }
        #endregion

        #region OpcionC-1.
        public static void OpcionC1()
        {
            // Contador de teclas y navegador.
            int opcionC1 = 0;

            // Capturar tecla para luego validar.
            ConsoleKey teclaOpcionC1;
            Console.Clear();
           
            while(true)
            {
                Console.Clear();

                switch (opcionC1)
                {
                    case 0:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción C-1.");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("  SI");
                        Console.SetCursorPosition(16, 2);
                        Console.WriteLine("> NO");
                        break;
                    case 1:
                        Console.SetCursorPosition(0, 0);
                        Console.WriteLine("Estás en Opción C-1.");
                        Console.SetCursorPosition(0, 2);
                        Console.WriteLine("> SI");
                        Console.SetCursorPosition(16, 2);
                        Console.WriteLine("  NO");
                        break;
                    default:
                        Console.Write("Fuera de rango.     ");
                        break;
                }

                // Leer tecla ingresada por el usuario.
                teclaOpcionC1 = Console.ReadKey(true).Key;

                // Validar el tipo de tecla.
                if (teclaOpcionC1 == ConsoleKey.Enter)
                {
                    switch (opcionC1)
                    {
                        case 0:
                            guardarOpcion = 2;
                            MenuPrincipal();
                            //Console.Clear();
                            break;
                        case 1:
                            OpcionSI();
                            break;
                        default:
                            Console.Write("Fuera de rango.     ");
                            break;
                    }
                }

                // Flecha derecha.
                if (teclaOpcionC1 == ConsoleKey.RightArrow)
                {
                    opcionC1++;
                }

                // Flecha izquierda.
                if (teclaOpcionC1 == ConsoleKey.LeftArrow)
                {
                    opcionC1--;
                }

                // Si está en la última opción, salta a la primera.
                if (opcionC1 > 1)
                {
                    opcionC1 = 0;
                }

                // Si está en la primera posición, salta a la última.
                if (opcionC1 < 0)
                {
                    opcionC1 = 1;
                }
            }
        }
        #endregion

        #region opcionSI del sub menú C-1.
        public static void OpcionSI()
        {
            ConsoleKey teclaOpcionB1;
            Console.Clear();
            do
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine("Estás en Opción SÍ.");
                Console.SetCursorPosition(0, 2);
                Console.WriteLine("Pulse Enter para    ");
                Console.SetCursorPosition(0, 3);
                Console.WriteLine("volver atrás.       ");

                // Almacena el teclado pulsado en la variable teclaOpciónB1.
                teclaOpcionB1 = Console.ReadKey(true).Key;

            } while (teclaOpcionB1 != ConsoleKey.Enter);
        }
        #endregion
    }
}


Saludos.
#15
Buenas:

En la consola C# me aparece el asunto a la hora de leer el último email del, pero no aparece el mensaje. Quiero que me aparezca en pantalla tanto el asunto y el mensaje.

No se su código del pop3 para leer mensajes, si me envian un mensaje nuevo y luego ejecuto el programa, me apecere así sin mensaje porque no se como programarlo.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Código C#:
Código: php
using System;
using System.Collections.Generic;
using OpenPop.Pop3;

namespace Recibir_email_Consola_01
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Recibir e-mail con Consola C#";

            // Tamaño ventana consola.
            Console.WindowWidth = 80; // X. Ancho.
            Console.WindowHeight = 40; // Y. Alto.

            // Cursor invisible.
            Console.CursorVisible = false;

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

            try
            {
                ConnectPop3 oC = new ConnectPop3();

                List<OpenPop.Mime.Message> lstMessages = oC.GetMessages();


                if (lstMessages != null)
                {

                    foreach (var oMessage in lstMessages)
                    {
                        Console.WriteLine("ASUNTO:  " + oMessage.Headers.Subject + "\n"); // Asunto.
                                                //Console.WriteLine();
                        Console.WriteLine("MENSAJE: "); // Aquí se pone código del mensaje que no se cual es.
                    }
                }
                Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
                Console.WriteLine();
                Console.WriteLine("FIN DEL PROGRAMA.");
                Console.ReadKey(); // Pulse cualquier tecla para salir.
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }

    public class ConnectPop3
    {
        public string email = "[email protected]";
        public string contraseña = "g0923490xgh0945g450Xj4025g"; // Ficticio.
        public int puerto = 995;
        public bool usarSLL = true;
        public string Hostame = "pop.gmail.com";

        public List<OpenPop.Mime.Message> GetMessages()
        {
            using (Pop3Client oClient = new Pop3Client())
            {
                oClient.Connect(Hostame, puerto, usarSLL);
                oClient.Authenticate(email, contraseña);

                int messageCount = oClient.GetMessageCount();
                List<OpenPop.Mime.Message> lstMessages = new List<OpenPop.Mime.Message>(messageCount);

                for (int i = messageCount; i > 0; i--)
                {
                    lstMessages.Add(oClient.GetMessage(i));
                }

                return lstMessages;
            }
        }
    }
}


Lo que si le logrado es poner email, fecha y algunos más datos, precisamente el que más quiero que es el mensaje no se como hacerlo o como buscarlo.

¿Alguna idea?

Saludos.
#16
Hola:

Usando el modo consola de C# 2017. Hice un mini menú de opciones gracias a los compañeros de este foro. Puedo seleccionar con los botones arriba y abajo las opciones.

Se usa formato de la pantalla 16x2.

En este caso lo que hace es seleccionar opciones en el menú, pero no hace nada más. Las opciones en el menú se llama.

Menú ▲▼

1. UNO
2. DOS
3. TRES
4. CUATRO
5. ESC - SALIR

Por ejemplo, seleccionamos el 3. TRES. Pulse Enter y justo una línea de abajo dice:

3. TRES ▲▼

Después de pulsar Enter, se sustituye el texto 3. TRES ▲▼ por otro abajo.

Alum. ●●●●●●○○

En el cual podemos hacer cosas, estando ya en la subopción indicado arriba. Si pulsamos Enter, de Alum. ●●●●●●○○ vuelve al menú principal en este caso donde estaba, llamdo 3. TRES ▲▼. Si etás todavía en Alum. ●●●●●●○○, puedes pulsar la teclas arriba y abajo para mover las opciones indicadas de esta manera mostrada abajo.

Son 8 puntos. Lo que hace es alumbrar el brillo de una luz, el brillo más débil es de esta manera. Alum. ○○○○○○○○. El brillo máximo es de otra manera, Alum. ●●●●●●●●. Con las flechas del teclado arriba y abajo, seleccionamos un punto, de 1 hasta 8. La mitad sería así: Alum. ●●●●○○○○. Pulsa enter, guarda la configuración en una variable para que la recuerde y sale al menú principal.

Espero que se entienda lo que quiero hacer.

Dejo el código base, solo selecciona opciones pero al pulsar Enter tiene que hacer al menos el 3. TRES.

Código consola C#:
Código: php
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Menu_consola_09_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Menú de opciones";

            // Tamaño ventana consola.
            // X anchura.
            Console.WindowWidth = 16;

            // Y altura.
            Console.WindowHeight = 2;

            // Oculto el cursor.
            Console.CursorVisible = false;

            // Contador de teclas y navegador.
            int contador = 0;

            // Capturar tecla para luego validar.
            ConsoleKey tecla;

            do
            {

                //******************************************************************
                // Dibujo el menú.
               
                // Rellenar fondo verde.
                Console.BackgroundColor = ConsoleColor.Green;

                // Letras negras.
                Console.ForegroundColor = ConsoleColor.Black;
               
                // Limpiar pantalla.
                Console.Clear();

                if (contador == 0)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.Write("MENú ▲▼");
                }

                if (contador == 1)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("1.   UNO");
                }

                if (contador == 2)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("2.   DOS");
                }

                if (contador == 3)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("3.   TRES");
                }

                if (contador == 4)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("4.  CUATRO");
                }

                if (contador == 5)
                {
                    Console.SetCursorPosition(0, 0);
                    Console.WriteLine("5. ESC = SALIR");
                }

                // Fin de pintar el menú.
                //******************************************************************

                // Leer tecla ingresada por el usuario.
                tecla = Console.ReadKey(true).Key;

                //validar el tipo de tecla
                if (tecla == ConsoleKey.DownArrow)
                {
                    contador += 1;
                }

                if (tecla == ConsoleKey.UpArrow)
                {
                    contador -= 1;
                }

                // Si está en la última opción, salta a la primera.
                if (contador > 5)
                {
                    contador = 0;
                }

                // Si está en la primera posición, salta a la última.
                if (contador < 0)
                {
                    contador = 5;
                }

                // Uso la tecla escape como salida.
            } while (tecla != ConsoleKey.Escape);
        }
    }
}


Captura:


Una cosa a tener en cuenta. En vez de aparecer

MENú ▲▼

En pantalla, lo primero que debe aparecer en el programa en HOLA. Si pulsas Enter, entonces ya aparece el Menú. Si pulsa salir apareces en HOLA. Luego hacer lo demás con el 3. TRES indicado arriba.

¿Alguna ayuda?

Saludos.
#17
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Me alaga que pusieran el tutorial por aquí. ;)


Alguna cosa me avisas , si te funciono saludos :)

¿Si funcionó el qué?

Si es el tutorial, lo hice yo, todo me funcionó. ;)
#18
Hola:

No se nada de tarjetas, pero tengo ganas de adaptar el código que hiciste de C++ a C#, tanto en modo consola como en Windows Form. ;)

Probando tu código de C++. En Visual studio Community 2017 me dice esto.

CitarGravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Advertencia   C4244   'argumento': conversión de 'time_t' a 'unsigned int'; posible pérdida de datos   Generador_Win32   c:\users\usuario\documents\visual studio 2017\projects\generador_win32\generador_win32\generador_win32.cpp   45   

Para dejarlo más fino tu programa. ¿Por qué no redimensiona la ventana?
Que se vea el código de como hacerlo.

Saludos.
#19
Hola:

Antes que nada, si no puedes ver las capturas, actualiza el navegador.

He creado un formulario con Windows Form (Win32). Quiero añadir en él dos botones. Por ahora he hecho esto.

Paso 1:


Paso 2:


Pado 3:


Se me genera códigos pero no se ve el formulario. Lo que demuestra se un engorro programar así hoy en día, pero hay empresas que si programan así y enseñan en algunas universidades les gusten a los alumnos o no.

Paso 4:


Aquí lo dejo el formulario como si fuese por defeto 300x300 pero en realidad es muy grande para mi gusto.

Quiero hacer dos cosas. Poner el tamaño del formulario a 300 x 300 y introducir 2 botones. Quiero hacer.

Un botón se llama: Abrir y el otro Cerrar.

Encontré dos enlaces para hacer un botón.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

¿Cómo se hace?

No tengo ni la grandísima idea de hacerlo, ya que al compilar, a pesar de no haber errores, ni redimensiona o pone el tamaño que quiero al formulario, ni hay ni un solo botón en dicho formumalario.

El trozo de código a incluir es este.
Código: php
   hInst = hInstance; // Almacenar identificador de instancia en una variable global

   HWND hWnd = CreateWindowW(
   szWindowClass,
   szTitle,
   WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
   0,
   CW_USEDEFAULT,
   0,
   nullptr,
   nullptr,
   hInstance,
   nullptr);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE; // me estas vacilando o algo asi?

   // ######################################################################
   hInst = hInstance; // Almacenar identificador de instancia en una variable global

   HWND hWnd2 = CreateWindowW(
   szWindowClass,
   szTitle,
   WS_OVERLAPPEDWINDOW,
   CW_USEDEFAULT,
   0,
   CW_USEDEFAULT,
   0,
   nullptr,
   nullptr,
   hInstance,
   nullptr);

   if (!hWnd2)
   {
   return FALSE;
   }

   ShowWindow(hWnd2, nCmdShow);
   UpdateWindow(hWnd2);
   // AQUI POR EJEMPLO!!! posición(100,100), tamaño(600,400)
   SetWindowPos(hWnd2, 0, 100, 100, 600, 400, NULL);

   return TRUE;
   // ######################################################################


Código completo es este pero no funciona a pesar de compilar bien.
Código: php
#include "stdafx.h"
#include "aaaa.h"

#define MAX_LOADSTRING 100

// Variables globales:
HINSTANCE hInst;                                // Instancia actual
WCHAR szTitle[MAX_LOADSTRING];                  // Texto de la barra de título
WCHAR szWindowClass[MAX_LOADSTRING];            // nombre de clase de la ventana principal

// Declaraciones de funciones adelantadas incluidas en este módulo de código:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: colocar código aquí.

    // Inicializar cadenas globales
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_AAAA, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Realizar la inicialización de la aplicación:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_AAAA));

    MSG msg;

    // Bucle principal de mensajes:
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}



//
//  FUNCIÓN: MyRegisterClass()
//
//  PROPÓSITO: registrar la clase de ventana.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEXW wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_AAAA));
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_AAAA);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassExW(&wcex);
}

//
//   FUNCIÓN: InitInstance(HINSTANCE, int)
//
//   PROPÓSITO: guardar el identificador de instancia y crear la ventana principal
//
//   COMENTARIOS:
//
//        En esta función, se guarda el identificador de instancia en una variable común y
//        se crea y muestra la ventana principal del programa.
//


   // ######################################################################
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{ // de verdad esto es serio?
hInst = hInstance; // Almacenar identificador de instancia en una variable global

HWND hWnd = CreateWindowW(
szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
nullptr,
nullptr,
hInstance,
nullptr);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE; // me estas vacilando o algo asi?

// ######################################################################
hInst = hInstance; // Almacenar identificador de instancia en una variable global

HWND hWnd2 = CreateWindowW(
szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
nullptr,
nullptr,
hInstance,
nullptr);

if (!hWnd2)
{
return FALSE;
}

ShowWindow(hWnd2, nCmdShow);
UpdateWindow(hWnd2);
// AQUI POR EJEMPLO!!! posición(100,100), tamaño(600,400)
SetWindowPos(hWnd2, 0, 50, 50, 100, 100, NULL);

return TRUE;
// ######################################################################
}
   // ######################################################################


//
//  FUNCIÓN: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PROPÓSITO:  procesar mensajes de la ventana principal.
//
//  WM_COMMAND  - procesar el menú de aplicaciones
//  WM_PAINT    - Pintar la ventana principal
//  WM_DESTROY  - publicar un mensaje de salida y volver
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // Analizar las selecciones de menú:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: Agregar cualquier código de dibujo que use hDC aquí...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Controlador de mensajes del cuadro Acerca de.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}



Saludos.

PD: La verdad, no sabía que fuera tan coñazo, pesado, complicado en hacer lo que estoy pidiendo.
#20
Hola:

¿Qué les parece la broma?
Todavía queda mucho que pulir, poco a poco se va ampliando y mejorando.

Leer los comentarios para entender el código.

Código: php

using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;

namespace Broma_Consola_05
{
    class Program
    {
        // Importar dll.
        // Bandeja o lector o unidad de disco.
        [DllImport("winmm.dll")]
        public static extern Int32 mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
        int uReturnLength, IntPtr hwndCallback);

        public static StringBuilder rt = new StringBuilder(127);

        // Intercambio de botones del ratón.
        [DllImport("user32.dll")]
        static extern bool SwapMouseButton(bool fSwap);

        // Leds del teclado.
        [DllImport("user32.dll")]
        internal static extern short GetKeyState(int keyCode);

        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

        static void Main(string[] args)
        {
            // Root.
            const string userRoot = "HKEY_CURRENT_USER";
            // Clave.
            const string subkey = "Metaconta";
            // FullName.
            const string keyName = userRoot + "\\" + subkey;
            // ValueName.
            const string valueName = "Contador";

            // Variables txt.
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            // Si no existe la Key, dará -1.
            int contador = Convert.ToInt32(Registry.GetValue(keyName, valueName, -1) ?? -1);

            bool raton = false;

            // Comprueba si la key, al ser -1 si la key no existe.
            if (contador >= 0)
            {
                // Si el contador es mayor que 0.
                if (contador > 0)
                {
                    // Sobre escribe la key con -1 su valor.
                    Registry.SetValue(keyName, valueName, contador -= 1);
                }

                // Escribe un nuevo arhivo de texto con su contenido correspondiente.
                if (contador == 7)
                {
                    File.WriteAllText(Path.Combine(path, "Hola.txt"), "Hola amigo.");
                }

                // Abrir bandeja del lector.
                if (contador == 6)
                {
                    mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero);
                }

                // Intercambiar botones del ratón (Zurdo).
                if (contador == 5)
                {
                    // Activar modo zurdo.
                    // SwapMouseButton(true); o SwapMouseButton(1);
                    // Para volver a modo diestro.
                    // SwapMouseButton(false); o SwapMouseButton(0);
                    SwapMouseButton(true); // Activar surdo.
                }

                // Intercambiar botones del ratón (Diestro).
                if (contador == 4)
                {
                    SwapMouseButton(false); // Activar .
                }

                // Imprimir un folio de la impresora o ficticia.
                if (contador == 3)
                {
                    string amigo = @"Hola amigo.";
                    string folio = @"Solo te he gastado un folio.";

                    PrintDocument p = new PrintDocument();
                    p.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
                    {
                        e1.Graphics.DrawString(amigo, new Font("Times New Roman", 100),
                            new SolidBrush(Color.Black), new RectangleF(30, 100,
                            p.DefaultPageSettings.PrintableArea.Width,
                            p.DefaultPageSettings.PrintableArea.Height));

                        e1.Graphics.DrawString(folio, new Font("Times New Roman", 12),
                            new SolidBrush(Color.Black), new RectangleF(530, 270,
                            p.DefaultPageSettings.PrintableArea.Width,
                            p.DefaultPageSettings.PrintableArea.Height));
                    };

                    try
                    {
                        p.Print();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Excepción ocurrida durante la impresión.", ex);
                    }
                }

                // Parpadean los Led del teclado.
                if (contador == 2)
                {
                    while (raton)
                    {
                        PressKeyboardButton(VirtualKeyStates.BloqMayus);
                        Thread.Sleep(100);
                        PressKeyboardButton(VirtualKeyStates.BloqNum);
                        Thread.Sleep(100);
                        PressKeyboardButton(VirtualKeyStates.BloqDespl);
                        Thread.Sleep(100);
                    }

                    void PressKeyboardButton(VirtualKeyStates keyCode)
                    {
                        const int KEYEVENTF_EXTENDEDKEY = 0x1;
                        const int KEYEVENTF_KEYUP = 0x2;
                        keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
                        keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
                    }

                    raton = true;
                }

                // Crea archivo bat, borra .exe y .cmd. Fin de la broma.
                if (contador == 1)
                {
                    try
                    {
                        // Variables.
                        string strFileFullName = @"archivo.cmd"; // Nombre del archivo.
                                                                 //string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Startup); // Ruta en Inico de Windwos.
                        string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta en el inicio de Windows.
                        string ficheroAGrabar = Path.Combine(ruta, strFileFullName); // Concatenar ruta.

                        // Muestra la ruta en pantalla.
                        Console.WriteLine(ruta); // C:\Users\Usuario\Desktop

                        // Si no existe el archivo.
                        if (!File.Exists(ficheroAGrabar))
                        {
                            // Crea el contenido al archivo de texto.
                            File.WriteAllText(ficheroAGrabar, @"@echo off
TIMEOUT /T 1
DEL /S Broma_Consola_05.exe
DEL /S archivo.cmd
EXIT");
                        }

                        else // Si existe...
                        {
                            // Codigo a ejecutar si existe...
                            // Console.WriteLine("El archivo existe, así que no se sustituirá.");
                        }

                        // Ejecutar archivo.cmd.
                        ProcessStartInfo psi = new ProcessStartInfo();
                        psi.UseShellExecute = false;
                        psi.CreateNoWindow = true;
                        psi.WindowStyle = ProcessWindowStyle.Hidden;
                        psi.FileName = strFileFullName; // archivo.cmd.
                        Process.Start(psi);

                        // Cerrar aplicación C#.
                        Environment.Exit(-1);
                    }

                    catch (Win32Exception)
                    {
                        // No mostrar nada.
                        // Cerrar aplicación C#.
                        //Environment.Exit(-1);
                    }
                }
            }

            // Entonces.
            else
            {
                // Escribe en el registro el valor.
                Registry.SetValue(keyName, valueName, 10);
            }
        }

        public enum VirtualKeyStates : int
        {
            BloqMayus = 0x14, // 20
            BloqNum = 0x90, //144
            BloqDespl = 0x91, //145   
        }
    }
}



Saludos.