none
Desactivar puntero del ratón RRS feed

  • Pregunta

  • Hola gente del foro:

    Al ejecutar este programa, se extiende en toda la pantalla. Uso Windows Form. Quiero saber si se puede desactivar el puntero del ratón.

    Para salir de este programa, hay que pulsar Alt + F4, por supuesto, ya se mostrará el puntero del ratón como siempre.

    Este es el código por ahora.

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Apruebalos_a_todos_cs
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                timer1.Start();
            }
    
            void cambioColor()
            {
                this.BackColor = Color.Black; // Formulario negro.
                //this.ForeColor = Color.White; // Cambia textos en blanco.
                label1.ForeColor = Color.White;
            }
    
            void cambioColor2()
            {
                this.BackColor = Color.White; // Formulario blanco.
                //this.ForeColor = Color.Black; // Cambia textos en negro.
                label1.ForeColor = Color.Black;
            }
    
            private void timer1_Tick(object sender, System.EventArgs e)
            { 
                cambioColor();
                timer1.Stop();
                timer2.Start();
            }
    
            private void timer2_Tick(object sender, System.EventArgs e)
            {
                cambioColor2();
                timer2.Stop();
                timer1.Start();
            }
        }
    }

    Saludos.


    http://electronica-pic.blogspot.com

    viernes, 3 de julio de 2020 19:34

Respuestas

  • Solo basta conhacer esto.

            private void Form1_Load(object sender, EventArgs e)
            {
                // Ocultar el cursor del ratón.
                Cursor.Hide();
            }


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta martes, 7 de julio de 2020 19:07
    martes, 7 de julio de 2020 18:57

Todas las respuestas

  • Hola Metaconta ,


    Gracias por levantar tu consulta en los foros de msdn. Podrías probar con esto:


    * Agrégale este código a tu formulario: 


            Rectangle BoundRect;
            Rectangle OldRect = Rectangle.Empty;
    
            private void DisableMouse()
            {
                if (this.Filter == null)
                {
                    this.Filter = new MouseClickMessageFilter();
                    Application.AddMessageFilter(this.Filter);
    
                    //
                    OldRect = Cursor.Clip;
                    // Ubicación Arbitraria
                    BoundRect = new Rectangle(50, 50, 1, 1);
                    Cursor.Clip = BoundRect;
                    Cursor.Hide();
    
                }
            }
    
            private void EnableMouse()
            {
                if ((this.Filter != null))
                {
                    Application.RemoveMessageFilter(this.Filter);
                    this.Filter = null;
                }
                //
                Cursor.Clip = OldRect;
                Cursor.Show();
    
            }
    
            private MouseClickMessageFilter Filter;
    
            private const int LButtonDown = 0x201;
            private const int LButtonUp = 0x202;
            private const int LButtonDoubleClick = 0x203;
    
            public class MouseClickMessageFilter : IMessageFilter
            {
    
                public bool PreFilterMessage(ref System.Windows.Forms.Message m)
                {
                    try
                    {
                        switch (m.Msg)
                        {
                            case LButtonDown:
                            case LButtonUp:
                            case LButtonDoubleClick:
                                return true;
                            default:
                                return false;
                        }
                    }
                    catch (Exception e) { 
                        return true;
                    }
                }
            }


    Ejemplo de como utilizar los métodos:


            public Form1()
            {
                InitializeComponent();
                
                DisableMouse();
    
                //Aquí se crea un cronometro que reactiva el mouse después de 15 segundos
                System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
                t.Interval = 15000; // 15 segundos
                t.Tick += new EventHandler(timer_Tick);
                t.Start();
                void timer_Tick(object sender, EventArgs e)
                {
                    EnableMouse();
                    t.Stop();
                }
    
            }

    Este código:

    * Ocultará el cursor.

    * Hará para que no se pueda mover.

    * Le deshabilitará los botones derecho e izquierdo.


    Espero que sea lo que estabas buscando.


    Saludos cordiales

     

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    viernes, 3 de julio de 2020 23:34
    Moderador
  • No te había leído hasta ahora mismo.

    ¿Qué significa esto que me pusiste?

    * haz que tu formulario implemente IMessageFilter.

    Gracias.


    http://electronica-pic.blogspot.com

    lunes, 6 de julio de 2020 18:43
  • He intentado hacerlo y no desaparece el puntero del ratón.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Matalos_a_todos_cs
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                timer1.Start();
            }
    
            Rectangle BoundRect;
            Rectangle OldRect = Rectangle.Empty;
    
            private void EnableMouse()
            {
                Cursor.Clip = OldRect;
                Cursor.Show();
                Application.RemoveMessageFilter((IMessageFilter)this);
            }
            public bool PreFilterMessage(ref Message m)
            {
                if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203) return true;
                if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true;
                return false;
            }
            private void DisableMouse()
            {
                OldRect = Cursor.Clip;
                // Ubicación Arbitraria
                BoundRect = new Rectangle(50, 50, 1, 1);
                Cursor.Clip = BoundRect;
                Cursor.Hide();
                Application.AddMessageFilter((IMessageFilter)this);
            }
    
            void cambioColor()
            {
                this.BackColor = Color.Black; // Formulario negro.
                //this.ForeColor = Color.White; // Cambia textos en blanco.
                label1.ForeColor = Color.White;
            }
    
            void cambioColor2()
            {
                this.BackColor = Color.White; // Formulario blanco.
                //this.ForeColor = Color.Black; // Cambia textos en negro.
                label1.ForeColor = Color.Black;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                cambioColor();
                timer1.Stop();
                timer2.Start();
            }
    
            private void timer2_Tick(object sender, EventArgs e)
            {
                cambioColor2();
                timer2.Stop();
                timer1.Start();
            }
        }
    }
    


    http://electronica-pic.blogspot.com

    lunes, 6 de julio de 2020 19:07
  • Solo basta conhacer esto.

            private void Form1_Load(object sender, EventArgs e)
            {
                // Ocultar el cursor del ratón.
                Cursor.Hide();
            }


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta martes, 7 de julio de 2020 19:07
    martes, 7 de julio de 2020 18:57
  • Hola Metaconta,

    El código que te di sí funciona, lo que pasa es que nunca lo llamaste dentro de tu código y no implementaste IMessageFilter. Vi que solucionaste tu problema, sin embargo, con lo que hiciste no desactivaste el mouse del todo, solo lo hiciste invisible, pero aunque no se pueda ver, todavía se puede dar clic  y moverlo (método Cursor.Hide). En caso de que lo que ocupas sea desactivarlo del todo,  edité mi respuesta original implementando lo necesario. A como quedó, ya lo puedes copiar y pegar, simplemente recuerda llamar a las funciones en tu código. En el ejemplo que puse de como llamarlas, introduje la reactivación del mouse dentro de un cronometro para que se reactive a los 15 segundos, ya que puede llegar a ser muy molesto no disponer del mouse si se presenta alguna eventualidad.


    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    martes, 7 de julio de 2020 20:52
    Moderador