| |
|
71
|
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.txtEn 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.
|
|
|
|
|
73
|
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.
|
|
|
|
|
74
|
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/lesssecureappsCódigo C#: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. 
|
|
|
|
|
75
|
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.
|
|
|
|
|
76
|
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.
|
|
|
|
|
77
|
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í. using System; using System.IO.Ports; using System.Text; using System.Threading; using System.Windows.Forms; namespace Velocímetro_Arduino_Puerto_serie_01 { public partial class Form1 : Form { // Utilizaremos un string como buffer de recepción. string recibidos; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto. try { comboBox_Puerto.DataSource = SerialPort.GetPortNames(); } catch { MessageBox.Show("No encuentra ningún puerto físico ni virtual.", "Aviso:", MessageBoxButtons.OK, MessageBoxIcon.Warning); } // // Añade puertos disponibles físicos y virtuales. serialPort1.PortName = comboBox_Puerto.Text.ToString(); } #region Funciones. void UsbConectado() { byte[] miBuffer = Encoding.ASCII.GetBytes("USB_CONECTADO"); serialPort1.Write(miBuffer, 0, miBuffer.Length); } void UsbDesconectado() { byte[] miBuffer = Encoding.ASCII.GetBytes("USB_DESCONECTADO"); serialPort1.Write(miBuffer, 0, miBuffer.Length); } // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable. protected override void WndProc(ref Message USB) { if (USB.Msg == 0x219) { comboBox_Puerto.DataSource = SerialPort.GetPortNames(); } // Detecta si hay cambios en el usb y si los hay los refleja. base.WndProc(ref USB); } // Procesar los datos recibidos en el buffer y extraer las tramas completas. void Actualizar(object sender, EventArgs e) { // Asignar el valor de la trama al label_Recibir_Km. label_Recibir_Km.Text = recibidos; switch (recibidos) { case "OK": byte[] miBuffer = Encoding.ASCII.GetBytes("Conectado. "); serialPort1.Write(miBuffer, 0, miBuffer.Length); label_Recibir_Km.Text = "Arduino conectado."; break; default: break; } // Limpiar. recibidos = ""; } #endregion #region Botones. private void button_Conectar_Click(object sender, EventArgs e) { try { serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente. serialPort1.Open(); // Abrir puerto. UsbConectado(); comboBox_Puerto.Enabled = false; comboBox_Baudios.Enabled = false; button_Conectar.Enabled = false; button_Desconectar.Enabled = true; button_Enviar.Enabled = true; } catch { MessageBox.Show("El puerto no existe.", "Aviso:", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void button_Desconectar_Click(object sender, EventArgs e) { UsbDesconectado(); serialPort1.Close(); // Cerrar puerto. comboBox_Puerto.Enabled = true; comboBox_Baudios.Enabled = true; button_Conectar.Enabled = true; button_Desconectar.Enabled = false; button_Enviar.Enabled = false; } private void button_Enviar_Click(object sender, EventArgs e) { byte[] miBuffer = Encoding.ASCII.GetBytes("KM" + textBox_Km.Text); serialPort1.Write(miBuffer, 0, miBuffer.Length); } #endregion // Al cerrar el formulario, cierra el puerto si está abierto. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { // Al cerrar este programa, indica a Arduino cerrado. // Arduino sigue con su rutina al detectar CERRADO. byte[] miBuffer = Encoding.ASCII.GetBytes("C#_CERRADO"); serialPort1.Write(miBuffer, 0, miBuffer.Length); // Cerrar puerto. serialPort1.Close(); } catch (Exception error) { MessageBox.Show(error.Message, "Aviso:", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { // Acumula los caracteres recibidos a nuestro "buffer" string. recibidos += serialPort1.ReadExisting(); // Invocar o llamar al proceso de tramas. Invoke (new EventHandler (Actualizar )); } } }
|
|
|
|
|
78
|
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.
|
|
|
|
|
79
|
Programación / .NET (C#, VB.NET, ASP) / Escribir bien las tildes, ñ y demás
|
en: 26 Diciembre 2021, 16:28 pm
|
Hola: Quiero hacer este ejemplo y no muestra bien los caracteres en consola. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Codificación_UTF_8_01 { internal class Program { static void Main(string[] args) { #region Configuración ventana. // Título de la ventana. Console.Title = "Encoder UTF-8"; // Tamaño de la ventana, x, y. Console.SetWindowSize(80, 25); // Color de fondo. Console.BackgroundColor = ConsoleColor.Gray; // Color de las letras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla y dejarlo todo gris. Console.Clear(); // Visible el cursor. Console.CursorVisible = true; #endregion // Cree una codificación UTF-8. UTF8Encoding utf8 = new UTF8Encoding (); // Una cadena Unicode con dos caracteres fuera de un rango de código de 8 bits. String unicodeString = "Esta cadena Unicode tiene 2 caracteres fuera del " + "rango ASCII:\n" + "Pi (\u03a0), y Sigma (\u03a3)."; Console.WriteLine("Cadena original:"); Console.WriteLine(unicodeString); // Codifica la cadena. Byte[] encodedBytes = utf8.GetBytes(unicodeString); Console.WriteLine(); Console.WriteLine("Bytes codificados:"); for (int ctr = 0; ctr < encodedBytes.Length; ctr++) { Console.Write("{0:X2} ", encodedBytes[ctr]); if ((ctr + 1) % 25 == 0) Console.WriteLine(); } Console.WriteLine(); // Decodifica bytes de nuevo a cadena. String decodedString = utf8.GetString(encodedBytes); Console.WriteLine(); Console.WriteLine("Bytes decodificados:"); Console.WriteLine(decodedString); // Pulse cualquier tecla para salir. Console.ReadKey(); } } }
Dejo aquí la captura.  Ni copiando el propio código de MicroSoft funciona. Saludos.
|
|
|
|
|
80
|
Programación / .NET (C#, VB.NET, ASP) / ¿Cómo enviar más de 255 letras?
|
en: 26 Diciembre 2021, 02:39 am
|
Buenas: Quiero enviar un email en modo consola que supere los 255 caracteres tal como se hace en cualquier navegador. ¿Es posible hacerlo? Aquí dejo un ejemplo con Ggail. // Activar / desactivar Acceso de aplicaciones poco seguras en Google. // https://myaccount.google.com/lesssecureapps
using System; using System.IO; using System.Net; using System.Net.Mail; using System.Text;
namespace Enviar_email_Consola_07 { internal class Program { static void Main(string[] args) { #region Configuración ventana. // Título de la ventana. Console.Title = "Gestor correo electrónico";
// Tamaño de la ventana, x, y. Console.SetWindowSize(80, 25);
// Color de fondo. Console.BackgroundColor = ConsoleColor.Black;
// Color de las letras. Console.ForegroundColor = ConsoleColor.Gray;
// Limpiar pantalla y dejarlo todo en color de fondo. Console.Clear();
// Visible el cursor. Console.CursorVisible = true; #endregion
// Variables. string usuario, contraseña, destinatario, asunto, mensaje;
// Título del programa. Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine("\t\t\tEnviar Correo Electrónico"); Console.WriteLine("\t\t----------------------------------------");
try { Console.WriteLine("\n"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\t\tTu correo electrónico: "); Console.ForegroundColor = ConsoleColor.Gray; usuario = Console.ReadLine(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\t\tIntroducir contraseña: "); Console.ForegroundColor = ConsoleColor.Gray; contraseña = LeerPassword(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\t\tDestinatario: "); Console.ForegroundColor = ConsoleColor.Gray; destinatario = Console.ReadLine(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\t\tAsunto: "); Console.ForegroundColor = ConsoleColor.Gray; asunto = Console.ReadLine(); Console.WriteLine();
//---------------------------------------------- byte[] bytes = new byte[2000]; // Nuevo tamanho máximo. Stream inputStream = Console.OpenStandardInput(bytes.Length); Console.SetIn(new StreamReader(inputStream)); //----------------------------------------------
Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("\t\tMensaje: "); Console.ForegroundColor = ConsoleColor.Gray; mensaje = Console.ReadLine(); Console.WriteLine();
MailMessage correo = new MailMessage(usuario, destinatario, asunto, mensaje);
SmtpClient servidor = new SmtpClient("smtp.gmail.com") { Port = 587 }; NetworkCredential credenciales = new NetworkCredential(usuario, contraseña); servidor.Credentials = credenciales; servidor.EnableSsl = true;
Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\t\tEnviando correo..."); servidor.Send(correo); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\t\tCorreo enviado satisfactoriamente."); correo.Dispose(); Console.CursorVisible = false; Console.ReadKey(); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("ERROR: \n"); Console.WriteLine("\t\t" + ex.Message); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\t\tNo se ha enviado el correo."); Console.ReadKey(); }
}
// A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla. public static string LeerPassword() { ConsoleKeyInfo cki; StringBuilder sb = new StringBuilder(); int contador = 0;
do { cki = Console.ReadKey(true); if (cki.Key != ConsoleKey.Enter) {
sb.Append(cki.KeyChar); if (contador < 4) { Console.Write("*"); } contador++; }
else { break; }
} while (true); Console.WriteLine(); return sb.ToString(); } } } Felices fiestas camaradas.
|
|
|
|
|
|
| |
|