如何调整鼠标速度?(我用了一个星期,竟然找不到解决方法!!!) (200分)

  • 主题发起人 主题发起人 cSofter
  • 开始时间 开始时间
C

cSofter

Unregistered / Unconfirmed
GUEST, unregistred user!
用systemparametersinfo的话, SPI_SETSPEED其实是设置加速的,<br>SPI_SETMOUSESEED在光盘版本的MSDN上说,98和NT都支持,但微软的在线MSDN<br>站点上查出的资料却说NT不支持!!! 而在2000下实际使用,也是毫无效果。<br>更改注册表,好像有点用,但一定要重启动,作不到象控制面板中鼠标设定<br>那样的即时生效。<br><br>这个问题竟然这么难?
 
SystemParametersInfo(SPI_SETMOUSESPEED, 0, @Value, UpdateFlag); <br>1-20, 不知你是不是設置了準确的值!<br><br>如果你是設置注冊表的話, 還要發送一條消息, 通知系統更新了!<br>我一時記不起這個消息如何寫!<br>我的 email: aiirii@21cn.com
 
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);<br>找到了!
 
2000下根本没有api来设定这个mouse sensitivity的值(或许我还不知道?希望如此)。因为在线的MSDN上明确说明2000下的 SystemParametersInfo 不支持 SPI_SETMOUSESPEED 这个参数。
 
我用spy++ 查了一下,当你在控制面板中调整鼠标的速度,尽管鼠标<br>速度已经改变了(可以通过移动鼠标感觉出来),但并没有任何消息发送出来
 
应该使用SPI_SETMOUSE标记,但它需要使用array [0..2] of integer作为参数,我刚才稍微调试了一下,还没调试好,我现在要干别的事情了,干脆大伙一起调试吧!<br><br>以下摘自delphi帮助文件:<br>The SystemParametersInfo function queries or sets systemwide parameters. This function can also update the user profile while setting a parameter. <br><br>BOOL SystemParametersInfo(<br><br>&nbsp; &nbsp; UINT uiAction, // system parameter to query or set<br>&nbsp; &nbsp; UINT uiParam, // depends on action to be taken<br>&nbsp; &nbsp; PVOID pvParam, // depends on action to be taken<br>&nbsp; &nbsp; UINT fWinIni // user profile update flag<br>&nbsp; &nbsp;); <br><br>SPI_GETMOUSE Retrieves the two mouse threshold values and the mouse speed. The pvParam parameter must point to an array of three integers that receives these values. See mouse_event for further information. <br><br>SPI_SETMOUSE Sets the two mouse threshold values and the mouse speed. The pvParam parameter must point to an array of three integers that specifies these values. See mouse_event for further information. <br><br>以下摘自delphi中mouse_event帮助:<br>Relative mouse motion is subject to the effects of the mouse speed and the two mouse threshold values. In Windows NT, an end user sets these three values with the Mouse Tracking Speed slider of Control Panel's Mouse option; in Windows 95, an end user sets them with the Pointer Speed slider of the Control Panel's Mouse property sheet. An application obtains and sets these values with the SystemParametersInfo function. <br>&nbsp;
 
var<br>Form1:TForm1;<br>OSpeed:Word;//光标闪烁的原始速度<br>CSpeed:Word;//光标闪烁的当前速度<br>implementation<br>...<br>3)在窗体创建时保存光标闪烁的原始速度,在窗体删除时恢复光标闪烁的原始速度。故添<br>加Form1的OnCreate事件和OnDestroy事件的处理过程如下:<br>procedureTForm1.Form1Create(Sender:TObject);<br>begin<br>//获取光标闪烁的原始速度<br>OSpeed:=GetCaretBlinkTime;<br>Edit1.Text:=IntToStr(OSpeed);<br>CSpeed:=OSpeed;<br>end;<br>procedureTForm1.Form1Destroy(Sender:TObject);<br>begin<br>//恢复光标闪烁的原始速度<br>SetCaretBlinkTime(OSpeed);<br>end;<br>4)分别添加3个按钮的OnClick事件的处理过程如下:<br>procedureTForm1.Button1Click(Sender:TObject);<br>begin<br>//加快光标闪烁的速度<br>CSpeed:=CSpeeddiv2;<br>SetCaretBlinkTime(CSpeed);<br>Edit1.Text:=IntToStr(CSpeed);<br>end;<br>procedureTForm1.Button2Click(Sender:TObject);<br>begin<br>//减慢光标闪烁的速度<br>CSpeed:=CSpeed*2;<br>SetCaretBlinkTime(CSpeed);<br>Edit1.Text:=IntToStr(CSpeed);<br>end;<br>procedureTForm1.Button3Click(Sender:TObject);<br>begin<br>//恢复光标闪烁的原始速度<br>SetCaretBlinkTime(OSpeed);<br>Edit1.Text:=IntToStr(OSpeed);<br>CSpeed:=OSpeed;<br>end;<br>5)编译、链接和测试程序。<br>说明:<br>在改变光标闪烁速度后,将焦点定位到Edit组件中,测试光标闪烁的速度。<br>在程序运行期间,可以切换到其他应用程序中测试光标闪烁的速度。<br>
 
帮顶一下
 
对SPI_SETMOUSE这个参数,我仔细看了一下msdn, 解释如下:<br><br>鼠标加速性能结构。用于 SystemParameterInfo 的 &nbsp;SPI_GETMOUSE 何 SPI_SETMOUSE<br>的 pvParam 参数。感觉用法较怪异。每项的含义如下:<br>&nbsp; &nbsp; { 阀值1, 范围不祥。当 Acceleration &gt; 0 (即1或2)时,如果鼠标在 x 或 y 方向上的移动点数超过该值,则windows将鼠标实际移动的点数乘以 2<br>&nbsp; &nbsp; &nbsp; 阀值2, 范围不祥。当 Acceleration = 2 时,如果鼠标在 x 或 y 方向上的移动点数超过该值,则windows将 threshold1 乘出来的移动点数结果再乘以 2, 这样与原始移动点数是乘 4 的关系 &nbsp; <br>&nbsp; &nbsp; &nbsp; 加速度,0-2。 控制上述两个阀值的使用时机<br><br>&nbsp; &nbsp; win2000 的加速选项,无、低、中、高对应的值分别为(0,0,0)、(7,0,1)、(4,12,2)、(4,6,2) &nbsp;<br><br>其传入的参数的结构应该如下:<br>TMouseAccel = record<br>&nbsp; &nbsp;Threshold1: integer; &nbsp; &nbsp; // 阀值1, 范围不祥。<br>&nbsp; &nbsp;Threshold2: integer; &nbsp; &nbsp; // 阀值2, 范围不祥。<br>&nbsp; &nbsp;Acceleration: integer; &nbsp; // 加速度,0-2。<br>end;<br><br>所以说,SPI_SETMOUSE这个参数,不是我所需要的参数。这个参数,简单的说,就是当你快速<br>移动鼠标是才会有效果,如果你老老实实的慢慢移动鼠标,那这个参数不会有任何影响。这才<br>有了这个问题,如何调整mouse sensitivity.<br>
 
mygz: 你的是调整编辑光标的闪烁速度,但我要的是如何调整鼠标的移动速度(英文应该是: mouse sensitivity)。
 
你改註冊表的那個, 用我的方法不行嗎??還是你沒試過??
 
Aiirii: 试过,不行。更改注册表,非要重启才生效。<br><br>我用spy++ 查了一下,当你在控制面板中调整鼠标的速度,尽管鼠标<br>速度已经改变了(可以通过移动鼠标感觉出来),但并没有任何消息发送出来 &nbsp;
 
在控制面板里双击“鼠标”,里面可以调整速度
 
谢谢cheylin的回复。但我说的是用编程的方法呀。
 
TMouseAccel = record<br>&nbsp; &nbsp;Threshold1: integer; &nbsp; &nbsp; // 阀值1, 范围不祥。<br>&nbsp; &nbsp;Threshold2: integer; &nbsp; &nbsp; // 阀值2, 范围不祥。<br>&nbsp; &nbsp;Acceleration: integer; &nbsp; // 加速度,0-2。<br>end;<br>这里的第三个参数你试验过吗?好象应该是Speed呢,看一下<br>http://msdn.microsoft.com/library/en-us/sysinfo/base/getting_hardware_information.asp<br>最后一个例子.
 
我在上面的回复中贴的就是这个记录的详细用法说明呀,<br><br>[blue]鼠标加速性能结构。用于 SystemParameterInfo 的 &nbsp;SPI_GETMOUSE 何 SPI_SETMOUSE<br>的 pvParam 参数。感觉用法较怪异。每项的含义如下:<br>&nbsp; &nbsp;{ 阀值1, 范围不祥。当 Acceleration &gt; 0 (即1或2)时,如果鼠标在 x 或 y 方向上的移动点数超过该值,则windows将鼠标实际移动的点数乘以 2<br>&nbsp; &nbsp; &nbsp;阀值2, 范围不祥。当 Acceleration = 2 时,如果鼠标在 x 或 y 方向上的移动点数超过该值,则windows将 threshold1 乘出来的移动点数结果再乘以 2, 这样与原始移动点数是乘 4 的关系 &nbsp; <br>&nbsp; &nbsp; &nbsp;加速度,0-2。 控制上述两个阀值的使用时机[/blue]
 
你是试验过的,还是仅仅读了MSDN?如果只是看了MSDN,我怀疑你弄拧了意思.<br>微软的例子程序使用的那个参数呀,难道错了?
 
我测试过的。 MSDN上的说的不正确,起码<br>http://msdn.microsoft.com/library/en-us/sysinfo/base/getting_hardware_information.asp<br>上面说的不正确。
 
结贴散分了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部