C# 动态更改鼠标速度

C# 动态更改鼠标速度,c#,winforms,panel,C#,Winforms,Panel,伙计们,我有一个C#Winforms应用程序,里面有一个面板。我想做的是,每当鼠标指针进入这个面板时,我想将鼠标的移动速度降低50%。一旦指针移到这个面板外,我希望鼠标的速度恢复到正常的100%速度。如何在C#中实现这一点?这篇文章可能会有所帮助 以下是文章中的代码: using System; using System.Runtime.InteropServices; namespace MouseSpeedSwitcher { class Program {

伙计们,我有一个C#Winforms应用程序,里面有一个面板。我想做的是,每当鼠标指针进入这个面板时,我想将鼠标的移动速度降低50%。一旦指针移到这个面板外,我希望鼠标的速度恢复到正常的100%速度。如何在C#中实现这一点?

这篇文章可能会有所帮助

以下是文章中的代码:

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);
        }
    }
}
使用System.Collections.Generic;
使用System.Linq;
使用System.Runtime.InteropServices;
使用系统文本;
使用System.Threading.Tasks;
命名空间控制台应用程序1
{
班级计划
{
公共警察UInt32 SPI_GETMOUSESPEED=0x0070;
const UInt32 SPIF_UPDATEINIFILE=0x01;
const UInt32 SPIF_sendwinichange=0x02;
[DllImport(“User32.dll”)]
静态外部布尔系统参数INFO(
UInt32 uiAction,
UInt32 uiParam,
IntPtr pvParam,
UInt32(fWinIni);
静态不安全void Main(字符串[]args)
{
MouseOptions m=新的MouseOptions();
GetDefaults();
整数速度;
系统参数信息(SPI_GETMOUSESPEED,0,新IntPtr和speed,0);
控制台写入线(速度);
SetDefaults();
系统参数信息(SPI_GETMOUSESPEED,0,新IntPtr和speed,0);
控制台写入线(速度);
Console.ReadLine();
}
公共类鼠标选项
{
[DllImport(“user32.dll”)]

公共静态外部系统参数INFO(int uAction、int uParam、IntPtr lpvParam、int fuWinIni); [DllImport(“kernel32.dll”)] 公共静态外部int GetLastError(); 公共常数int SPI_GETMOUSESPEED=112; 公共常数int SPI_SETMOUSESPEED=113; 私有静态int intDefaulSpeed=10; 专用静态int电流速度; 私有静态intNewSpeed; 公共静态void GetDefaults() { intCurrentSpeed=GetMouseSpeed(); } 公共静态void SetDefaults() { 如果(intCurrentSpeed==20) { 设置鼠标速度(intDefaulSpeed); } 否则如果(intCurrentSpeed<10) { 设置鼠标速度(intDefaulSpeed); } } 公共静态int GetMouseSpeed() { int速度=0; IntPtr-ptr; ptr=Marshal.alloctaskmem(4); 系统参数sinfo(SPI_GETMOUSESPEED,0,ptr,0); intSpeed=Marshal.ReadInt32(ptr); FreeCoTaskMem元帅(ptr); 返回速度; } 公共静态无效设置鼠标速度(int intSpeed) { IntPtr ptr=新的IntPtr(intSpeed); int b=系统参数sinfo(SPI_SETMOUSESPEED,0,ptr,0); 如果(b==0) { Console.WriteLine(“无法设置速度”); } else如果(b==1) { Console.WriteLine(“成功完成”); } } } } }
由于不太清楚如何使用答案中的代码,我找到了更简洁的改变鼠标速度的解决方案。将此代码添加到要更改速度的类中:

[DllImport("user32.dll", CharSet = CharSet.Auto),]
public static extern int SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);
然后以所需的鼠标速度调用SystemParametersInfo:

//SPEED is an integer value between 0 and 20. 10 is the default.
SystemParametersInfo(113,0,SPEED,0);

不要忘记使用System.Runtime.InteropServices添加

+1。对于icemanind:只需在“Enter”和“Leave”事件上调用本文中指定的函数,输入控件时速度较慢,离开控件时速度较快,它应该可以工作。完美。谢谢你的帮助!嗨,Meghraj,我有同样的要求,但我想在桌面上慢慢移动鼠标光标(我想改变速度)。我正在使用SetCursorPos Win32 API将移动光标设置为所需的点。你能解释更多实现它的方法吗?系统函数上面的public static extern int systemparameters info(int uAction,int uParam,IntPtr lpvParam,int fuWinIni)检索或设置一个系统范围参数的值。此功能还可以在设置参数时更新用户配置文件。要访问此函数/方法,我们需要导入DllImport(“user32.dll”)uAction:-这里我们传递控件操作的常数,在我的例子中,我传递的是常数“SPI_SETMOUSESPEED”下面,用于设置/更改鼠标光标速度“SPI_GETMOUSESPEED”用于获取系统的鼠标光标speeduParam:-一个参数,其用法和格式取决于所查询或设置的系统参数。有关系统范围参数的更多信息,请参阅uiAction参数。如果未另行指示,则必须为此参数指定零。lpvParam-:其用法和格式取决于所查询或设置的系统参数的参数。有关系统范围参数的更多信息,请参阅uiAction参数。如果未另行指示,则必须为此参数指定NULL。有关PVOID数据类型的信息,请参阅Windows数据类型GetDefaults()-此方法用于获取系统当前鼠标光标速度并存储在变量中。如果我想恢复旧值,我可以使用存储的鼠标光标速度SetMouseSpeed(int intSpeed)——我用于设置系统鼠标光标速度的方法。SetDefaults()-我使用此方法恢复系统的鼠标光标速度。@user1915370,请阅读我在上面评论的所有详细信息。仍然有任何疑问,请随时询问
//SPEED is an integer value between 0 and 20. 10 is the default.
SystemParametersInfo(113,0,SPEED,0);