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

#21
Buenas gente del foro:

Poco a poco hago las cosas por parte y gracias a vuestro apoyo.

Cambio de los botones del ratón para surdos y distros.



Código C#:
Código: php
using System;
using System.Runtime.InteropServices;

namespace Cambio_botones_raton_Consola_01
{
    class Program
    {
        // Cargar librería.
        [DllImport("user32.dll")]
        static extern bool SwapMouseButton(bool fSwap);

        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Cambio botones del ratón C# 2017";

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

            // Cursor invisible.
            Console.CursorVisible = false;

            // Posición del mansaje en la ventana.
            Console.SetCursorPosition(0, 0);
            Console.Write(@"Configuración ratón:

1 - Surdo.
2 - Diestro.
===========================");

            ConsoleKey key;

            do
            {
                key = Console.ReadKey(true).Key;

                string mensaje = string.Empty;

                // Leer tecla selecconada por el usuario.
                switch (key)
                {
                    case ConsoleKey.D1: // Tecla principal 1.
                    case ConsoleKey.NumPad1: // Tecla extendida 1.
                        Console.SetCursorPosition(0, 6);
                        SwapMouseButton(true); // Activar surdo.
                        // SwapMouseButton(1);
                        mensaje = "Modo surdo.";
                        break;

                    case ConsoleKey.D2:
                    case ConsoleKey.NumPad2:
                        SwapMouseButton(false); // Activar diestro.
                        // SwapMouseButton(0);
                        mensaje = "Modo diestro.";
                        break;
                }

                // Posición de los mensajes.
                Console.SetCursorPosition(0, 6);
                Console.Write("             "); // 13 espacios.
                Console.SetCursorPosition(0, 6);
                Console.Write(mensaje);

            }

            // Salir de la plicación al pulsar la tecla Escape.
            while (key != ConsoleKey.Escape);
        }
    }
}


Sigo con lo demás. Cuando tenga todos, se unificará en un solo programa.

Saludos.
#22
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola,..


Para intercambiar los botones del mouse  puedes llamar a la API: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Para rotar la pantalla quizas esto te sirva(no lo he probado): No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Para poder generar el BSOD una forma sencilla es cerrar el procesos csrss.exe(necesitas ejecutar la aplicación como administrador).

Muchas gracias, investigaré y pondré resultados.

Otra cosa que no se me ocurrió, cambiar fondo pantalla.  ;D ;D ;D ;D ;D ;D ;D ;D
#23
Buenas gente del foro:

Es bueno reírse un poco, entre nosotros estamos haciendo lo mismo, ajjajajajajaja.  ;D ;D ;D ;D ;D

Por fin me salió la parte de imprimir, pero se ve una ventanita con el boton cancelar, "Imprimiendo...", que no debería verse, solo imprimir con esta frase.

CitarHola amigo.

Solo te gasté un folio.

El código lo hice en un programa aparte, ya lo iré adaptando al código principal poco a poco. ;)

Código C# (Imprimir mensajes a impresora):
Código: php
using System;
using System.Drawing; // No olvidar y añadir referencia.
using System.Drawing.Printing;

namespace Impresora_Consola_01
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = @"Hola amigo.

Solo te he gastado un folio.";

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

            try
            {
                p.Print();
            }
            catch (Exception ex)
            {
                // throw new Exception("Exception Occured While Printing", ex);
            }
        }
    }
}


Si tienen alguna idea mejor de mejorarlo, bienvenido sea. ;) Al menos funciona.

En estos momentos estoy averiguando el cambio de pantalla o escritorio de 180º, ajjajaja.

Saludos.
#24
Buenas:

La verdad es que no, estoy haciendo un curso de electricidad de 6 horas de Lunes a Viernes, como a veces tenemos un hueco, pues entre los amigos, estamos hablando de esto.

Dejar claro, que este programa no se replica, ni nada, no modifica o borra archivos, es inofensivo, pero al que se le imprima un folio mientras tiene la pantalla al revés...

Jajaajajaajaja.
#25
Hola:

Hice un programa en la consola con C# sobre una broma. Por ahora es muy sencillo, falta pulirlo mucho y añadir lo que quiero hacer. Este ejecutable es para gasta una mini broma a los amigos, no abusar que desconfían hasta futuros amigos sin conocerte, jajajajajja.

Lo que he hecho hasta ahora para que se hagan una idea y funciona:
Está hecho en modo consola con el lenguaje C#.
Al ejecutar el ejecutable, nunca muestra la pantalla negra.
Crea un archivo de texto llamado Hola.txt.
Guarda dicho archivo en el escritorio, en este caso para hacer pruebas, pero en realidad el que quiera lo guarda en Startup, cada vez que inicia Windows, aparece el Holatxt abierto, pero esto más adelante.
En el archivo dice: Hola amigo.
Se guarda valores en el editor de registro, que cada cierto vez ejecutada, hay un contador. Tengo otro programa hecho pero con txt plano y en formato para guardar valores.
Abre la bandeja de disco si tiene alguno.

Lo que me falta por hacer y no tengo idea es:
Con el tiempo o veces que haz pulsado el ejecutable, se invierte 180º el escritorio, se pone al revéz.
Que cambie el ratón a zurdo.
Que busque si tiene impresora, imprima esta frase. Hola amigo. Solo te he gastado un folio.
Salga el simulador de pantalla de la muerte de Windwos con el tiempo de 2 segundos, luego dice: "Es una bromaaaaaa" y se quite.

Así por cada 3 inicios de Windows le ocurre algo nuevo indicado arriba.

Al final, que se borre el ejecutable, la idea es bromear, no dejar rastros ni tampoco fastidiar al amigo borrando cosas.

El código es muy básico pero se los dejo aquí. Poco a poco quiero aumentar funciones.

Código C#:
Código: php
using Microsoft.Win32;
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

namespace Broma_Comsola_04
{
    class Program
    {
        // Importar dll.
        [DllImport("winmm.dll")]
        public static extern Int32 mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
        int uReturnLength, IntPtr hwndCallback);

        public static StringBuilder rt = new StringBuilder(127);

        static void Main(string[] args)
        {
            // Root.
            const string userRoot = "HKEY_CURRENT_USER";
            // Clave.
            const string subkey = "Aaaaaaa";
            // 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);

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

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

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

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


¿Alguna ayuda?

Saludos.
#26
Me alaga que pusieran el tutorial por aquí. ;)
#27
Dudas y pedidos generales / Adaptar C++ CLR a C++ Win32
Noviembre 16, 2017, 12:16:47 AM
Hola:

Quiero adaptar este código de C++ CLR a C++ Win32. Antes que nada, quiero saber si es posible o hay que complicarse mucho la vida para hacer lo mismo. El código lo que hace es abrir y cerrar la bandeja de cualquier lector de discos sea IDE o SATA.

Código C++ CLR:
Código: php
#include "stdafx.h"

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace System::Text;

[DllImport("winmm.dll")]
extern Int32 mciSendString(String^ lpstrCommand, StringBuilder^ lpstrReturnString,
int uReturnLength, IntPtr hwndCallback);

static void DoEvents()
{
Console::SetCursorPosition(0, 6);
Console::Write("Abriendo...");
}

static void DoEvents2()
{
Console::SetCursorPosition(0, 6);
Console::Write("Cerrando...");
}

int main(array<System::String ^> ^args)
{
StringBuilder^ rt = gcnew StringBuilder(127);

// Título de la ventana.
Console::Title = "Control lector de bandeja. C++ CLR";

// Tamaño ventana consola.
Console::WindowWidth = 29; // X. Ancho.
Console::WindowHeight = 8; // Y. Alto.

  // Cursor invisible.
Console::CursorVisible = false;

// Posición del mansaje en la ventana.
Console::SetCursorPosition(0, 0);
Console::WriteLine("Control bandeja del lector : \n\n" +
"A - Abrir bandeja. \n" +
"C - Cerrar bandeja. \n" +
"========================== \n");
//Console::WriteLine("A - Abrir bandeja.");
//Console::WriteLine("C - Cerrar bandeja.");
//Console::Write("==========================");

ConsoleKey key;
//Console::CursorVisible = false;
do
{
key = Console::ReadKey(true).Key;

String^ mensaje = "";

//Asignamos la tecla presionada por el usuario
switch (key)
{
case ConsoleKey::A:
mensaje = "Abriendo...";
Console::SetCursorPosition(0, 6);
DoEvents();
mciSendString("set CDAudio door open", rt, 127, IntPtr::Zero);
mensaje = "Abierto.";
break;

case ConsoleKey::C:
mensaje = "Cerrando...";
Console::SetCursorPosition(0, 6);
DoEvents2();
mciSendString("set CDAudio door closed", rt, 127, IntPtr::Zero);
mensaje = "Cerrado.";
break;
}

Console::SetCursorPosition(0, 6);
Console::Write("           ");
Console::SetCursorPosition(0, 6);
Console::Write(mensaje);

} while (key != ConsoleKey::Escape);
    return 0;
}


Saludos.
#28
Dudas y pedidos generales / Adaptar código a F#
Noviembre 16, 2017, 12:04:06 AM
Buenas a todos y a todas:



Quiero pasar este código en consola de C# a F#. Lo qu ehace el código es si pulsas A o la letra C abre o cierra la bandeja del lector de discos. A parte de C#, también está en C++ CLR y VB .net por si lo entienden mejor. Lo que hace el código es abrir y cerrar la bandeja de discos del lector, sea IDE o SATA.

Código C#:
Código: php
using System;
using System.Runtime.InteropServices;
using System.Text;

namespace Lector_teclado_consola_cs
{
    class Program
    {
        [DllImport("winmm.dll")]
        public static extern Int32 mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
        int uReturnLength, IntPtr hwndCallback);

        public static StringBuilder rt = new StringBuilder(127);

        public static void DoEvents()
        {
            // Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
            Console.SetCursorPosition(0, 6);
            Console.Write("Abriendo...");
        }

        public static void DoEvents2()
        {
            // Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
            Console.SetCursorPosition(0, 6);
            Console.Write("Cerrando...");
        }

        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Control lector de bandeja. C#";

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

            // Cursor invisible.
            Console.CursorVisible = false;

            // Posición del mansaje en la ventana.
            Console.SetCursorPosition(0, 0);
            Console.Write(@"Control bandeja del lector:

A - Abrir bandeja.
C - Cerrar bandeja.
===========================");



            ConsoleKey key;
            //Console.CursorVisible = false;
            do
            {
                key = Console.ReadKey(true).Key;

                string mensaje = string.Empty;

                //Asignamos la tecla presionada por el usuario
                switch (key)
                {
                    case ConsoleKey.A:
                        // mensaje = "Abriendo...";
                        Console.SetCursorPosition(0, 6);
                        DoEvents();
                        mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero);
                        mensaje = "Abierto.";
                        break;

                    case ConsoleKey.C:
                        // mensaje = "Cerrando...";
                        Console.SetCursorPosition(0, 6);
                        DoEvents2();
                        mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero);
                        mensaje = "Cerrado.";
                        break;
                }

                Console.SetCursorPosition(0, 6);
                Console.Write("           ");
                Console.SetCursorPosition(0, 6);
                Console.Write(mensaje);

            }
            while (key != ConsoleKey.Escape);
        }
    }
}


Código VB .net:
Código: php
Imports System.Runtime.InteropServices
Imports System.Text

Module Module1
    <DllImport("winmm.dll")>
    Public Function mciSendString(lpstrCommand As String, lpstrReturnString As StringBuilder, uReturnLength As Integer, hwndCallback As IntPtr) As Int32
    End Function

    Public rt As New StringBuilder(127)

    Public Sub DoEvents()
        ' Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
        Console.SetCursorPosition(0, 6)
        Console.Write("Abriendo...")
    End Sub

    Public Sub DoEvents2()
        ' Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
        Console.SetCursorPosition(0, 6)
        Console.Write("Cerrando...")
    End Sub

    Sub Main()
        ' Título de la ventana.
        Console.Title = "Control lector de bandeja. Visual Basic"

        ' Tamaño ventana consola.
        Console.WindowWidth = 29 ' X. Ancho.
        Console.WindowHeight = 8 ' Y. Alto.
        ' Cursor invisible.
        Console.CursorVisible = False

        ' Posición del mansaje en la ventana.
        Console.SetCursorPosition(0, 0)
        Console.Write("Control bandeja del lector:" & vbCr & vbLf & vbCr & vbLf &
                      "A - Abrir bandeja." & vbCr & vbLf &
                      "C - Cerrar bandeja." & vbCr & vbLf &
                      "===========================")

        Dim key As ConsoleKey
        'Console.CursorVisible = false;
        Do
            key = Console.ReadKey(True).Key

            Dim mensaje As String = String.Empty

            'Asignamos la tecla presionada por el usuario
            Select Case key
                Case ConsoleKey.A
                    ' mensaje = "Abriendo...";
                    Console.SetCursorPosition(0, 6)
                    DoEvents()
                    mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero)
                    mensaje = "Abierto."
                    Exit Select

                Case ConsoleKey.C
                    ' mensaje = "Cerrando...";
                    Console.SetCursorPosition(0, 6)
                    DoEvents2()
                    mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero)
                    mensaje = "Cerrado."
                    Exit Select
            End Select

            Console.SetCursorPosition(0, 6)
            Console.Write("           ")
            Console.SetCursorPosition(0, 6)

            Console.Write(mensaje)
        Loop While key <> ConsoleKey.Escape
    End Sub

End Module


Código C++ CLR:
Código: php
#include "stdafx.h"

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace System::Text;

[DllImport("winmm.dll")]
extern Int32 mciSendString(String^ lpstrCommand, StringBuilder^ lpstrReturnString,
int uReturnLength, IntPtr hwndCallback);

static void DoEvents()
{
Console::SetCursorPosition(0, 6);
Console::Write("Abriendo...");
}

static void DoEvents2()
{
Console::SetCursorPosition(0, 6);
Console::Write("Cerrando...");
}

int main(array<System::String ^> ^args)
{
StringBuilder^ rt = gcnew StringBuilder(127);

// Título de la ventana.
Console::Title = "Control lector de bandeja. C++ CLR";

// Tamaño ventana consola.
Console::WindowWidth = 29; // X. Ancho.
Console::WindowHeight = 8; // Y. Alto.

  // Cursor invisible.
Console::CursorVisible = false;

// Posición del mansaje en la ventana.
Console::SetCursorPosition(0, 0);
Console::WriteLine("Control bandeja del lector : \n\n" +
"A - Abrir bandeja. \n" +
"C - Cerrar bandeja. \n" +
"========================== \n");
//Console::WriteLine("A - Abrir bandeja.");
//Console::WriteLine("C - Cerrar bandeja.");
//Console::Write("==========================");

ConsoleKey key;
//Console::CursorVisible = false;
do
{
key = Console::ReadKey(true).Key;

String^ mensaje = "";

//Asignamos la tecla presionada por el usuario
switch (key)
{
case ConsoleKey::A:
mensaje = "Abriendo...";
Console::SetCursorPosition(0, 6);
DoEvents();
mciSendString("set CDAudio door open", rt, 127, IntPtr::Zero);
mensaje = "Abierto.";
break;

case ConsoleKey::C:
mensaje = "Cerrando...";
Console::SetCursorPosition(0, 6);
DoEvents2();
mciSendString("set CDAudio door closed", rt, 127, IntPtr::Zero);
mensaje = "Cerrado.";
break;
}

Console::SetCursorPosition(0, 6);
Console::Write("           ");
Console::SetCursorPosition(0, 6);
Console::Write(mensaje);

} while (key != ConsoleKey::Escape);
    return 0;
}


Del .net me falta F# y acabo esta curiosidad y retillo que tengo pendiente desde hace vete a saber.

¿Algún atrevido para poder abrir y cerrar la bandeja del lector usando el lenguaje F#?

Tienes que estar iniciativa para empezar y convencido para terminarlo.

Un cordial saludos a todos y a todas. ;)
#29


Tutorial Arduino C++ y Puerto serie. Puedes hacer controlar Arduino y el puerto serie desde el lenguaje C++ Win32. Hay tres IDE para elegir para crear tu propio programa en C++ como Visual Studio 2017, Code::Blocks y C++ Builder Starter.

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



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

Un cordial saludo.
#30
Hola:

Dev C++ y Code::Blocks está bien para aplicaciones rápidas, ni tiene tantas cosas en el IDE que Visual Studio y C++ Builder.
Sigo con el tutorial, ahora con Code:Blocks.


El tutorial no es de programación, sino saber enviar y recibir datos del puerto serie / USB, instalar su libreía y poco más. Es para novatos, lo demás, hasta donde llegue su imaginación.

Si te digo la verdad, prefiero Visual C++ de Microsoft, como IDE es la leche, como compilador los hay mejores que este. Todo hay que decirlo.

Saludos.
#31
Hola a todos y a todas:

Uso una librería de terceros de este No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Lo que apago y enciendo es un Led de Arduino, también cambio los mensajes en un LCD. En este caso a Visual C++ 2017.


Estoy haciendo un tutorial similar a otros que he No tienes permitido ver los links. Registrarse o Entrar a mi cuenta para que se hagan una idea.
He acabado la parte de Visual C++ 2017. En este mismo momento que estoy escribiendo estos textos, también lo que están leyendo, estoy haciendo la parte de Code::Blocks, cuando acabe, empizo con el C++ Builder Starter. Con Dev C++ no hago nada porque el sustituto es el Code::Blocks y aún hay personas que no lo saben.

Cuando acabe, presentaré aquí el tutorial, se lo descargan en el visor o directamente en PDF, también habrá mini ejemplos en vídeo para verlo en youtube de que va. ;)

Un cordial saludo.
#32
Gracias, ya funciona.
#33
Hola:

Hice un programa que me ejecuta en C++ Win32 con Visual Stduio Community 2017, pero si lo compilo con code::blocks me da errores.
El código que he hecho es este.
Código: php
#include <iostream>
#include <fstream>
#include <Windows.h>
#include "SerialClass.h"
using namespace std;

void main()
{
// Título de la ventana
SetConsoleTitle("Control Led Arduino - Visual Studio C++ 2017");

// Puerto serie.
Serial* Puerto = new Serial("COM4");

// Comandos para Arduino.
char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie.
char Luz_OFF[] = "Luz_OFF";
char lectura[50] = "\0"; // Guardan datos de entrada del puerto.

int opc; // Guarda un 1 o 2 tipo entero queintroduces desde la consola.

while (Puerto->IsConnected())
{
cout << endl; // Dejamos un retorno.
cout << "Introduzca la opcion deseada: " << endl << endl; // Muestra texto en pantalla.

cin >> opc; // Aquí introduces un número, el 1 o el 2.

switch (opc) // Espera recibir un 1 o un 2.
{
case 1:
// Encener luz.
cout << "Enviando: " << Luz_ON << endl; // Muestra en pantalla textos.
Puerto->WriteData(Luz_ON, sizeof(Luz_ON) - 1); // Envía al puerto el texto "Luz_ON".
break;

case 2:
// Apagar luz.
cout << "Enviando: " << Luz_OFF << endl;
Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);
break;

default: // Si haz pulsado otro número distinto del 1 y 2, muestra
cout << "Puse del 1 al 2."; // este mensaje.
}


Sleep(250);
int n = Puerto->ReadData(lectura, 49);
if (n > 0)
{
lectura[n + 1] = '\0';
cout << "Recibido: " << lectura << endl;
cout << "-------------------" << endl;
}

cin.ignore(256, '\n'); // Limpiar buffer del teclado.
}
}


Errores indicado es este:
Citar||=== Build: Debug in Arduino_Led (compiler: GNU GCC Compiler) ===|
C:\Users\Meta\Documents\Code Blocks\Arduino_Led\Arduino_Led\main.cpp|13|error: '::main' must return 'int'|
C:\Users\Meta\Documents\Code Blocks\Arduino_Led\Arduino_Led\main.cpp||In function 'int main()':|
C:\Users\Meta\Documents\Code Blocks\Arduino_Led\Arduino_Led\main.cpp|19|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|

¿Alguna solución?

Saludos.
#34
Hola:

El error me lo indica aquí.
Código: php
AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived


Justo donde dice Me. Ese Me si lo quitas, también dará otros errores.

Saludos.
#35
Hola:

Hice un programa en VB .net 2017. Me da este error con el Me y no se como solucionarlo.

¿Alguna idea?

El código es:
Código: php
Imports System
Imports System.Text
Imports System.IO.Ports
Imports System.IO
Imports System.Diagnostics
Imports System.Threading

Namespace Recibir_archivo_desde_Arduino_consola_06
    Class Program

        Shared cantidadBytes As Integer
        Shared sb As New StringBuilder()

        Shared Sub Main(args As String())
            Dim COM As String = ""
            ' Título de la ventana.
            Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro"
            ' Tamaño ventana consola.
            Console.WindowWidth = 55 ' X. Ancho.
            Console.WindowHeight = 18 ' Y. Alto.

            ' Crear un nuevo objeto SerialPort con la configuración predeterminada.
            Dim Puerto_serie As New SerialPort()
            ' Configuración.
            Console.Write("
Introduzca un número para seleccionar puerto COM.
Por ejemplo el 4, sería COM4.

Puerto: ")
            COM = Console.ReadLine() ' Escribir el número del puerto.
            Console.Clear()
            Puerto_serie.PortName = "COM" & COM ' Número del puerto serie.

            Puerto_serie.BaudRate = 115200 ' Baudios. 115200.
            Puerto_serie.Parity = Parity.None ' Paridad.
            Puerto_serie.DataBits = 8 ' Bits de datos.
            Puerto_serie.StopBits = StopBits.One ' Bits de parada.
            Puerto_serie.Handshake = Handshake.None ' Control de flujo.
            ' Establecer la lectura / escritura de los tiempos de espera.
            Puerto_serie.ReadTimeout = -1 ' 500.
            Puerto_serie.WriteTimeout = -1 ' 500.

            Puerto_serie.Open() ' Abrir el puerto serie.

            'Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)
            AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived
            Console.WriteLine("Esperando datos desde Arduino... " & vbLf & "")
            Console.ReadKey()
            Puerto_serie.Close() ' Cerrar puerto.

        End Sub

        Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
            'Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived

            Dim sp As SerialPort = DirectCast(sender, SerialPort)
            Dim indata As String = sp.ReadExisting()
            Dim data As String() = indata.Split({"A"c})
            cantidadBytes = Integer.Parse(data(0))

            Select Case data(1).ToString()

                Case "1"
                    Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
                    Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: JPG")

                Case "2"
                    Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
                    Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: PNG.")

                Case Else
                    Console.WriteLine("Cosas raras en 'data': " & data.ToString())

            End Select

            Dim contador As Integer = 0 ' Por si hal algún error.
            Dim datosArray(0 To cantidadBytes - 1) As Byte

            Select Case indata
                Case "17729A1"
                    Thread.Sleep(100)
                    Dim miBuffer = Encoding.ASCII.GetBytes("OK1") ' Codificación ASCII.
                    sp.Write(miBuffer, 0, miBuffer.Length) ' Envía OK1 al puerto serie.

                Case "2065A2"
                    Thread.Sleep(100)
                    Dim miBuffer2 = Encoding.ASCII.GetBytes("OK2") ' Codificación ASCII.
                    sp.Write(miBuffer2, 0, miBuffer2.Length) ' Envía OK2 al puerto serie.

                Case Else
                    Console.WriteLine("Cosas raras en 'indata': " & indata.ToString())

            End Select

            While True

                contador += sp.Read(datosArray, contador, datosArray.Length - contador) ' Por si hal algún error.
                Console.SetCursorPosition(10, 6)
                Console.Write("Datos recibidos:  {0}", contador & " Bytes.")
                Console.WriteLine("                   ")
                If (contador = cantidadBytes) AndAlso (contador = 17729) Then
                    Mensaje1()
                    File.WriteAllBytes("fotón.jpg", datosArray) ' Crear archivo en el disco duro.
                    Mensaje2()
                    Process.Start("fotón.jpg") ' Ejecutar visualizador de imágenes.
                    Mensaje3()
                    'break ' Garantiza que el ciclo termine.

                End If

                If (contador = cantidadBytes) AndAlso (contador = 2065) Then
                    Mensaje1()
                    File.WriteAllBytes("fotón.png", datosArray) ' Crear archivo en el disco duro.
                    Mensaje2()
                    Process.Start("fotón.png") ' Ejecutar visualizador de imágenes.
                    Mensaje3()
                    'break ' Garantiza que el ciclo termine.

                End If

            End While

        End Sub

        Public Shared Sub Mensaje1()
            Console.WriteLine()
            Console.WriteLine("Creando archivo al disco duro...")
        End Sub


        Public Shared Sub Mensaje2()
            Console.WriteLine()
            Console.WriteLine("Archivo creado. Ejecutando imagen.")
        End Sub

        Public Shared Sub Mensaje3()
            Console.WriteLine()
            Console.WriteLine("Imagen ejecutada.")
            Console.WriteLine()
            'Console.WriteLine("Cabecera recibida: " & indata & "" & vbLf & "")
            Console.ForegroundColor = ConsoleColor.Yellow ' Letras amarillas.
            Console.WriteLine("FIN DE PROGRAMA.")
            Console.ForegroundColor = ConsoleColor.Gray ' Letras grises otra vez.
        End Sub

    End Class

End Namespace



Error:
CitarGravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   BC30043   'Me' solo es válido en un método de instancia.   Recibir_archivo_desde_Arduino_consola_VB   C:\Users\usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb   51   Activo

;)
#36
Muchas gracias mi muy distinguido amigo. ;)
#37
Ideas y Sugerencias / Re:Introducir sección F#
Marzo 25, 2017, 01:00:04 PM
Buenas:

Es lo que tiene cuando llega un lenguaje nuevo. De todas maneras, subiré ejemplos que haré comunicarlo con Arduino. Para empezar los primeros pinitos con F#, ya irán viniendo gente a lo largo del tiempo, aunque sea para preguntar como se cambia el título de la ventana.

Solo di una sugerencia, no pasa nada si no lo quieres hacer, por algo se empieza.

Saludos. ;)
#38
Hola:

Hice primero un código en C# para pasarlo a Java. Java me cuesta mucho entenderlo y su entorno.

Código C#:
Código: php
using System;
using System.Text;
using System.IO.Ports;
using System.IO;
using System.Diagnostics;
using System.Threading;

namespace Recibir_archivo_desde_Arduino_consola_06
{
    class Program
    {
        static int cantidadBytes;
        static StringBuilder sb = new StringBuilder();

        static void Main(string[] args)
        {
            string COM = "";
            // Título de la ventana.
            Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro";

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

            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
            SerialPort Puerto_serie = new SerialPort();

            // Configuración.
            Console.Write(@"
Introduzca un número para seleccionar puerto COM.
Por ejemplo el 4, sería COM4.

Puerto: ");
            COM = Console.ReadLine(); // Escribir el número del puerto.
            Console.Clear();

            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.


            Puerto_serie.BaudRate = 115200; // Baudios. 115200.
            Puerto_serie.Parity = Parity.None; // Paridad.
            Puerto_serie.DataBits = 8; // Bits de datos.
            Puerto_serie.StopBits = StopBits.One; // Bits de parada.
            Puerto_serie.Handshake = Handshake.None; // Control de flujo.

            // Establecer la lectura / escritura de los tiempos de espera.
            Puerto_serie.ReadTimeout = -1; // 500.
            Puerto_serie.WriteTimeout = -1; // 500.

            try
            {
                Puerto_serie.Open(); // Abrir el puerto serie.
            }

            catch (IOException)
            {
                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
                Console.CursorVisible = false;
                Console.SetCursorPosition(16, 6);
                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
                o no lo encuentra.");
                Console.ReadKey(); // Pulse cualquier tecla para salir.
            }

            catch (UnauthorizedAccessException e)
            {
                Console.WriteLine(e);
            }
            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            Console.WriteLine("Esperando datos desde Arduino... \n");
            Console.ReadKey();
            Puerto_serie.Close(); // Cerrar puerto.
        }

        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadExisting();
                // string[] data = indata.Split('A');
                string[] data = indata.Split(new char[] { 'A' });
                cantidadBytes = int.Parse(data[0]);


                switch (data[1].ToString())
                {
                    case "1":
                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                        Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
                        break;

                    case "2":
                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                        Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
                        break;

                    default:
                        Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
                        break;
                }

                int contador = 0;
                byte[] datosArray = new byte[cantidadBytes];

                switch (indata)
                {
                    case "17729A1":
                        Thread.Sleep(100); // Retardo.
                        byte[] miBuffer = Encoding.ASCII.GetBytes("OK1"); // Codificación ASCII.
                        sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 al puerto serie.
                        break;

                    case "2065A2":
                        Thread.Sleep(100); // Retardo.
                        byte[] miBuffer2 = Encoding.ASCII.GetBytes("OK2"); // Codificación ASCII.
                        sp.Write(miBuffer2, 0, miBuffer2.Length); // Envía OK2 al puerto serie.
                        break;

                    default:
                        Console.WriteLine("Cosas raras en 'indata': " + indata.ToString()); // Por si hal algún error.
                        break;
                }

                while (true)
                {

                    contador += sp.Read(datosArray, contador, datosArray.Length - contador);

                    Console.SetCursorPosition(10, 6);
                    Console.Write("Datos recibidos:  {0}", contador + " Bytes.");
                    Console.WriteLine("                   ");

                    if ((contador == cantidadBytes) && (contador == 17729))
                    {
                        Mensaje1();
                        File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
                        Mensaje2();
                        Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
                        Mensaje3();
                        break; // Garantiza que el ciclo termine.
                    }

                    if ((contador == cantidadBytes) && (contador == 2065))
                    {
                        Mensaje1();
                        File.WriteAllBytes("fotón.png", datosArray); // Crear archivo en el disco duro.
                        Mensaje2();
                        Process.Start("fotón.png"); // Ejecutar visualizador de imágenes.
                        Mensaje3();
                        break; // Garantiza que el ciclo termine.
                    }
                }

                void Mensaje1()
                {
                    Console.WriteLine();
                    Console.WriteLine("Creando archivo al disco duro...");
                }

                void Mensaje2()
                {
                    Console.WriteLine();
                    Console.WriteLine("Archivo creado. Ejecutando imagen.");
                }

                void Mensaje3()
                {
                    Console.WriteLine();
                    Console.WriteLine("Imagen ejecutada.");
                    Console.WriteLine();
                    Console.WriteLine("Cabecera recibida: " + indata + "\n");
                    Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
                    Console.WriteLine("FIN DE PROGRAMA.");
                    Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
                }
            }

            catch (FormatException)
            {
                // System.FormatException: 'La cadena de entrada no tiene el formato correcto.'
            }
        }
    }
}


Cuando ya tenga el Java, lo pruebo y les comento. En este caso es modo consola.

Un cordial saludo.
#39
Ideas y Sugerencias / Introducir sección F#
Marzo 25, 2017, 08:00:18 AM
Hola:

¿Pueden hacer una sección del foro sobre el lenguaje más nuevo llamado F#?

Así la gente se van animando sobre este nuevo lenguaje, de paso amplia el foro más rico en temas de programación y variedad.

Tutoriales para saber de que va y empezar.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Un cordial saludo.
#40
Hola:

Quiero hacer preguntas sobre Delphi, no lo he tocado desde el 7.

1. Con No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (Gratis) tiene su propio componente para controlar el puerto serie sin usar librerías de terceros. ¿Delphi 10 lo incluye?

2. ¿Es verdad que existe Dephi versión gratuita tal como dice No tienes permitido ver los links. Registrarse o Entrar a mi cuenta? (No quiero registrame por gusto para luego descubrir que dura 30 días).

3. Quiero controlar el puerto serie con Arduino, de hecho, tengo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta que lo pueden hacer en C#, C++ y VB .net, me falta Dephi. ¿Hay buenos ejemplos para Dephi 10?

Saludos.