1

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

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

编译器: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;
}
4

1 回答 1

7

您传递了错误的值pvParamfor SPI_SETMOUSESPEED。从文档中:

设置当前鼠标速度。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) newMouseSpeed,
    SPIF_UPDATEINIFILE | SPIF_SENDCHANGE | SPIF_SENDWININICHANGE
);
于 2013-05-30T11:53:49.203 回答