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

 

 


Tema destacado: Trabajando con las ramas de git (tercera 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 22 23 24 25 ... 66
91  Foros Generales / Dudas Generales / ¿Es posible descargar de golpe estos PDF de una Web? en: 28 Julio 2020, 10:27 am
Buenas:

En este enlace.

Se puede ver que cada uno de ellos que pinches, lees un PDF, los quería descargar uno a uno, pero me da pereza, a parte de ponerles sus nombres para orientarme.

Quiero saber si hay alguna forma de descargar toda esa documentación en PDF de alguna forma o es imposible. Quiero evitarlo hacerlo de uno en uno.

Saludos.
92  Programación / Programación General / Cálculo a realizar en: 28 Julio 2020, 09:58 am
Hola:

Quiero hacer un programa en Arduino en el cual te pide cuatro valores. Esos valores son números a introducir por el monitor Serie de Arduino IDE.

Hice un ejemplo en C# modo consola para que se entienda lo que quiero decir.

 Estos son los datos que te piden, solo cuatro y nada más.


Desde que pulse Enter con todo lo que indica arriba, en C# lo muestra como indica abajo. Lo que indica en laimagen de abajo, es el resultado que tiene que dar el monitor Serie.

Esto ya parece un reto.


Códido C#:
Código:
using System;
using System.Speech.Recognition; // No olvidar. Micro.
using System.Speech.Synthesis; // No olvidar. Altavoz.

// No olvidar añadir en "Referencias" Speech en el "Explorador de soluciones".

namespace Calculo_cilindro_voz_consola_02_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Mostrar título de la ventana.
            Console.Title = "Cálculo litros de un depósito - By Meta. Electrónica PIC";

            // Tamaño de la ventna. 55 X y 16 Y.
            Console.SetWindowSize(55, 16);

            #region Variables.
            // Variables.
            const double Pi = 3.14;
            float PI = Convert.ToSingle(Pi);
            float radio, altura, volumen, litros, nivelAgua, resultadoPorcentaje,
                resultadoLitros, volumenLitros, mitadBarra, cantidadTubosLitros,
                totalLitros;
            float cantidadTubos;
            #endregion

            do
            {
                try
                {
                    // Inicializar una nueva instancia de SpeechSynthesizer.
                    using (SpeechSynthesizer altavoz = new SpeechSynthesizer())
                    {
                        #region Introducción de datos en la pantalla.
                        // Configure la salida de audio.
                        altavoz.SetOutputToDefaultAudioDevice();

                        // Velocidad de la voz.
                        altavoz.Rate = -2; // Valores entre -10 a 10.

                        // Volumen de la voz.
                        altavoz.Volume = 100; // Valores entre 0 y 100.

                        // Limpiar pantalla.
                        Console.Clear();

                        // Cursor visible.
                        Console.CursorVisible = true;
                        // Introducción de datos.
                        Console.Write("Introduce el radio en m.: ");
                        altavoz.Speak("Introduce el radio en metros.");
                        radio = float.Parse(Console.ReadLine());
                        Console.Write("Introduce la altura del tubo en m.: ");
                        altavoz.Speak("Introduce la altura del tubo en metros.");
                        altura = float.Parse(Console.ReadLine());
                        Console.Write("Introduce altura del agua. Máximo es de {0} m.: ", altura);
                        altavoz.Speak("Introduce altura del agua. Máximo es de " + altura + "metros.");
                        nivelAgua = float.Parse(Console.ReadLine());
                        Console.Write("Introduce cantidad de tubos: ");
                        altavoz.Speak("Introduce cantidad de tubos.");
                        cantidadTubos = int.Parse(Console.ReadLine());
                        #endregion

                        #region Cálculos.
                        // Cálculo volumen.
                        volumen = PI * (radio * radio) * altura;

                        // Cálculo litros.
                        litros = volumen * 1000;

                        // Cálculo porcentaje en % del litro de agua.
                        resultadoPorcentaje = nivelAgua * (100 / altura);

                        // Cálculo litros de agua.
                        volumenLitros = PI * (radio * radio) * nivelAgua;
                        resultadoLitros = volumenLitros * 1000;

                        // Cálculo litros por cantidad de tubos
                        cantidadTubosLitros = cantidadTubos * resultadoLitros;

                        // Cálculo cantidad de litros con total de tubos.
                        totalLitros = litros * cantidadTubos;
                        #endregion

                        #region Dibujado barra de progreso.

                        // Posición.
                        Console.SetCursorPosition(0, 4);

                        // Dibujo de la barra.
                        Console.WriteLine();
                        Console.WriteLine("0 %                     50 %                   100 %");
                        Console.WriteLine("┌────────────────────────┬───────────────────────┐");

                        // Mitad de la barra para que no sea muy grande en la pantalla.
                        mitadBarra = resultadoPorcentaje / 2;

                        if (resultadoPorcentaje <= 15)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                        }
                        else if (resultadoPorcentaje <= 40)
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                        }
                        else if (resultadoPorcentaje <= 100)
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                        }

                        if (mitadBarra > 50)
                        {
                            mitadBarra = 50;
                        }

                        Console.SetCursorPosition(0, 7);
                        // Rellenar la barra.
                        for (int i = 1; i <= mitadBarra; i++)
                        {
                            Console.Write("█");
                        }

                        Console.ForegroundColor = ConsoleColor.Gray;

                        // Si llega a 100 se pone el # en rojo.
                        if (resultadoPorcentaje > 100)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.Write("#");
                            Console.ForegroundColor = ConsoleColor.Gray;
                        }
                        #endregion

                        #region Mostrar textos en pantalla.
                        // Cursor invisible.
                        Console.CursorVisible = false;

                        // Pisición del texto a mostrar.
                        Console.SetCursorPosition(0, 9);

                        // Muestra porcentaje del depósito.
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.Write("\nPorcentaje: ");
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine(resultadoPorcentaje.ToString("N2") + " %.");
                        altavoz.Speak("Cantidad de agua que hay en el depósito es de " +
                            //resultadoPorcentaje.ToString("N2") + "%.");
                            resultadoPorcentaje + "%.");

                        // Muestra cantidad de agua que hay actualmente y el total.
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.Write("\nLitros de agua: ");
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.Write(resultadoLitros.ToString("N2"));
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(" / " + litros.ToString("N2") + " L. total de un tubo.");
                        altavoz.Speak("Cantidad de litros de agua en un tubo de " +
                            resultadoLitros.ToString("N2") + "de " +
                            litros.ToString("N2") + " litros total de un tubo.");

                        // Cantidad de tubos sin contar la base conectada, solo tubos independiente.
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.Write("\nCantidad de Litros total por " + cantidadTubos + " tubos: ");
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.Write(cantidadTubosLitros.ToString("N2"));
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(" / " + totalLitros.ToString("N2") + " L.");
                        altavoz.Speak("Cantidad de litros en total por " + cantidadTubos.ToString("N2") +
                            " tubos: " + cantidadTubosLitros.ToString("N2") +
                            " de " + totalLitros.ToString("N2") + " litros.");
                        #endregion
                    }
                }

                catch (FormatException)
                {
                    Console.BackgroundColor = ConsoleColor.Gray;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Clear();
                    Console.SetCursorPosition(8, 5);
                    Console.Write(@"La cadena de entrada no tiene el
        formato correcto.

        Solo debes introducir números y comas.");
                    Console.CursorVisible = false;
                    Console.BackgroundColor = ConsoleColor.Black;
                    Console.ForegroundColor = ConsoleColor.Gray;
                }

                // Pulse cualquier tecla para continuar.
                Console.ReadKey();
            } while (true);
        }
    }
}

En resumen, quiero hacer lo mismo de C#, sin voz y lo más sencillo posible en Arduino IDE.

Saludos.
93  Programación / Programación C/C++ / Se muestra o no el cursor depende de... en: 27 Julio 2020, 15:45 pm
Hola:

En C++ nativo con Visual Studio Community 2019, tengo este código,  que no se muestra el cursor.

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.     // Mostrar caracteres correctamente en pantalla y título de la ventana.
  23. SetConsoleOutputCP(65001);
  24. wchar_t titulo[128];
  25. MultiByteToWideChar(CP_UTF8, 0, "Título de la ventana. Win32 C++ 2019.", -1, titulo, 128);
  26. SetConsoleTitle(titulo);
  27.  
  28. // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  29. SMALL_RECT r = { 0, 0, 49, 9 }; // X = 49, Y = 9.
  30. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  31.  
  32. // Cambio color de 8 (gris), color letras 0 (negro).
  33. //system("color 80");
  34.  
  35. // Ocultar cursor.
  36. CONSOLE_CURSOR_INFO cci;
  37. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  38. cci.bVisible = 0; // 0 oculta. 1 muestra cursor.
  39. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  40.  
  41. // Mostrar textos en pantalla.
  42. cout << "Terminarías. Conocerías. Título. Analógico. \n";
  43. cout << "Muchas gracias mi muy distinguido amigo.";
  44.  
  45. // Limpiar pantalla.
  46. system("cls");
  47.  
  48. // Mostrar textos en pantalla.
  49. cout << "Se escribe este texto después de haber " << endl;
  50. cout << "borrado el anterior." << endl;
  51.  
  52. // Posición del cursor.
  53. gotoxy(5, 5);
  54.  
  55. cout << "Posición." << endl;
  56.  
  57. // Ocultar cursor.
  58. CONSOLE_CURSOR_INFO cci2;
  59. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci2);
  60. cci2.bVisible = 1; // 0 oculta. 1 muestra cursor.
  61. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci2);
  62.  
  63. // Esperando pulsar Enter para salir.
  64. cin.get();
  65. return 0;
  66. }

Si quito este código.
Código
  1. // Cambio color de 8 (gris), color letras 0 (negro).
  2. system("color 80");

Se muestra el cursor parpadeando como siempre.

¿Esto es normal?

Para mi no lo es, una cosa es cambiar el color de la ventana y letras, es independiente al parpadeo del cursor si está activado o no.

Saludos.
94  Programación / Programación General / Modificando Arduino IDE en: 27 Julio 2020, 14:18 pm
Hola:

Antes que nada, no se si esto va aquí.
Hice un ejemplo con C# sobre el cambio de tamaño del array. Quiero ahcer lo mismo pero con Arduino IDE. Lo que se tiene que mostrar en ARduino IDE es en el "Monitor serie", en el cual se usa el comando:

Código C de Arduino IDE:
Código
  1. Serial.println("Se muestra este texto en el Monitor serie.");

El código que tengo abajo de C#, quiero de alguna forma transformarlo en Arduino IDE. En realidad este es un ejemplo tonto para que se entienda lo que hace de agrandar o reducir el tamaño del array en C#, pero quiero hacerlo en C de Arduino IDE.

Código C#:
Código
  1. sing System;
  2.  
  3. namespace Cambiar_tamaño_array_consola_02_cs
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            // Título de la ventana.
  10.            Console.Title = "Tamaño del array";
  11.  
  12.            // Crea e inicializa una nueva matriz de cadenas.
  13.            String[] miArray = {"Hola", "mi", "muy", "distinguido", "amigo",
  14.            "¿Cómo", "estás", "por", "aquí?"};
  15.  
  16.            // Muestra los valores de la matriz.
  17.            Console.WriteLine(
  18.                "La matriz de cadenas contiene inicialmente los siguientes valores:");
  19.            MostrarIndicesYValores(miArray);
  20.  
  21.            // Cambiar el tamaño de la matriz a un tamaño más grande (cinco elementos más grandes).
  22.            Array.Resize(ref miArray, miArray.Length + 5);
  23.  
  24.            // Muestra los valores de la matriz.
  25.            Console.WriteLine("Después de cambiar el tamaño a un tamaño más grande,");
  26.            Console.WriteLine("la matriz de cadenas contiene los siguientes valores:");
  27.            MostrarIndicesYValores(miArray);
  28.  
  29.            // Cambiar el tamaño de la matriz a un tamaño más pequeño (cuatro elementos).
  30.            Array.Resize(ref miArray, 4);
  31.  
  32.            // Muestra los valores de la matriz.
  33.            Console.WriteLine("Después de cambiar el tamaño a un tamaño más pequeño,");
  34.            Console.WriteLine("la matriz de cadenas contiene los siguientes valores:");
  35.            MostrarIndicesYValores(miArray);
  36.  
  37.            // Pulse cualquier tecla para salir.
  38.            Console.ReadKey();
  39.        }
  40.  
  41.        public static void MostrarIndicesYValores(String[] miArray)
  42.        {
  43.            for (int i = 0; i < miArray.Length; i++)
  44.            {
  45.                Console.WriteLine("   [{0}] : {1}", i, miArray[i]);
  46.            }
  47.            Console.WriteLine();
  48.        }
  49.    }
  50. }
  51.  

Mostrar captura de C#
:




Saludos.
95  Programación / .NET (C#, VB.NET, ASP) / Crear archivo excel en: 25 Julio 2020, 17:41 pm
Hola:

Quiero crear un archivo excel llamado Archivo.xlsx en consola C#.

Los datos son estos.

Código
  1. h V
  2. 1 4,429446918
  3. 2 6,264183905
  4. 3 7,672027112
  5. 4 8,858893836
  6. 5 9,904544412
  7. 6 10,84988479
  8. 7 11,71921499
  9. 8 12,52836781
  10. 9 13,28834075


Donde pone exactamente

Código
  1. 4,429446918

Tiene este cálculo.
Código
  1. =RAIZ(2*9,81*A2)

También quiero saber, al menos si me crea gráfico incluido, lo hice a mano abajo, pare que vean de que hablo.


Ver Zoom.

Sin usar ninguna librería, esto ya es más complicado.

Saludos.
96  Informática / Electrónica / Morse en: 24 Julio 2020, 14:22 pm
Hola:

¿El código morse en digital o analógico y por qué?

Como es del 1844 inventado por Samuel Morse, sobre puntos y rayas, en aquella época, ya unos 175 años, no había nada digital, por eso creo que es analógica, como solo es pulsar pulsadores un punto y otro más tiempo que es raya, solo es haber tensiones si pulsas y no haber nada si dejas de pulsar.

Ya no se que creer.

Saludos.
97  Programación / .NET (C#, VB.NET, ASP) / Lograr hacer bien el programa en: 7 Julio 2020, 19:58 pm
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
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace LCD_nombre_archivo_consola_08
  8. {
  9.    class Program
  10.    {
  11.        static string guardarNombre = "";
  12.        static int coordenadaX = 0;
  13.        private static ConsoleKey tecla;
  14.  
  15.        // Caracteres de este array.
  16.        static readonly char[] roALFANUMERICO = new char[]
  17.        {
  18.            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
  19.            'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
  20.            'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
  21.            'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
  22.            '¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '
  23.        };
  24.  
  25.        // Dirección del carácter del array. El 80 presenta al espacio del array roALFANUMERICO.
  26.        static readonly int[] roINDICE_ARRAY = new int[]
  27.        {
  28.            80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
  29.        };
  30.  
  31.        private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };
  32.  
  33.        static int index = 0;
  34.        static void Main(string[] args)
  35.        {
  36.            // Título de la pantalla.
  37.            Console.Title = "Cambiar nombre";
  38.  
  39.            Inicio();
  40.        }
  41.  
  42.        #region Inico.
  43.        private static void Inicio()
  44.        {
  45.            // Tamaño de la ventana.
  46.            Console.SetWindowSize(20, 5); // X
  47.  
  48.            // Fondo verde, azul, gris.
  49.            Console.BackgroundColor = ConsoleColor.Gray;
  50.  
  51.            // Letras negras, blanco, negro.
  52.            Console.ForegroundColor = ConsoleColor.Black;
  53.  
  54.            // Limpiar pantalla.
  55.            Console.Clear();
  56.  
  57.            Console.SetCursorPosition(0, 0);
  58.            Console.Write("Nombre del relé 1:  ");
  59.            Console.SetCursorPosition(0, 1);
  60.            //Console.Write("AAAAAAAAAAAAAAAA");
  61.  
  62.            // Recorre todo el índice del array y el de los datos alfanumérico
  63.            // y los rellena.
  64.            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
  65.            {
  66.                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
  67.            }
  68.  
  69.            Console.SetCursorPosition(2, 3);
  70.            Console.Write(roTEXTO[0]); // ATRÁS.
  71.            Console.SetCursorPosition(12, 3);
  72.            Console.Write(roTEXTO[1]); // GUARDAR.
  73.  
  74.            while (true)
  75.            {
  76.                Console.SetCursorPosition(coordenadaX, 1);
  77.  
  78.                // Almacena cualquier tecla pulsada en la variable key.
  79.                tecla = Console.ReadKey(true).Key;
  80.                switch (tecla)
  81.                {
  82.                    case ConsoleKey.RightArrow:
  83.                        if (coordenadaX < 15)
  84.                        {
  85.                            coordenadaX++;
  86.                        }
  87.                        break;
  88.  
  89.                    case ConsoleKey.LeftArrow:
  90.                        if (coordenadaX > 0)
  91.                        {
  92.                            coordenadaX--;
  93.                        }
  94.                        break;
  95.  
  96.                    case ConsoleKey.UpArrow:
  97.                        roINDICE_ARRAY[coordenadaX]++;
  98.                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
  99.                        {
  100.                            roINDICE_ARRAY[coordenadaX] = 0;
  101.                        }
  102.                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
  103.                        break;
  104.  
  105.                    case ConsoleKey.DownArrow:
  106.                        roINDICE_ARRAY[coordenadaX]--;
  107.                        if (roINDICE_ARRAY[coordenadaX] < 0)
  108.                        {
  109.                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
  110.                        }
  111.                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
  112.                        break;
  113.  
  114.                    case ConsoleKey.Enter:
  115.                        Console.SetCursorPosition(1, 3);
  116.                        Console.CursorVisible = false;
  117.                        Console.Write(">");
  118.  
  119.                        while (true)
  120.                        {
  121.                            tecla = Console.ReadKey(true).Key;
  122.  
  123.                            switch (tecla)
  124.                            {
  125.                                case ConsoleKey.RightArrow:
  126.                                case ConsoleKey.LeftArrow:
  127.                                    index = 1 - index;
  128.                                    break;
  129.  
  130.                                case ConsoleKey.UpArrow:
  131.                                case ConsoleKey.DownArrow:
  132.                                    Console.SetCursorPosition(coordenadaX, 1);
  133.                                    break;
  134.  
  135.                                case ConsoleKey.Enter:
  136.  
  137.                                    break;
  138.                            }
  139.  
  140.                            for (int a = 0; a < 2; a++)
  141.                            {
  142.                                Console.SetCursorPosition(1 + (10 * a), 3);
  143.                                if (a == index)
  144.                                {
  145.                                    Console.Write(">");
  146.                                }
  147.                                else
  148.                                {
  149.                                    Console.Write(" ");
  150.                                }
  151.                            }
  152.  
  153.                            if (index == 0)  // se pulsó Atrás
  154.                            {
  155.                                Atras();
  156.                                //break;  // vuelve a la edición de letras
  157.                            }
  158.  
  159.                            if (index == 1)  // se pulsó Guardar
  160.                            {
  161.                                Guardar();
  162.                            }
  163.                        }
  164.                }
  165.            }
  166.        }
  167.        #endregion
  168.  
  169.        private static void Atras()
  170.        {
  171.            Console.Clear();
  172.            Console.SetCursorPosition(0, 1);
  173.            Console.Write("HAS PULSADO ATRÁS   ");
  174.            Console.ReadKey(); // Pulse cualquier tecla para salir.
  175.        }
  176.  
  177.        private static void Guardar()
  178.        {
  179.            Console.Clear();
  180.            Console.SetCursorPosition(0, 1);
  181.            Console.Write("HAS GUARDADO       ");
  182.            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
  183.            {
  184.                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
  185.            }
  186.            Console.SetCursorPosition(0, 2);
  187.            Console.Write(guardarNombre);
  188.        }
  189.    }
  190. }
  191.  

Gracias.
98  Programación / Programación C/C++ / Mejorar el código en C++ nativo en: 7 Julio 2020, 15:05 pm
Buenas:

Tengo este código en C++ nativo, en el cual aún no logro que funcione tal como lo quiero. Lo que hace este código es, que si pulsas la letra A o a, se abre la bandeja del lector del disco, si pulsas C o c se cierra.

Código C++ nativo:
Código
  1. #include <iostream>
  2. #include <windows.h> // Para mostrar texto en el título de la ventana.
  3.  
  4. using namespace std;
  5. //using std::cout;
  6. //using std::cin;
  7.  
  8. // Función posición del cursor.
  9. void gotoxy(int x, int y)
  10. {
  11. HANDLE hcon;
  12. hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  13. COORD dwPos;
  14. dwPos.X = x;
  15. dwPos.Y = y;
  16. SetConsoleCursorPosition(hcon, dwPos);
  17. }
  18.  
  19. int main(void)
  20. {
  21. // Mostrar caracteres correctamente en pantalla y título de la ventana.
  22. SetConsoleOutputCP(65001);
  23. wchar_t titulo[128];
  24. MultiByteToWideChar(CP_UTF8, 0, "Consola C++ nativo 2019.", -1, titulo, 128);
  25. SetConsoleTitle(titulo);
  26.  
  27. // Variable.
  28. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola.
  29.  
  30. // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  31. SMALL_RECT r = { 0, 0, 29, 8 }; // X = 29, Y = 8.
  32. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  33.  
  34. // Ocultar cursor.
  35. CONSOLE_CURSOR_INFO cci;
  36. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  37. cci.bVisible = 0; // 0 oculta. 1 muestra cursor.
  38. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  39.  
  40. // Muestra textos en pantalla.
  41. cout << "Control bandeja del lector: " << endl << endl;
  42. cout << "A - Abrir bandeja." << endl;
  43. cout << "C - Cerrar bandeja." << endl;
  44. cout << "===========================" << endl;
  45.  
  46. while (true)
  47. {
  48.  
  49.  
  50. // Aquí introduces letras A, a, C y c.
  51. cin >> entrada;
  52. cout << "\n" << endl;
  53.  
  54. // Abrir bandeja.
  55. if ((entrada[0] == 'a') || (entrada[0] == 'A'))
  56. {
  57. // Posición del cursor.
  58. gotoxy(0, 6);
  59. cout << "Abriendo..." << endl << endl; // Muestra texto en pantalla.
  60. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);
  61. gotoxy(0, 6);
  62. cout << "Abierto.   " << endl << endl; // Muestra texto en pantalla.
  63. }
  64.  
  65. // Cerrar bandeja.
  66. else if ((entrada[0] == 'c') || (entrada[0] == 'C'))
  67. {
  68. gotoxy(0, 6);
  69. cout << "Cerrando..." << endl << endl; // Muestra texto en pantalla.
  70. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr);
  71. gotoxy(0, 6);
  72. cout << "Cerrado.   " << endl << endl; // Muestra texto en pantalla.
  73. }
  74.  
  75. // Si haz pulsado otro caracter distinto de A, C, a y c aparece
  76. else
  77. {
  78. gotoxy(0, 6);
  79. // este mensaje.
  80. cout << "Solo pulsa A o C." << endl << endl;
  81. }
  82.  
  83. }
  84. return EXIT_SUCCESS;
  85. }

En el código de C# si funciona tal como lo quiero, pongo un ejemplo abajo.

Código C#:
Código
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Text;
  4. namespace Bandeja_consola_cs
  5. {
  6.    class Program
  7.    {
  8.        [DllImport("winmm.dll")]
  9.        public static extern Int32 mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
  10.        int uReturnLength, IntPtr hwndCallback);
  11.        public static StringBuilder rt = new StringBuilder(127);
  12.        public static void DoEventsAbriendo()
  13.        {
  14.            Console.SetCursorPosition(0, 6);
  15.            Console.Write("Abriendo...");
  16.        }
  17.        public static void DoEventsCerrando()
  18.        {
  19.            Console.SetCursorPosition(0, 6);
  20.            Console.Write("Cerrando...");
  21.        }
  22.        static void Main(string[] args)
  23.        {
  24.            // Título de la ventana.
  25.            Console.Title = "Consola C# 2017";
  26.            // Tamaño ventana consola.
  27.            Console.WindowWidth = 29; // X. Ancho.
  28.            Console.WindowHeight = 8; // Y. Alto.
  29.            // Cursor invisible.
  30.            Console.CursorVisible = false;
  31.            // Posición del mansaje en la ventana.
  32.            Console.SetCursorPosition(0, 0);
  33.            Console.Write(@"Control bandeja del lector:
  34. A - Abrir bandeja.
  35. C - Cerrar bandeja.
  36. ===========================");
  37.            ConsoleKey key;
  38.            //Console.CursorVisible = false;
  39.            do
  40.            {
  41.                key = Console.ReadKey(true).Key;
  42.                string mensaje = string.Empty;
  43.                //Asignamos la tecla presionada por el usuario
  44.                switch (key)
  45.                {
  46.                    case ConsoleKey.A:
  47.                        // mensaje = "Abriendo...";
  48.                        Console.SetCursorPosition(0, 6);
  49.                        DoEventsAbriendo();
  50.                        mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero);
  51.                        mensaje = "Abierto.   ";
  52.                        break;
  53.                    case ConsoleKey.C:
  54.                        // mensaje = "Cerrando...";
  55.                        Console.SetCursorPosition(0, 6);
  56.                        DoEventsCerrando();
  57.                        mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero);
  58.                        mensaje = "Cerrado.   ";
  59.                        break;
  60.                }
  61.                Console.SetCursorPosition(0, 6);
  62.                Console.Write(" ");
  63.                Console.SetCursorPosition(0, 6);
  64.                Console.Write(mensaje);
  65.            }
  66.            while (key != ConsoleKey.Escape);
  67.        }
  68.    }
  69. }

Lo que hace el código C# exactamente todos estos comportamientos.

1. Te pregunta si pulsas teclas, por ejemplo la A para abrir la bandeja y C para cerrar, independientemente si es mayúscula o no. Funciona todo.

2. Desde que pulse cualquier letra del teclado que non corresponda la A, a, C y la c, el programa no hace nada, como debe ser.

3. Si quiero abrir la bandeja del lector y pulso la tecla A, desde que pulse la tecla, se abre la bandeja.

4. Desde que pulse la tecla A, dice el mensaje "Abriendo...", cuando esté abierto la bandeja del todo, dice "Abierto.".

Lo que hace el código C++ nativo y no quiero.


1. Pulso la tecla A o la a, y aparece escrito en la consola.

2. Luego tengo que pulsar la tecla Enter para que la letra A o la a, funcione el comando. Entonces ya puede abrir la bandeja y mostrar los mensajes Abriendo... y Aabierto.

La pregunta es. ¿Se puede corregir este comportamiento de C++ nativo que sea igual al ejemplo de C#?

Saludos.
99  Programación / .NET (C#, VB.NET, ASP) / Quitar el puntero del ratón en pantalla en: 7 Julio 2020, 14:13 pm
Buenas:

Usando Windows Form C# hice este código.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace prueba_cs
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.            timer1.Start();
  19.        }
  20.  
  21.  
  22.  
  23.        void cambioColor()
  24.        {
  25.            this.BackColor = Color.Black; // Formulario negro.
  26.            //this.ForeColor = Color.White; // Cambia textos en blanco.
  27.            label1.ForeColor = Color.White;
  28.        }
  29.  
  30.        void cambioColor2()
  31.        {
  32.            this.BackColor = Color.White; // Formulario blanco.
  33.            //this.ForeColor = Color.Black; // Cambia textos en negro.
  34.            label1.ForeColor = Color.Black;
  35.        }
  36.  
  37.        private void timer1_Tick(object sender, EventArgs e)
  38.        {
  39.            cambioColor();
  40.            timer1.Stop();
  41.            timer2.Start();
  42.        }
  43.  
  44.        private void timer2_Tick(object sender, EventArgs e)
  45.        {
  46.            cambioColor2();
  47.            timer2.Stop();
  48.            timer1.Start();
  49.        }
  50.    }
  51. }

Se sale del formulario pulsando Alt + F4. Quiero que se desactive el puntero del ratón en el momento que cree este formulario.

Gracias.
100  Programación / Programación C/C++ / Prueba leer la dll nativo con interfaz C++ nativo en: 6 Julio 2020, 00:49 am
Hola:

Haciendo otras pruebas.

Creo el archivo dll.
Código
  1. #include "pch.h"
  2.  
  3. extern "C"
  4. {
  5.    __declspec(dllexport) LPTSTR __stdcall Mensaje();
  6.    __declspec(dllexport) float __stdcall Volumen(float, float, float, float);
  7.    __declspec(dllexport) float __stdcall Litros(float, float);
  8.    __declspec(dllexport) float __stdcall ResultadoPorcentaje(float, float, float);
  9.    __declspec(dllexport) float __stdcall VolumenLitros(float, float, float, float, float);
  10.    __declspec(dllexport) float __stdcall CantidadTubosLitros(float, float, float);
  11.    __declspec(dllexport) float __stdcall TotalLitros(float, float, float);
  12. };
  13.  
  14. // Mensaje.
  15. LPTSTR __stdcall Mensaje() { return LPTSTR(L"Hola. Saludos desde la dll. Versión: 1.0.0"); }
  16.  
  17. // Cálculo volumen.
  18. float __stdcall Volumen(float volumen, float PI, float radio, float altura)
  19. {
  20.    return volumen = PI * (radio * radio) * altura;
  21. }
  22.  
  23. // Cálculo litros.
  24. float __stdcall Litros(float litros, float volumen)
  25. {
  26.    return litros = volumen * 1000;
  27. }
  28.  
  29. // Cálculo porcentaje en % del litro de agua.
  30. float __stdcall ResultadoPorcentaje(float resultadoPorcentaje, float nivelAgua, float altura)
  31. {
  32.    return resultadoPorcentaje = nivelAgua * (100 / altura);
  33. }
  34.  
  35. // Cálculo litros de agua.
  36. float __stdcall VolumenLitros(float volumenLitros, float PI, float radio, float nivelAgua, float resultadoLitros)
  37. {
  38.    return volumenLitros = PI * (radio * radio) * nivelAgua;
  39.    return resultadoLitros = volumenLitros * 1000;
  40. }
  41.  
  42. // Cálculo litros por cantidad de tubos
  43. float __stdcall CantidadTubosLitros(float cantidadTubosLitros, float cantidadTubos, float resultadoLitros)
  44. {
  45.    return cantidadTubosLitros = cantidadTubos * resultadoLitros;
  46. }
  47.  
  48. // Cálculo cantidad de litros con total de tubos.
  49. float __stdcall TotalLitros(float totalLitros, float litros, float cantidadTubos)
  50. {
  51.    return totalLitros = litros * cantidadTubos;
  52. }

Luego el deb.
Código
  1. LIBRARY DLL_al_poder
  2. EXPORTS
  3. Mensaje
  4. Volumen
  5. Litros
  6. ResultadoPorcentaje
  7. VolumenLitros
  8. CantidadTubosLitros
  9. TotalLitros

Y la interfaz de C++ nativo para que lea la dll.
Código
  1. #include <iostream>
  2. #include <windows.h> // Para mostrar texto en el título de la ventana.
  3.  
  4. using namespace std;
  5. //using std::cout;
  6. //using std::cin;
  7.  
  8. // Función posición del cursor.
  9. void gotoxy(int x, int y)
  10. {
  11. HANDLE hcon;
  12. hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  13. COORD dwPos;
  14. dwPos.X = x;
  15. dwPos.Y = y;
  16. SetConsoleCursorPosition(hcon, dwPos);
  17. }
  18.  
  19. // Definir estas funciones.
  20. typedef LPTSTR(__stdcall* Mensaje)();
  21. typedef float(__stdcall* Volumen)(float, float, float, float);
  22. typedef float(__stdcall* Litros)(float, float);
  23. typedef float(__stdcall* ResultadoPorcentaje)(float, float, float);
  24. typedef float(__stdcall* VolumenLitros)(float, float, float, float, float);
  25. typedef float(__stdcall* CantidadTubosLitros)(float, float, float);
  26. typedef float(__stdcall* TotalLitros)(float, float, float);
  27.  
  28. int main(void)
  29. {
  30. // Variables.
  31. const double Pi = 3.14;
  32. float radio;
  33. float altura;
  34. //double volumen;
  35. //double litros;
  36. float nivelAgua;
  37. //float resultadoPorcentaje;
  38. //double resultadoLitros;
  39. //double volumenLitros;
  40. float mitadBarra;
  41. float cantidadTubos;
  42. //double cantidadTubosLitros;
  43. //double totalLitros;
  44.  
  45. // Importar dll.
  46. HINSTANCE hDLL = 0;
  47. Mensaje mensaje;
  48. Volumen volumen;
  49. Litros litros;
  50. ResultadoPorcentaje resultadoPorcentaje;
  51. VolumenLitros volumenLitros;
  52. CantidadTubosLitros cantidadTubosLitros;
  53. TotalLitros totalLitros;
  54.  
  55. hDLL = LoadLibrary(L"C:\\Users\\Meta\\Documents\\Visual Studio 2019\\Projects\\DLL_y_interfaz_nativo_01_cpp\\Debug\\DLL_y_interfaz_nativo_01_cpp.dll");
  56. mensaje = (Mensaje)GetProcAddress(hDLL, "Mensaje");
  57. volumen = (Volumen)GetProcAddress(hDLL, "Volumen");
  58. litros = (Litros)GetProcAddress(hDLL, "Litros");
  59. resultadoPorcentaje = (ResultadoPorcentaje)GetProcAddress(hDLL, "ResultadoPorcentaje");
  60. volumenLitros = (VolumenLitros)GetProcAddress(hDLL, "VolumenLitros");
  61. cantidadTubosLitros = (CantidadTubosLitros)GetProcAddress(hDLL, "CantidadTubosLitros");
  62. totalLitros = (TotalLitros)GetProcAddress(hDLL, "totalLitros");
  63.  
  64. // Mostrar caracteres correctamente en pantalla y título de la ventana.
  65. SetConsoleOutputCP(65001);
  66. wchar_t titulo[128];
  67. MultiByteToWideChar(CP_UTF8, 0, "Interfaz leer dll C++ nativo 2019.", -1, titulo, 128);
  68. SetConsoleTitle(titulo);
  69.  
  70. // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  71. SMALL_RECT r = { 0, 0, 49, 35 }; // X = 49, Y = 9.
  72. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  73.  
  74. // Ocultar cursor.
  75. CONSOLE_CURSOR_INFO cci;
  76. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  77. cci.bVisible = 1; // 0 oculta cursor. 1 muestra cursor.
  78. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  79.  
  80. // Posición del cursor.
  81. gotoxy(3, 2);
  82.  
  83. // Mostrar textos en pantalla.
  84. wcout << mensaje() << endl;
  85. gotoxy(0, 4);
  86. cout << "Introduce el radio en m.: ";
  87. cin >> radio;
  88. cout << "Introduce la altura en m. ";
  89. cin >> altura;
  90. cout << "Introduce altura del agua. Máximo es de " << altura << ":";
  91. cin >> nivelAgua;
  92. cout << "Introduces cantidad de tubos: ";
  93. cin >> cantidadTubos;
  94.  
  95. // ########## Dibujo de la barra.
  96. cout << "\n";
  97. cout << ("0 %                     50 %                   100 %") << endl;
  98. cout << ("&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;") << endl;
  99.  
  100. // Mitad de la barra para que no sea muy grande en la pantalla.
  101. mitadBarra = resultadoPorcentaje / 2;
  102.  
  103. if (mitadBarra > 50)
  104. {
  105. mitadBarra = 50;
  106. }
  107.  
  108. // Rellenar la barra.
  109. for (float i = 1; i <= mitadBarra; i++)
  110. {
  111. cout << ("&#9608;");
  112. }
  113.  
  114. // Si llega a 100 se pone el # en rojo.
  115.  
  116. if (resultadoPorcentaje > 100)
  117. {
  118. cout << ("#");
  119. }
  120. //########## Fin dibujo de la barra.
  121.  
  122. // Pisición del texto a mostrar.
  123. gotoxy(0, 11);
  124.  
  125. //cout << "\nPorcentaje: " << resultadoPorcentaje << " %.";
  126.  
  127.  
  128. FreeLibrary(hDLL);
  129.  
  130. // Esperando pulsar Enter para salir.
  131. cin.get();
  132. return 0;

Me salen estos errores.


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