2010-05-28 4 views
4

Guys, j'ai une application C# Winforms avec un panneau à l'intérieur du formulaire. Ce que je veux faire est, chaque fois que le pointeur de la souris entre dans ce panneau, je veux ralentir la vitesse de déplacement de la souris de 50%. Une fois que le pointeur se déplace en dehors de ce panneau, je veux que la vitesse de la souris reprenne sa vitesse normale à 100%. Comment puis-je accomplir cela en C#?Vitesse changeante de la souris

Répondre

3

This article pourrait aider

Voici le code de l'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); 
     } 
    } 
} 
+1

+1 pour l'article. Pour icemanind: il suffit d'appeler la fonction spécifiée dans cet article sur les événements "Enter" et "Leave", plus lentement lorsque le contrôle est entré et plus rapide lorsque vous quittez le contrôle, et cela devrait fonctionner. –

+0

Parfait. Merci pour l'aide! – Icemanind

0
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"); 
       } 

      } 

     } 


    } 

} 
Questions connexes