外设天下 - 电脑外设发烧友聚集地

我的人缘0
11
发表于 2011-11-24 17:47 只看该作者
手机M
回复 支持 反对

使用道具 举报

我的人缘0
12
发表于 2011-11-24 17:49 只看该作者
8# wwq5536   话说最近流行全身像么
回复 支持 反对

使用道具 举报

我的人缘0
13
发表于 2011-11-24 17:55 只看该作者
注册表还是有用的 不信可以自己实验  有种简单的方法可以判断是否开启加速度:鼠标一般放在键盘右边,先让鼠标紧靠着键盘右侧,记住当前屏幕上指针或准星所在的位置。以很慢的速度向右移动鼠标一段距离,然后以很快的 ...
zhuangkun 发表于 2011-11-24 15:42

笑而不语。。
回复 支持 反对

使用道具 举报

我的人缘0
14
发表于 2011-11-24 19:19 只看该作者
路过
回复 支持 反对

使用道具 举报

我的人缘0
15
发表于 2011-11-24 20:38 只看该作者
测试
本帖最后由 xmiangui 于 2011-11-24 22:14 编辑
注册表补丁一向是不灵的。只不过是让加速变得不快了而已。
想去加速可以用这个存在感很低的补丁:http://razerblueprints.net/index ... nt/80-AccelFix.html(限于XP,win7下不清楚)
saeko 发表于 2011-11-24 14:25


当年这个补丁发布在razerblueprints.net论坛,原理是作者反汇编了XP内核的驱动Win32k.sys,其中包含鼠标的驱动。也就是Windows鼠标平滑函数(加速度)生效的地方,作者直接用汇编语言跳过了这段处理函数,然后做了这个补丁,覆盖Win32k.sys的二进制代码达到修改的效果。我看过这段程序的源代码,完全看不懂,显然作者是汇编出生。

先讲个背景,当时算是Windows NT5.1内核原理井喷的时候,首先大量的反汇编资料和工具作为铺垫,更重要的是微软公开了部分Windows Server 2003的内核代码。

对于玩外设这类不是特别技术的技术宅来说,恰好揭开了Windows内核是如何处理鼠标的一扇窗。MarkC也是混迹这个论坛的,估计他不满足于仅仅修改二进制文件跳过平滑函数(加速度),就研究了一下Win NT 5.1内核的鼠标处理部分。研究成果在自己的博客上发了几篇文章,中文翻译就是太平洋的那一篇(尽管翻译的不是特别好)。MarkC的注册表补丁生成器也是基于前人试验性的注册表补丁(也包括那个著名的CPL去加速度补丁),根据自己对内核的研究做出来的生成器。

就我个人而言,我相信MarkC的研究是正确的。所以这两种方式都是有效的。
直接修改内核跳过平滑函数是100%有效的,操作系统不对鼠标数据做任何处理,加速度何来之有?缺点是改内核是个杀软应该就会报,有些主动防御软件也会把修改后的Win32k.sys当作威胁。还有就是Win7微软已经修改了平滑函数,这个补丁估计是没用了。当然我没试过,不排除微软更新的不是Win32k.sys。

MarkC的补丁作为一种第二选择,我认为还是非常不错的,特别是现在液晶显示器,刷新率就这么点,也避免了当初CRT显示器不同分辨率不同Hz的问题。最重要的是还适用于Win7。
至于为什么有效,因为注册表文件归根结底的原理是让加速度函数凑出正好不修改鼠标数据的结果,不修改数据就没有加速度。而且因为Windows会把平滑函数后的数据作为指针移动而不是写回鼠标移动堆栈,用MMR之类的工具很容易就能证明MarkC的补丁是有效的。

相应的,缺点就是:
外部条件发生变化时(按照MarkC的理论就是显示刷新率Hz),会导致平滑函数凑不出不修改鼠标数据的结果
FPS游戏有指针回归中点的设计,MMR之类的软件很难在FPS游戏里看得清数据。
回复 支持 反对

使用道具 举报

我的人缘0
16
发表于 2011-11-24 20:59 只看该作者
本帖最后由 xmiangui 于 2011-11-24 22:04 编辑

再讲一下CS的三参,我以前写过分析,不过太繁琐了,这次尽量讲的简洁一点。

CS 1.6和之前版本用的HL1引擎(GoldenSource引擎)早就开源了,源代码可以从开源社区上下载。看源代码很容易就能理解三参数的作用, 看C代码可比汇编容易多了。

首先讲使用Windows API控制鼠标平滑函数的三个参数,这部分微软的API技术文档里是公开的,百度百科的那篇鼠标加速度里也有。MouseSpeed、MouseThreshold1、MouseThreshold2。他们不仅仅是保存在注册表里的一个键值,更确切的来说,他们是Windows鼠标API的三个参数,注册表就相当于游戏里的存档,开机从注册表里读取这三个参数。而游戏时可以修改这三个参数(但不修改注册表)的,就好比打了游戏没存档,游戏关了三个参数就会恢复。

CS在初始化游戏的时候,会把这三个参数重置为(1,0,0),不加CS启动三参就是这个效果,有加速度。

插一段八卦:HL1引擎这么做的原因是,据说三参这样设置以后,Win NT 4以前的内核效果是:鼠标移动速度2倍化,无加速度。呵,当初可是为了去加速度才搞的这么一出。(当然,NT 5.1以前的内核反汇编程度远不如XP,这种方法在当时是否正确我个人也是怀疑态度。)显然,对XP和以后的操作系统这种方法就大错特错啦,这也是曾经流行过98比XP适合打CS这种说法的原因之一。结合这一段就可以看出LZ纠结的第一种方法为什么不对了吧,很多国内资料把98内核和XP以后内核的鼠标处理方法混淆在一起了。

回归主题,现在重头戏来了,加了三参又是什么效果呢?可以看这段CS鼠标初始化的代码:

/*
===========
IN_StartupMouse
===========
*/
void IN_StartupMouse (void)
{
        if ( gEngfuncs.CheckParm ("-nomouse", NULL ) )
                return;

        mouseinitialized = 1;
        mouseparmsvalid = SystemParametersInfo (SPI_GETMOUSE, 0, originalmouseparms, 0);

        if (mouseparmsvalid)
        {
                if ( gEngfuncs.CheckParm ("-noforcemspd", NULL ) )
                        newmouseparms[2] = originalmouseparms[2];

                if ( gEngfuncs.CheckParm ("-noforcemaccel", NULL ) )
                {
                        newmouseparms[0] = originalmouseparms[0];
                        newmouseparms[1] = originalmouseparms[1];
                }

                if ( gEngfuncs.CheckParm ("-noforcemparms", NULL ) )
                {
                        newmouseparms[0] = originalmouseparms[0];
                        newmouseparms[1] = originalmouseparms[1];
                        newmouseparms[2] = originalmouseparms[2];
                }
        }

        mouse_buttons = MOUSE_BUTTON_COUNT;
}


也就是说,这三个启动参数就是控制不重置哪些加速度参数:
-noforcemaccel:不重置MouseThreshold1和MouseThreshold2
-noforcemspd:不重置MouseSpeed
-noforcemparms:不重置加速度全部三个参数

这下能看懂参数名字的意思了吧,-noforcemaccel就是不重置(noforce)鼠标(m)的加速度阀值参数(accel),-noforcemspd就是不重置(noforce)鼠标(m)的MouseSpeed参数(spd),-noforcemparms就是不重置(noforce)鼠标(m)所有三个参数(parms)。

有的人比较敏锐,说加了三参,我觉得CS还是有加速度呀!是的,CS由于引擎所限,至少还有2个地方会影响鼠标移动,而且我估计也是无解的:

第一个,就是我前面提到过的指针回归中点。解释一下,为什么FPS游戏准星永远在中间?因为引擎会不断刷新指针让它回到中点,这可以理解为一种负加速度。
第二个,CS的默认FOV(可视角度)是90,横向、纵向都是,但显然你的显示器不是正方的。所以横向纵向移动总是不太一致。

这两者我个人认为是没啥解决方法,虽说可以修改FOV,但又会让人觉得怪怪的。只能说现在新的游戏引擎发展会解决这类引擎带来的问题。
不过,现在的游戏讲究的是真实性……只会有更多的因素让你瞄不准,比如现在的游戏,枪口会随机飘动,比神马直线修正的可厉害多了……

好,讲一下结论:

  • 100%有效去除操作系统加速度的方法:用XP操作系统,用3楼的那个补丁,重启,无视那些杀软的报警。骨灰玩家可以使用哦,老子就是玩游戏,Win7杀软都滚一边去~
    我上面为什么要黑体“操作系统加速度”呢?比如有的游戏为了提高真实性会故意在游戏里加入自己的加速度,这个就和操作系统无关了,也没有通用的去掉的方法。这种情况下面也不会不讨论。
    1
  • 比较靠谱的方法,用MarkC的那个补丁生成自己使用环境的reg文件,导入注册表,马上重启。保证以后显示器都是一个刷新率(比如液晶的60Hz),基本不会有什么问题。
    注意:这个方法仅对Windows当前用户有效,当然一般人也不会再自己个人电脑上建一堆用户还切换着玩游戏。
    2
  • 三参仅适用于CS,其他游戏参数不会故意去和CS搞得一样,自然加三参就无效了。有了三参其实不用reg文件也没问题,CS已经没操作系统给的加速度了。
回复 支持 1 反对 0

使用道具 举报

我的人缘0
17
发表于 2011-11-24 21:16 只看该作者
妹的LS神出鬼没。。。你的回帖让人容易X高潮你知道不~{:1_017:}
回复 支持 反对

使用道具 举报

我的人缘0
18
发表于 2011-11-24 21:25 只看该作者
测试
15楼对这个很有研究 {:1_085:}
回复 支持 反对

使用道具 举报

我的人缘0
19
发表于 2011-11-24 21:34 只看该作者
我就知道此贴必然引出大神
回复 支持 反对

使用道具 举报

我的人缘0
20
发表于 2011-11-24 21:42 只看该作者
测试
不要浪费时间了 怎么去也不可能完全去掉 想回到98的手感是不可能的
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则