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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 66
51  Programación / Programación General / [Info] Configuración de ventanas de nuestros programas en: 13 Marzo 2022, 21:59 pm
Buenas compañer@s del foro:

Dejo en los lenguajes en forma de consola que puedan configurar de forma básica título del programa en la ventana, tamaño, colores y posición de los textos con los lenguajes como C++ nativo, C++ CLI o .Net, C# y VB .Net.

Me han preguntado por privado estas cosas y se los dejo aquí en el cual de forma rápida hay ejemplos rápidos. Todos hechos con Visual Studio 2022. :)

C++ nativo:
Código
  1. #include <iostream>
  2. #include <windows.h> // Para mostrar texto en el título de la ventana.
  3. #include <stdio.h>   // Cambio color de fondo y letras.
  4.  
  5. using namespace std;
  6. //using std::cout;
  7. //using std::cin;
  8.  
  9. // Función posición del cursor.
  10. void gotoxy(int x, int y)
  11. {
  12. HANDLE hcon;
  13. hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  14. COORD dwPos;
  15. dwPos.X = x;
  16. dwPos.Y = y;
  17. SetConsoleCursorPosition(hcon, dwPos);
  18. }
  19.  
  20. int main()
  21. {
  22. #pragma region "Configuración ventana."
  23. // Mostrar caracteres correctamente en pantalla y título de la ventana.
  24. SetConsoleOutputCP(65001);
  25. wchar_t titulo[128];
  26. MultiByteToWideChar(CP_UTF8, 0, "Título de la ventana", -1, titulo, 128);
  27. SetConsoleTitle(titulo);
  28.  
  29. // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  30. SMALL_RECT r = { 0, 0, 80, 20 }; // X = 49, Y = 9.
  31. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  32.  
  33. // Cambio color de A (verde claro), color letras 0 (negro).
  34. system("color A0");
  35.  
  36. // Ocultar cursor.
  37. CONSOLE_CURSOR_INFO cci;
  38. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  39. cci.bVisible = 0; // 0 oculta. 1 muestra cursor.
  40. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  41. #pragma endregion
  42.  
  43. gotoxy(20, 8);
  44. cout << "Estás leyendo este texto en pantalla. C++ nativo";
  45.  
  46. cout << endl; // Nueva línea.
  47. system("pause");
  48. return 0;
  49. }

C++ CLI/.Net:
Código
  1. #include "pch.h"
  2.  
  3. using namespace System;
  4.  
  5. int main(array<System::String ^> ^args)
  6. {
  7.    #pragma region "Configuración ventana."
  8.    // Título de la ventana.
  9.    Console::Title = "Título de la ventana";
  10.  
  11.    // Tamaño de la ventana, x, y o, ancho y alto.
  12.    const Byte ancho = 80;
  13.    const Byte alto = 20;
  14.    Console::SetWindowSize(ancho, alto);
  15.  
  16.    // Color de fondo.
  17.    Console::BackgroundColor = ConsoleColor::Black;
  18.  
  19.    // Color de las letras.
  20.    Console::ForegroundColor = ConsoleColor::Yellow;
  21.  
  22.    // Limpiar pantalla y dejarlo todo en color de fondo.
  23.    Console::Clear();
  24.  
  25.    // Visible el cursor. // No! Así lo haces invisible.
  26.    Console::CursorVisible = false;
  27.    #pragma endregion
  28.  
  29.    // Posición del cursor.
  30.    int anchoX = 20;
  31.    int altoY = 8;
  32.    Console::SetCursorPosition(anchoX, altoY);
  33.  
  34.    // Mostrar textos.
  35.    Console::WriteLine("Estás leyendo este texto en pantalla. C++ CLI");
  36.  
  37.    // Pulse cualquier tecla para salir.
  38.    Console::ReadKey();
  39. }
  40.  

C#:
Código
  1. using System;
  2.  
  3. namespace Configuracion_ventanas_Consola_CS
  4. {
  5.    internal class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            #region Configuración ventana.
  10.            // Título de la ventana.
  11.            Console.Title = "Título de la ventana";
  12.  
  13.            // Tamaño de la ventana, x, y o, ancho y alto.
  14.            const byte ancho = 80;
  15.            const byte alto = 20;
  16.            Console.SetWindowSize(ancho, alto);
  17.  
  18.            // Color de fondo.
  19.            Console.BackgroundColor = ConsoleColor.Black;
  20.  
  21.            // Color de las letras.
  22.            Console.ForegroundColor = ConsoleColor.Green;
  23.  
  24.            // Limpiar pantalla y dejarlo todo en color de fondo.
  25.            Console.Clear();
  26.  
  27.            // Visible el cursor. // No! Así lo haces invisible.
  28.            Console.CursorVisible = false;
  29.            #endregion
  30.  
  31.            // Posición del cursor.
  32.            int anchoX = 20;
  33.            int altoY = 8;
  34.            Console.SetCursorPosition(anchoX, altoY);
  35.  
  36.            // Mostrar textos.
  37.            Console.WriteLine("Estás leyendo este texto en pantalla. C#");
  38.  
  39.            // Pulse cualquier tecla para salir.
  40.            Console.ReadKey();
  41.        }
  42.    }
  43. }
  44.  

Visual Basic .Net:
Código
  1. Module Module1
  2.  
  3.    Sub Main()
  4. #Region "Configuración ventana."
  5.        'Título de la ventana.
  6.        Console.Title = "Título de la ventana"
  7.  
  8.        'Tamaño de la ventana, x, y o, ancho y alto.
  9.        Const ancho As Byte = 80
  10.        Const alto As Byte = 20
  11.        Console.SetWindowSize(ancho, alto)
  12.  
  13.        'Color de fondo.
  14.        Console.BackgroundColor = ConsoleColor.Black
  15.  
  16.        'Color de las letras.
  17.        Console.ForegroundColor = ConsoleColor.Blue
  18.  
  19.        'Limpiar pantalla y dejarlo todo en color de fondo.
  20.        Console.Clear()
  21.  
  22.        'Visible el cursor. // No! Así lo haces invisible.
  23.        Console.CursorVisible = False
  24. #End Region
  25.  
  26.        'Posición del cursor.
  27.        Dim anchoX As Integer = 20
  28.        Dim altoY As Integer = 8
  29.        Console.SetCursorPosition(anchoX, altoY)
  30.  
  31.        'Mostrar textos.
  32.        Console.WriteLine("Estás leyendo este texto en pantalla. VB .Net")
  33.  
  34.        'Pulse cualquier tecla para salir.
  35.        Console.ReadKey()
  36.    End Sub
  37.  
  38. End Module

Un cordial saludos.
52  Programación / .NET (C#, VB.NET, ASP) / Marcar hora en grande para consola en: 13 Marzo 2022, 08:41 am
Buenas:

No se si se puede mostrar la hora local en la consola C# en grande, he hecho una mini matriz del 0 al 9 de 5x7 píxeles.

Con los datos de la matriz tipo string. ¿Se puede mostrar la hora?

Dejo el código de la matriz.
Código
  1. using System;
  2.  
  3. namespace Reloj_Consola_01
  4. {
  5.    internal class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.  
  10.            string[] weekDays = new string[]
  11.            {
  12.                @"
  13. &#9617;&#9608;&#9608;&#9608;&#9617;
  14. &#9608;&#9617;&#9617;&#9617;&#9608;
  15. &#9608;&#9617;&#9617;&#9608;&#9608;
  16. &#9608;&#9617;&#9608;&#9617;&#9608;
  17. &#9608;&#9608;&#9617;&#9617;&#9608;
  18. &#9608;&#9617;&#9617;&#9617;&#9608;
  19. &#9617;&#9608;&#9608;&#9608;&#9617;
  20. ",
  21.                @"
  22. &#9617;&#9617;&#9617;&#9608;&#9617;
  23. &#9617;&#9617;&#9608;&#9608;&#9617;
  24. &#9617;&#9617;&#9617;&#9608;&#9617;
  25. &#9617;&#9617;&#9617;&#9608;&#9617;
  26. &#9617;&#9617;&#9617;&#9608;&#9617;
  27. &#9617;&#9617;&#9617;&#9608;&#9617;
  28. &#9617;&#9617;&#9608;&#9608;&#9608;
  29. ",
  30.                @"
  31. &#9617;&#9608;&#9608;&#9608;&#9617;
  32. &#9608;&#9617;&#9617;&#9617;&#9608;
  33. &#9617;&#9617;&#9617;&#9617;&#9608;
  34. &#9617;&#9617;&#9617;&#9608;&#9617;
  35. &#9617;&#9617;&#9608;&#9617;&#9617;
  36. &#9617;&#9608;&#9617;&#9617;&#9617;
  37. &#9608;&#9608;&#9608;&#9608;&#9608;
  38. ",
  39.                @"
  40.  
  41. &#9608;&#9608;&#9608;&#9608;&#9608;
  42. &#9617;&#9617;&#9617;&#9608;&#9617;
  43. &#9617;&#9617;&#9608;&#9617;&#9617;
  44. &#9617;&#9617;&#9617;&#9608;&#9617;
  45. &#9617;&#9617;&#9617;&#9617;&#9608;
  46. &#9608;&#9617;&#9617;&#9617;&#9608;
  47. &#9617;&#9608;&#9608;&#9608;&#9617;
  48. ",
  49.                @"
  50. &#9617;&#9617;&#9617;&#9608;&#9617;
  51. &#9617;&#9617;&#9608;&#9608;&#9617;
  52. &#9617;&#9608;&#9617;&#9608;&#9617;
  53. &#9608;&#9617;&#9617;&#9608;&#9617;
  54. &#9608;&#9608;&#9608;&#9608;&#9608;
  55. &#9617;&#9617;&#9617;&#9608;&#9617;
  56. &#9617;&#9617;&#9617;&#9608;&#9617;
  57. ",
  58.                @"
  59. &#9608;&#9608;&#9608;&#9608;&#9608;
  60. &#9608;&#9617;&#9617;&#9617;&#9617;
  61. &#9608;&#9608;&#9608;&#9608;&#9617;
  62. &#9617;&#9617;&#9617;&#9617;&#9608;
  63. &#9617;&#9617;&#9617;&#9617;&#9608;
  64. &#9608;&#9617;&#9617;&#9617;&#9608;
  65. &#9617;&#9608;&#9608;&#9608;&#9617;
  66. ",
  67.                @"
  68. &#9617;&#9617;&#9608;&#9608;&#9617;
  69. &#9617;&#9608;&#9617;&#9617;&#9617;
  70. &#9608;&#9617;&#9617;&#9617;&#9617;
  71. &#9608;&#9608;&#9608;&#9608;&#9617;
  72. &#9608;&#9617;&#9617;&#9617;&#9608;
  73. &#9608;&#9617;&#9617;&#9617;&#9608;
  74. &#9617;&#9608;&#9608;&#9608;&#9617;
  75. ",
  76.                @"
  77. &#9608;&#9608;&#9608;&#9608;&#9608;
  78. &#9617;&#9617;&#9617;&#9617;&#9608;
  79. &#9617;&#9617;&#9617;&#9608;&#9617;
  80. &#9617;&#9617;&#9608;&#9617;&#9617;
  81. &#9617;&#9608;&#9617;&#9617;&#9617;
  82. &#9617;&#9608;&#9617;&#9617;&#9617;
  83. &#9617;&#9608;&#9617;&#9617;&#9617;
  84. ",
  85.                @"
  86. &#9617;&#9608;&#9608;&#9608;&#9617;
  87. &#9608;&#9617;&#9617;&#9617;&#9608;
  88. &#9608;&#9617;&#9617;&#9617;&#9608;
  89. &#9617;&#9608;&#9608;&#9608;&#9617;
  90. &#9608;&#9617;&#9617;&#9617;&#9608;
  91. &#9608;&#9617;&#9617;&#9617;&#9608;
  92. &#9617;&#9608;&#9608;&#9608;&#9617;
  93. ",
  94.                @"
  95. &#9617;&#9608;&#9608;&#9608;&#9617;
  96. &#9608;&#9617;&#9617;&#9617;&#9608;
  97. &#9608;&#9617;&#9617;&#9617;&#9608;
  98. &#9617;&#9608;&#9608;&#9608;&#9608;
  99. &#9617;&#9617;&#9617;&#9617;&#9608;
  100. &#9617;&#9617;&#9617;&#9608;&#9617;
  101. &#9617;&#9608;&#9608;&#9617;&#9617;
  102. "
  103.            };
  104.        }
  105.    }
  106. }
  107.  

De alguna manera creo que se puede mostrar la hora con los datos de la matriz.

¿Es posible?

Gracias.
53  Programación / Scripting / Guardar datos correctamente en un archivo en: 11 Marzo 2022, 00:37 am
Hola:

Quiero guardar en un archivo de texto por ejemplo en este comando en cmd.

tree > D:\tree.txt

En cmd se muestra bien la iamgen.


Ver imagen.

En el archivo de texto se muestra así.

[img=https://social.technet.microsoft.com/Forums/getfile/1692116]http://Ver imagen[/img].


Con PowerShell me ocurre en la consola aunque sea con ISE y en el propio archivo.

¿Hay alguna manera que se muestre bien tanto en el PowerShell con ISE y en el archivo.txt com en la primera captura?

Saludos.
54  Seguridad Informática / Hacking / Envío un e-mail ha alguien. ¿Hay alguna manera de saber si lo ha abierto o leído? en: 22 Febrero 2022, 23:00 pm
Buenas:

Cuando envío un e-mail o correo electrónico con gmail, hotmail, el que sea, no se si realmente una persona lo ha abierto o leído.

¿Existe un truco en hacerlo?

Aunque sea usando programación.

Un cordial saludos.
55  Programación / .NET (C#, VB.NET, ASP) / Cambiar propiedades en: 20 Febrero 2022, 08:47 am
Buenas:

¿Es posible cambiar las propiedades de un archivo?

Tal como indica abajo en rojo.

Ver imagen.

Si existe la posibilidad de hacerlo de alguna manera.


Desde un programa en consola con C#, creo un archivo de texto con la fecha por ejemplo 20/02/2022 8:46 que es el que tiene el Windwos ahora mismo, en realidad el UEFI o BIOS, se modifique a otra en el año 2019, por poner un ejemplo.

¿Existe la posibilidad de hacerlo?

Gracias.
56  Programación / .NET (C#, VB.NET, ASP) / ¿Cómo recibir email filtrado? en: 9 Enero 2022, 13:01 pm
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.
https://myaccount.google.com/lesssecureapps

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

Feliz año 2.022. ;)
57  Programación / .NET (C#, VB.NET, ASP) / Puerto serie por Web en: 9 Enero 2022, 12:58 pm
Buenas:

Tengo un SAI/UPS que se controla por el puerto serie con su cable (también USB si lo deseas) y puede leer los datos con su programa que te da el fabricante. Lo curioso que dicho programa al ejecutarlo, te abre el navegador Web, pones tu nick y contraseña y aparece los datos en pantalla que viene desde el dispositivo.

Por lo que veo, en la Webmuestra los datos recibidos y también envías comandos, por su puesto, al puerto serie.

¿Cómo controla datos de entrada y dalidas del puerto serie dede ls Web mediante servicios?

Antiguamente usaba capas para hacerlo funcionar, mi manera era, SQL Server, Visual C# para controlar puerto serie y leer la base de datos si ha sido modificado algún estado y controlar la base de datos por vía Web.

Observando el acceso directo hay un archivo que se llama agent.cmd, lo abro y aparece esto.

start http://localhost:3052/local/

Me abre el navegadorr Web.  A patir de ahí, ya funciona el programa del SAI.

Felices fiestas 2022.
58  Programación / .NET (C#, VB.NET, ASP) / Salto de línea de palabras en: 30 Diciembre 2021, 23:35 pm
Buenas.

En modo consola C#.

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

¿Es posible hacerlo sin pulsar Enter?

Que lo haga solo.

Felices fiestas 2021.
59  Programación / .NET (C#, VB.NET, ASP) / Al recibir datos, se me comen las palabras o faltan caracteres en: 30 Diciembre 2021, 06:11 am
Buenas:

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

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

Dejo el código fuente aquí.

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

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

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

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

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

"245 VAC de Entrada"

"230 VAC de Salida"


Esto automaticamente lo lee la Web.

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

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

"MUTE_ZUMBADOR"

Y el SAI lo sabe.

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

¿O cuál proyecto inicio?

Quiero saber los pasos.

Saludos.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 66
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines