Italian Simulare telecomando per PowerPoint

ivanomonti

Expert
Licensed User
Longtime User
Ciao tutti, come da titolo devrei simulare un telecomando o la pressione dei tasti di una app desktop da Android (phone /tablet)

Ma non ho idea di come associare il device alla mia app dektop e per poi simulare i tasti. Chi mi da delle indicazioni a riguardo.

Simile a Basic4Andorid-Brigde per lo sviluppo
 

maxware

Well-Known Member
Licensed User
Longtime User
Ciao Ivano
Magari dico una cazzata
Sul programma desktio fai un ciclo che testa se eseiste in una cartella dei file. Es. 1.txt , 2.txt ecc. ecc. . Se esistono eseguono un qualcosa e poi segano il file.
La cartrella la mappi e la rendi visibile dal cellulare ( non so se con la libreria net poi la puoi vedere ). Se premi un tasto esempio 1 crei un il file 1.txt. Il desktpo lo interetta e cosi' via
L'ho sparata a caso non so nemmeno se sia fattibile lato cellulare
Ciaoo
Mamo
 

ivanomonti

Expert
Licensed User
Longtime User
Ciao Ivano
Magari dico una cazzata
Sul programma desktio fai un ciclo che testa se eseiste in una cartella dei file. Es. 1.txt , 2.txt ecc. ecc. . Se esistono eseguono un qualcosa e poi segano il file.
La cartrella la mappi e la rendi visibile dal cellulare ( non so se con la libreria net poi la puoi vedere ). Se premi un tasto esempio 1 crei un il file 1.txt. Il desktpo lo interetta e cosi' via
L'ho sparata a caso non so nemmeno se sia fattibile lato cellulare
Ciaoo
Mamo

No non e elegante, devo fare questo in parole povere, ma siccome ho bisogno di cambiare il telecomando con un android possibile devo trovare in modo di interfacciare il dispositivo come se fosse una tastiera.
 

ivanomonti

Expert
Licensed User
Longtime User
teamviewer ???

No nulla del genere come TeamViewer, e un semplice telecomando che invia imput da tastiera.

Questo telecomando simula 4 tasti 33,34,19,190 come chr()

esempio in c# nella mia app

B4X:
private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            int caseSwitch = e.KeyValue;
            switch (caseSwitch)
            {
                case 33:
                    if ( xAction != "Registra")
                    {
                        this.label1.Text = "Registra";
                        this.label1.ForeColor = Color.Red;
                        this.xAction = this.label1.Text;
                    }
                    else
                    {
                        this.label1.Text = "Stop";
                        this.label1.ForeColor = Color.Red;
                        this.xAction = this.label1.Text;
                    }
                    break;
                case 34:
                    if (xAction != "Pausa")
                    {
                        this.label1.Text = "Pausa";
                        this.label1.ForeColor = Color.Green;
                        this.xAction = this.label1.Text;
                    }
                    else
                    {
                        this.label1.Text = "Registra";
                        this.label1.ForeColor = Color.Red;
                        this.xAction = this.label1.Text;
                    }
                    break;
                case 16:
                    if (xAction == "Registra")
                    {
                        this.label1.Text = "Cosa desiderate fare, Salvare (Sx) o Annullare (Dx)";
                        xAction = "Alert";
                        return;
                    }
                    
                    if (xAction == "Alert")
                    {
                        this.label1.Text = "Salva";
                        this.label1.ForeColor = Color.Black;
                        this.xAction = this.label1.Text;
                    }
                    
                    if (xAction != "Salva")
                    {
                        this.label1.Text = "Salva";
                        this.label1.ForeColor = Color.Black;
                        this.xAction = this.label1.Text;
                    }

                    break;
                case 190:
                    if (xAction == "Alert")
                    {
                        this.label1.Text = "Annulla";
                        this.label1.ForeColor = Color.Black;
                        this.xAction = this.label1.Text;
                    }

                    if (xAction != "Annulla")
                    {
                        this.label1.Text = "Annulla";
                        this.label1.ForeColor = Color.Blue;
                        this.xAction = this.label1.Text;
                    }
                    else
                    {
                        this.label1.Text = "Riprendi";
                        this.label1.ForeColor = Color.Green;
                        this.xAction = this.label1.Text;
                    }
                    break;
            }
        }

in questo modo basta che premo un tasto dei 4 e ho le mie azioni, ora vorrei riprodurre lo stesso telecomando con Android utilizzando Basic4Android
 

ivanomonti

Expert
Licensed User
Longtime User
quindi se premi il 4 sul cellulare e' come se premessi il 4 sulla tastiera del pc ove gira il programma ?

esatto, o crei delle icone tipo play stop ecc ecc e comandi app, ora sto vedendo se i tasti generali sono standart, se fosse cosi e bene perchè puoi adottare poi questo sorgente per tutte le app tipo powerpoint ecc ecc.

ora il problema e fare interfacciare android con il pc come se fosse una tastiera wi fi.
 

ivanomonti

Expert
Licensed User
Longtime User

ivanomonti

Expert
Licensed User
Longtime User
Secondo me nei tuoi software devi aprire un canale di comunicazione verso l'app android.

Inviato dal mio GT-I9300 con Tapatalk 2

Certo una sorta di server ma non ho idea di come iniziare...:BangHead:
 

Spinter

Active Member
Licensed User
Longtime User
Vediamo se domani ti riesco a fare un esempio:
Io uso server tcp in vb.net ,e client ba4 se vuoi usare i tasti della tastiera devi usare le dx!!
 

ivanomonti

Expert
Licensed User
Longtime User
Vediamo se domani ti riesco a fare un esempio:
Io uso server tcp in vb.net ,e client ba4 se vuoi usare i tasti della tastiera devi usare le dx!!

mi faresti un grande regalo, mi spieghi cos'è dx, io scrivo c# con visualstudio 2010
 

Spinter

Active Member
Licensed User
Longtime User
Dx Scusa scrivo come gli sms!! Dx = Direct X
io purtroppo so solo vb.net!!
Tanto non dovrebbe essere un problema!
 

Attachments

  • B4client.zip
    364.9 KB · Views: 322
  • TCP_Server.zip
    74.2 KB · Views: 292

ivanomonti

Expert
Licensed User
Longtime User
Dx Scusa scrivo come gli sms!! Dx = Direct X
io purtroppo so solo vb.net!!
Tanto non dovrebbe essere un problema!

bene, ho visto il tuo progetto e sembra un buon inizio, ora ci lavoro, anche perchè devo simulare la tastiera e capire come fare.
 

Spinter

Active Member
Licensed User
Longtime User
pero' il problema non è emulare la tastiera!!! quello e facile trovi su internet tutte le funzioni!!
Procedura: simulare eventi di mouse e tastiera nel codice


per me dovresti vedere se il programma che ti serve per interagire ha delle api o una dll per usare il remote!perchè quando tu emuli la tastiera se il programma non è in esecuzione potrebbe agire su altrei programmi.comunque di qualsiasi dubbio chiedi pure!

Con che programma devi interagire?

Come vedi qui!!
B4X:
  Public Sub UpdateHistory(ByVal strmessage As String)
        Dim stringavera As String
        stringavera = strmessage

        TextBox1.Text = ""
        TextBox1.Text = strmessage
        ' MsgBox(strmessage)

If strmessage = 'prova' then


gli faccio fare quello che voglio come nell'esempio tuo!!

end if


    End Sub

B4X:
esempio tuo
case 33:
                    if ( xAction != "Registra")
                    {
                        this.label1.Text = "Registra";
                        this.label1.ForeColor = Color.Red;
                        this.xAction = this.label1.Text;
                    }
                    else
                    {
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
ecco come riscritto il codice in c# e grazie a te spinter ;-) la parte android rimane la medesima che hai postato la parte desktop in c# e qui sottostante con possibile filtro risposte (azione da farsi), da perfezionare ma perfettamente funzionale.

B4X:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace ServerForAndroid
{
    public partial class Form1 : Form
    {
        Thread t1;
        String Rt;

        static String ips;
        static Int32 port = 9986;
        delegate void SetTextCallback(string text);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (((Button)sender).Text == "Start Server")
            {
                ((Button)sender).Text = "Stop Server";
                this.richTextBox1.Text = "Server start...";
                ips = textBox1.Text;
                port = Int32.Parse(textBox2.Text);
                t1 = new Thread(new ThreadStart(Server));
                t1.SetApartmentState(ApartmentState.MTA);
                t1.Start();
            }
            else
            {
                ((Button)sender).Text = "Start Server";
                t1.Interrupt();
                this.richTextBox1.Text = "Server close...";
            }
        }

        // si collega ad un server

        public void Connect()
        {
            String message = "TmJoint";

            try
            {
                // Create a TcpClient.
                // Note, for this client to work you need to have a TcpServer 
                // connected to the same address as specified by the server, port
                // combination.

                TcpClient client = new TcpClient(ips, port);

                // Translate the passed message into ASCII and store it as a Byte array.
                Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);

                // Get a client stream for reading and writing.
                //  Stream stream = client.GetStream();

                NetworkStream stream = client.GetStream();

                // Send the message to the connected TcpServer. 
                stream.Write(data, 0, data.Length);

                Rt = message;

                // Receive the TcpServer.response.

                // Buffer to store the response bytes.
                data = new Byte[256];

                // String to store the response ASCII representation.
                String responseData = String.Empty;

                // Read the first batch of the TcpServer response bytes.
                Int32 bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

                Rt = responseData;

                // Close everything.
                stream.Close();
                client.Close();
            }
            catch (ArgumentNullException e)
            {
                Rt = e.Message;
            }
            catch (SocketException e)
            {
                Rt = e.Message;
            }

            Console.OpenStandardInput();
            Console.Write(Rt);
        }

        // rimane in ascolto come un server

        public void Server()
        {
            TcpListener server = null;

            try
            {
                // Set the TcpListener on port 9986.
                IPAddress localAddr = IPAddress.Parse(ips);

                // TcpListener server = new TcpListener(port);
                server = new TcpListener(localAddr, port);

                // Start listening for client requests.
                server.Start();

                // Buffer for reading data
                Byte[] bytes = new Byte[256];
                String data = null;

                // Enter the listening loop.
                while (true)
                {
                    MessageServer(0,"Waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    // You could also user server.AcceptSocket() here.
                    TcpClient client = server.AcceptTcpClient();
                    MessageServer(0,"Connected!");

                    data = null;

                    // Get a stream object for reading and writing
                    NetworkStream stream = client.GetStream();

                    int i;

                    // Loop to receive all the data sent by the client.
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        // Translate data bytes to a ASCII string.
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                        MessageServer(0,data);

                        // Process the data sent by the client.
                        data = data.ToUpper();

                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                        // Send back a response.
                        stream.Write(msg, 0, msg.Length);
                        MessageServer(1,data);
                    }

                    // Shutdown and end connection
                    client.Close();
                }
            }
            catch (SocketException e)
            {
                MessageServer(0,e.Message);
            }
            finally
            {
                // Stop listening for new clients.
                server.Stop();
            }

            MessageServer(0,"\nHit enter to continue...");
        }

        // filtro risposte ( gestione di action fuori da questo thread )

        public void MessageServer(int action, string message)
        {

            int caseSwitch = action;
            switch (caseSwitch)
            {
                case 0:
                    this.SetText(message);
                    break;
                default:
                    MessageBox.Show(message);
                    break;
            }
        
        }

        // pubblica il risultato nella finestra log

        private void SetText(string text)
        {
            if (this.richTextBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.richTextBox1.Text = this.richTextBox1.Text + Environment.NewLine + text;
            }
        }

    }
}

Grazie davvero mi hai aperto alcune strade con questo aiuto.
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
Ottimo lavoro!!!!

Sono arrivato a buon punto nella quale riesco a fare partire app desktop che mi crea un oscilloscopio e in tempo reale li consegna.

Ottima velocità direi accettabilissima e molto d'impatto, il pc desktop lavora e consegna i dati, android riceve e raffigura i dati tutto in tempo reale.

Ora devo solo lavorare per aspetto grafico, dimenticavo tutto lavora in wi fi ... figo.

Listener.png
 
Top