使用SPI_SETMOUSESPEED不会改变鼠标速度

时间:2013-05-29 12:15:32

标签: c++ winapi mouse msdn

为什么执行以下程序后鼠标速度没有变化?

是由于 SPI_SETMOUSESPEED 还是由于无法通过 SPIF_UPDATEINIFILE SPIF_SENDCHANGE 更改 winini 文件, SPIF_SENDCHANGE 参数?

编译器: g ++ ,操作系统: Windows 8

#include <iostream>
#include <windows.h>
#include<winuser.h>
#pragma comment(lib, "user32.lib")

using namespace std ;

int main()
{
    int i = 0 , *MouseSpeed = &i ;

    bool x ;

//  Retrieving the mouse speed . 

    x = SystemParametersInfo( SPI_GETMOUSESPEED , 0 , MouseSpeed , 0 ) ;

    cout<<"\n\nPrevious Mouse Speed was : " << *MouseSpeed ;

    cout<<"\n\nSystemParametersInfo return status for SPI_GETMOUSESPEED : " << x ;

    if( x )
    {
        i = 20 ;

        MouseSpeed = &i ;

//  Changing the mouse speed .

        SystemParametersInfo( SPI_SETMOUSESPEED ,
                              0 ,
                              MouseSpeed ,
                              SPIF_UPDATEINIFILE ||
                              SPIF_SENDCHANGE ||
                              SPIF_SENDWININICHANGE ) ;

        cout<<"\n\nCurrent Mouse Speed is : " << *MouseSpeed ;

        cout<<"\n\nSystemParametersInfo return status for SPI_SETMOUSESPEED : " << x << "\n\n" ;
    }

    if( !x )        
        cout<< "Error Status : " << GetLastError() << "\n\n";

    return 0;
}

1 个答案:

答案 0 :(得分:5)

您为pvParam传递的错误值为SPI_SETMOUSESPEED。来自documentation

  

设置当前鼠标速度。 pvParam参数是一个整数   介于1(最慢)和20(最快)之间。值10是默认值。   通常使用鼠标控制面板应用程序设置此值。

将其与SPI_GETMOUSESPEED

的文档进行比较
  

检索当前鼠标速度。鼠标速度决定了多远   指针将根据鼠标移动的距离移动。该    pvParam参数必须指向一个整数,它接收的值介于1(最慢)和20(最快)之间。值10是   默认。最终用户可以使用鼠标设置该值   控制面板应用程序或使用的应用程序   SPI_SETMOUSESPEED。

因此,对于SPI_GETMOUSESPEED,您必须将int*值传递为pvParam,但对于SPI_SETMOUSESPEED,您必须传递int值。在这两种情况下,您都传递int*。您对SPI_SETMOUSESPED的致电应该是:

SystemParametersInfo( SPI_SETMOUSESPEED ,
                          0 ,
                          (LPVOID)i,
                          SPIF_UPDATEINIFILE ||
                          SPIF_SENDCHANGE ||
                          SPIF_SENDWININICHANGE ) ;