Dynamically changing Mouse speed

前端 未结 2 716
情深已故
情深已故 2020-12-11 16:06

Guys, I have a C# Winforms application with a panel inside the form. What I want to do is, whenever the mouse pointer enters this panel, I want to slow the movement speed of

相关标签:
2条回答
  • 2020-12-11 16:17

    This article might help

    Here's the code from the article:

    using System;
    using System.Runtime.InteropServices;
    
    namespace MouseSpeedSwitcher
    {
        class Program
        {
            public const UInt32 SPI_SETMOUSESPEED = 0x0071;
    
            [DllImport("User32.dll")]
            static extern Boolean SystemParametersInfo(
                UInt32 uiAction, 
                UInt32 uiParam, 
                UInt32 pvParam,
                UInt32 fWinIni);
    
            static void Main(string[] args)
            {
                SystemParametersInfo(
                    SPI_SETMOUSESPEED, 
                    0, 
                    uint.Parse(args[0]), 
                    0);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-11 16:18
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace ConsoleApplication1
    {
        class Program
        {
            public const UInt32 SPI_GETMOUSESPEED = 0x0070;
    
    
            const UInt32 SPIF_UPDATEINIFILE = 0x01;
            const UInt32 SPIF_SENDWININICHANGE = 0x02;
    
            [DllImport("User32.dll")]
            static extern Boolean SystemParametersInfo(
                UInt32 uiAction,
                UInt32 uiParam,
                IntPtr pvParam,
                UInt32 fWinIni);
    
            static unsafe void Main(string[] args)
            {
               MouseOptions m = new MouseOptions();
    
                MouseOptions.GetDefaults();
                int speed;
                SystemParametersInfo(SPI_GETMOUSESPEED, 0, new IntPtr(&speed), 0);
                Console.WriteLine(speed);
    
                MouseOptions.SetDefaults();
    
    
                SystemParametersInfo(SPI_GETMOUSESPEED, 0, new IntPtr(&speed), 0);
                Console.WriteLine(speed);
    
    
                Console.ReadLine();
            }
    
    
    
            public class MouseOptions
            {
                [DllImport("user32.dll")]
                public static extern int SystemParametersInfo( int uAction, int uParam, IntPtr lpvParam, int fuWinIni );
    
                [DllImport("kernel32.dll")]
                public static extern int GetLastError();
    
                public const int SPI_GETMOUSESPEED = 112;
                public const int SPI_SETMOUSESPEED = 113;
    
    
                private static int intDefaulSpeed = 10;
                private static int intCurrentSpeed;
                private static int intNewSpeed;
    
                public static void GetDefaults()
                {
                    intCurrentSpeed = GetMouseSpeed();
                }
                public static void SetDefaults()
                {
                    if ( intCurrentSpeed == 20 )
                    {
                        SetMouseSpeed(intDefaulSpeed); 
                    }
                    else if ( intCurrentSpeed < 10 )
                    {
                        SetMouseSpeed(intDefaulSpeed);   
                    }
                }
    
                public static int GetMouseSpeed()
                {
                    int intSpeed = 0;
                    IntPtr ptr;
                    ptr = Marshal.AllocCoTaskMem(4);
                    SystemParametersInfo(SPI_GETMOUSESPEED, 0, ptr, 0);
                    intSpeed = Marshal.ReadInt32(ptr);
                    Marshal.FreeCoTaskMem(ptr);
    
                    return intSpeed;
                }
    
                public static void SetMouseSpeed( int intSpeed )
                {
                    IntPtr ptr = new IntPtr(intSpeed);
    
                    int b = SystemParametersInfo(SPI_SETMOUSESPEED, 0, ptr, 0);
    
                    if (b == 0)
                    {
                        Console.WriteLine("Not able to set speed");
                    }
                    else if ( b == 1 )
                    {
                        Console.WriteLine("Successfully done");
                    }
    
                }
    
            }
    
    
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题