【问题标题】:Mouse speed not changing by using SPI_SETMOUSESPEED使用 SPI_SETMOUSESPEED 不会改变鼠标速度
【发布时间】:2013-05-29 12:15:31
【问题描述】:

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

是由于 SPI_SETMOUSESPEED 还是由于 SPIF_UPDATEINIFILESPIF_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;
}

【问题讨论】:

  • 你并不孤单,看起来有人喜欢我的图标:stackoverflow.com/questions/9848423/…
  • SystemParametersInfo 返回什么(真或假)?如果返回false,检查GetLastError()返回的错误号,这可能会给你一个线索。
  • 我试过了,但没用。
  • @chris : 您的 SPI_SETMOUSE 工作正常,请参阅...stackoverflow.com/a/16814574/2153564
  • @birajbora,呵呵。那是一年多以前的事了,我只记得尝试了一些东西,看到数字变化,但看不到速度变化。

标签: c++ winapi mouse msdn


【解决方案1】:

您将错误的值作为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) newMouseSpeed,
    SPIF_UPDATEINIFILE | SPIF_SENDCHANGE | SPIF_SENDWININICHANGE
);

【讨论】:

  • 不要使用||(逻辑或)运算符来组合标志位。请改用| (BITWISE OR) 运算符。 SPIF_UPDATEINIFILE || SPIF_SENDCHANGE || SPIF_SENDWININICHANGE 的计算结果为 true,当转换为整数时,它本身就是 SPIF_UPDATEINIFILE (0x01)。
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 2012-04-16
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
相关资源
最近更新 更多