Bir*_*ora 1 c++ mouse winapi msdn
为什么执行以下程序后鼠标速度没有变化?
是由于SPI_SETMOUSESPEED还是由于无法通过SPIF_UPDATEINIFILE,SPIF_SENDCHANGE和SPIF_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;
}
Run Code Online (Sandbox Code Playgroud)
您在传递错误的价值pvParam的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
);
Run Code Online (Sandbox Code Playgroud)