private void SetClipBoard(object received)
 {
     try
     {
         ClipboardManager cbm = new ClipboardManager(received); //passo l'oggetto al costruttore della classe
         //non so perchè forse perchè non sapevo in che altro modo lanciare il thread
         Thread runThread = new Thread(new ThreadStart(cbm.setData));
         runThread.SetApartmentState(ApartmentState.STA);
         runThread.Start();
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
        private void parseMessage(string buffer)
        {
            //Console.WriteLine("[ [" + buffer + "]");
            String[] commands = buffer.Split(' '); //split incoming message
            if (commands.ElementAt(0).Equals("M")) //mouse movement
            {
                //16 bit è più veloce di 32
                int x = Convert.ToInt16(Double.Parse(commands[1]) * System.Windows.SystemParameters.PrimaryScreenWidth);
                int y = Convert.ToInt16(Double.Parse(commands[2]) * System.Windows.SystemParameters.PrimaryScreenHeight);
                NativeMethods.SetCursorPos(x, y);
            }
            else if(commands.ElementAt(0).ToString().Equals("W")){ //scroll
                int scroll = Convert.ToInt32(commands.ElementAt(1).ToString());
                inputSimulator.Mouse.VerticalScroll(scroll);
            }
            else if (commands.ElementAt(0).ToString().Equals("C")) //click
            {
                if( commands.ElementAt(1).ToString().Equals("WM_LBUTTONDOWN")){
                    inputSimulator.Mouse.LeftButtonDown();
                }
                else if(commands.ElementAt(1).ToString().Equals("WM_LBUTTONUP")){
                    inputSimulator.Mouse.LeftButtonUp();

                }
                else if(commands.ElementAt(1).ToString().Equals("WM_RBUTTONDOWN")){
                    inputSimulator.Mouse.RightButtonDown();
                }
                else if(commands.ElementAt(1).ToString().Equals("WM_RBUTTONUP")){
                    inputSimulator.Mouse.RightButtonUp();
                }

            }
            else if (commands.ElementAt(0).ToString().Equals("K")) //keyboard
            {
                VirtualKeyCode vk = (VirtualKeyCode)Convert.ToInt32(commands.ElementAt(1).ToString());
                if (commands.ElementAt(2).ToString().Equals("DOWN"))
                {
                    inputSimulator.Keyboard.KeyDown(vk); //keydown
                }
                else if (commands.ElementAt(2).ToString().Equals("UP"))
                {
                    inputSimulator.Keyboard.KeyUp(vk); //keyup
                }
            }
            else if (commands.ElementAt(0).ToString().Equals("G")) //used as callback for the clipboard
            {
                Console.WriteLine("Ricevuto : GIMME CLIPBOARD");
                ClipboardManager cb = new ClipboardManager();
                Thread cbSenderThread = new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;
                    //mi connetto al volo
                    if (this.clientCB != null)
                        this.clientCB.Client.Close();
                    this.clientCB = new TcpClient();
                    this.clientCB.Connect(((IPEndPoint)this.client.Client.RemoteEndPoint).Address, 9898); //questo è il client che riceve
                    cb.sendClipBoardFaster(this.clientCB);
                });
                cbSenderThread.SetApartmentState(ApartmentState.STA);
                cbSenderThread.Start();
                cbSenderThread.Join();
                icon.ShowBalloonTip("Clipboard", "La clipboard è stata trasferita al client!", new Hardcodet.Wpf.TaskbarNotification.BalloonIcon());
            }
        }