如何控制鼠标移动速度

lyingbo 2011-04-27 05:10:27
需求:

鼠标在鼠标垫上移动距离a,光标就在屏幕上移动距离b;
一般情况下,我们鼠标移动大概几个厘米,光标就可以跨越整个屏幕,就是说a很小的时候,b就是屏幕的宽度了;

现在我想通过程序去修改这个精度:
就是当鼠标移动的距离a很大的时候,甚至是10个或者20个屏幕宽度时,光标才从屏幕的左边移动到右边,
相当于b只是a的1/10,或者1/20;

我尝试过以下方法:

1、在控制面板中修改鼠标指针移动速度,把移动速度调到最小时,也只能到两个距离一比一,达不到我的要求

2、通过函数SystemParametersInfo来设置系统光标的移动速度,移动速度设为最小值1时,和上面的第1种方法效果一致


问题

1、网上搜到的采用过滤驱动的方法:由于没有做过驱动相关的东西,不知道这种方法是否可行?

2、如果过滤驱动的方法可行的话,怎么做?

谢谢您百忙之中浏览我的帖子,在此感激不尽。

QQ:342210738
希望得到您的帮助
...全文
1735 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyingbo 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 bluesky12312388 的回复:]
引用 17 楼 q342210738 的回复:

引用 1 楼 bluesky12312388 的回复:
换个思路,你HOOK鼠标移动消息,将这次移动的坐标差乘以一个比例比如说0.1就是放慢十倍,不知是否可行。


我用WH_GETMESSAGE来hook WM_MOUSEMOVE消息,不知道怎么修改hook到的消息参数~~

做过这方面用hook来修改系统消息的,麻烦告诉我下怎么……
[/Quote]
CallNextHookEx这个试了没效果的
xiaopoy 2011-05-01
  • 打赏
  • 举报
回复
这个可能我得一段时间后才能试试帮忙了。
因为弄驱动的编译环境比较麻烦,要是有什么新的进展,可以说说吗?
lyingbo 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaopoy 的回复:]
这个在微软ddk的例子里应该有,鼠标过滤。

要HOOK鼠标发来的packet消息,得在驱动MajorFunction里的#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f 函数里截取鼠标设备对应的CONNECTDATA。
DriverObject->MajorFunction [IRP_MJ_INTERNAL_DEVICE_CONTROL] =
……
[/Quote]

[Quote=引用 10 楼 xiaopoy 的回复:]
对了。

我看的例子是这个:
http://msdn.microsoft.com/en-us/library/ff542393(v=vs.85).aspx
源代码是在WDK安装后sample目录的

你可以到在线看
http://www.hackchina.com/r/194283/moufiltr.h__html

参考资料:
http://msdn.microsoft.co……
[/Quote]


好的,谢谢你了~~很有用的资料~~
lyingbo 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pathuang68 的回复:]
通过这个函数肯定可以改变鼠标移动的速度,还可以改变很多系统级的参数。
BOOL SystemParametersInfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni)
要调整鼠标速度,可将第一个参数设为SPI_SETMOUSESPEED。

楼主可以到网上自己搜搜这个函数的用法。
[/Quote]

前面说了,通过这个函数的SPI_SETMOUSESPEED修改的效果,最小速度也差不多是我要的速度的10倍了
bluesky12312388 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 q342210738 的回复:]

引用 1 楼 bluesky12312388 的回复:
换个思路,你HOOK鼠标移动消息,将这次移动的坐标差乘以一个比例比如说0.1就是放慢十倍,不知是否可行。


我用WH_GETMESSAGE来hook WM_MOUSEMOVE消息,不知道怎么修改hook到的消息参数~~

做过这方面用hook来修改系统消息的,麻烦告诉我下怎么把放慢十倍之后的消息放回去
[/Quote]
CallNextHookEx
lyingbo 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bluesky12312388 的回复:]
换个思路,你HOOK鼠标移动消息,将这次移动的坐标差乘以一个比例比如说0.1就是放慢十倍,不知是否可行。
[/Quote]

我用WH_GETMESSAGE来hook WM_MOUSEMOVE消息,不知道怎么修改hook到的消息参数~~

做过这方面用hook来修改系统消息的,麻烦告诉我下怎么把放慢十倍之后的消息放回去
lyingbo 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xiaopoy 的回复:]
这个很让感兴趣,要是问题还没解决 /:^]
我也想试着做些例子。
[/Quote]

目前还没搞定,以前没接触过驱动的东西,第一次接触,学习的很慢~~~
pathuang68 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 q342210738 的回复:]

引用 11 楼 pathuang68 的回复:
通过这个函数肯定可以改变鼠标移动的速度,还可以改变很多系统级的参数。
BOOL SystemParametersInfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni)
要调整鼠标速度,可将第一个参数设为SPI_SETMOUSESPEED。

楼主可以到网上自己搜搜这个函数的用……
[/Quote]

Sorry,心里想着其他的事情,没仔细看题。
xiaopoy 2011-04-29
  • 打赏
  • 举报
回复
这个很让感兴趣,要是问题还没解决 /:^]
我也想试着做些例子。
pathuang68 2011-04-28
  • 打赏
  • 举报
回复
通过这个函数肯定可以改变鼠标移动的速度,还可以改变很多系统级的参数。
BOOL SystemParametersInfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni)
要调整鼠标速度,可将第一个参数设为SPI_SETMOUSESPEED。

楼主可以到网上自己搜搜这个函数的用法。
xiaopoy 2011-04-28
  • 打赏
  • 举报
回复
对了。

我看的例子是这个:
http://msdn.microsoft.com/en-us/library/ff542393(v=vs.85).aspx
源代码是在WDK安装后sample目录的

你可以到在线看
http://www.hackchina.com/r/194283/moufiltr.h__html

参考资料:
http://msdn.microsoft.com/en-us/library/ff539838(v=VS.85).aspx
xiaopoy 2011-04-28
  • 打赏
  • 举报
回复
这个在微软ddk的例子里应该有,鼠标过滤。

要HOOK鼠标发来的packet消息,得在驱动MajorFunction里的#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f 函数里截取鼠标设备对应的CONNECTDATA。
DriverObject->MajorFunction [IRP_MJ_INTERNAL_DEVICE_CONTROL] =
MouFilter_InternIoCtl;
MouFilter_InternIoCtl会收到
#define IOCTL_INTERNAL_MOUSE_CONNECT CTL_CODE(FILE_DEVICE_MOUSE, 0x0080, METHOD_NEITHER, FILE_ANY_ACCESS)
这个internal device control requests。

当出现irpStack->Parameters.DeviceIoControl.IoControlCode这个controlcode里出现IOCTL_INTERNAL_MOUSE_CONNECT时,irq的stack(堆栈)里
(irpStack->Parameters.DeviceIoControl.Type3InputBuffer));
里面就保存着这个mouse设备的CONNECT_DATA的指针
typedef struct _CONNECT_DATA {
IN PDEVICE_OBJECT ClassDeviceObject;
IN PVOID ClassService;
} CONNECT_DATA, *PCONNECT_DATA;
其中CONNECT_DATA结构中的classService就是过滤鼠标消息的关键了。

它指向一个函数,这个函数的指针为:
VOID MouseClassServiceCallback(
__in PDEVICE_OBJECT DeviceObject,
__in PMOUSE_INPUT_DATA InputDataStart,
__in PMOUSE_INPUT_DATA InputDataEnd,
__inout PULONG InputDataConsumed
);
Parameters:
DeviceObject [in]
Pointer to the class device object.

InputDataStart [in]
Pointer to the first mouse input data packet in the input buffer of the port device.

InputDataEnd [in]
Pointer to the mouse input data packet that immediately follows the last data packet in the input data buffer of the port device.

InputDataConsumed [in, out]
Pointer to the number of mouse input data packets that are transferred by the routine.

这里的InputDataStart指向的数据的结构是
typedef struct _MOUSE_INPUT_DATA {
USHORT UnitId;
USHORT Flags;
union {
ULONG Buttons;
struct {
USHORT ButtonFlags;
USHORT ButtonData;
} ;
} ;
ULONG RawButtons;
LONG LastX;
LONG LastY;
ULONG ExtraInformation;
} MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA;
详细的介绍参看:
http://msdn.microsoft.com/en-us/library/ff542403(v=vs.85).aspx

这个就是要修改的鼠标packet了。想抛弃还是想让它对应的动作发生,就看你的需要了。

希望可以帮到你 /:^]
lyingbo 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jixingzhong 的回复:]
控制面板-》打印机和其他硬件-》鼠标-》指针选项,调整移动速度
[/Quote]

试过了,不是我要的效果,谢谢你了
lyingbo 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaopoy 的回复:]
是想控制自己的程序里的移动速度,还是整个系统的移动速度?

在自己的程序里的话,直接在WM_MOUSEMOVE里处理下就好使了。 /:^]

整个系统的鼠标移动速度,在R3想HOOK住所有进程的消息处理的确很麻烦,不如直接做个过滤用的驱动
[/Quote]

是想控制整个系统的移动速度,如果做个过滤用的驱动的话,想跟您请教下,我有下了几个usb鼠标filter的源代码,我该怎么改?
jixingzhong 2011-04-28
  • 打赏
  • 举报
回复
去vc板块看看是否有高手知道相关的api
jixingzhong 2011-04-28
  • 打赏
  • 举报
回复
暂时没找到相关的api
jixingzhong 2011-04-28
  • 打赏
  • 举报
回复
控制面板-》打印机和其他硬件-》鼠标-》指针选项,调整移动速度
xiaopoy 2011-04-28
  • 打赏
  • 举报
回复
是想控制自己的程序里的移动速度,还是整个系统的移动速度?

在自己的程序里的话,直接在WM_MOUSEMOVE里处理下就好使了。 /:^]

整个系统的鼠标移动速度,在R3想HOOK住所有进程的消息处理的确很麻烦,不如直接做个过滤用的驱动
lyingbo 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bluesky12312388 的回复:]
换个思路,你HOOK鼠标移动消息,将这次移动的坐标差乘以一个比例比如说0.1就是放慢十倍,不知是否可行。
[/Quote]
这个方法我先下,谢谢了,期待其他方法
bluesky12312388 2011-04-27
  • 打赏
  • 举报
回复
换个思路,你HOOK鼠标移动消息,将这次移动的坐标差乘以一个比例比如说0.1就是放慢十倍,不知是否可行。
Account Activation Overview.zip 在管理员版本里面,新开一页来显示所有等待帐号激活的用户.(管理员激活和一般用户激活).适用phpBB 版本: 2.0.0 - 2.0.1 - 2.0.2 Admin Overall Forums Permission.zip 这个hack 允许管理人员用鼠标器轻易的一点就设定所有论坛的权限。对于新手来说很适用 Admin Panel for Junior Admins and Mods.zip 允许你设定二级管理人员,并且你也可以准许二级管理人员使用你允许他们使用的所有设定。你也可以同时允许游客使用你预先设定的所有选项.phpBB Version: 2.0.0 - 2.0.1 Admin Private Messages Viewer.zip 这是对于管理员版面额外附加的程序。 它可以显示所有站内信件的列表,并且让管理员看到所有的信息。phpBB 版本: 2.0.0 Admin Server Test.zip 此hack 会测试你的server 运行功能,速度,和它是否可以新建和写文件。将来我们会提供更多的测试.phpBB 版本: 2.0.0 Admin Shadow Topic Delete.zip 管理员专用版 附加 可是显示隐藏题目连接(当你移动一个题目后遗留下的连接). 这也会显示一个题目被移动地址的连接,并且让你删除这个隐藏连接.phpBB 版本: 2.0.0 Admin Users List Hack.zip 这个hack提供一个管理您的用户的新方法: 非常有用和方便!你不需搜索任何人.phpBB 版本: 2.0.1 - 2.0.2 Admin Voting这是一个管理员版本的hack, 使得管理员们去查看投票结果,谁参预了此投票,和谁在哪里投什么票.因为牵涉到隐私问题,有这个功能的论坛应当让它的用户得知此功能已在使用.此hack是被Fabro勇敢的从Vote-teilnehmer anzeigen v.1.2.0 更正过来的.phpBB 版本: 2.0.0 - 2.0.1 - 2.0.2 Allow Avatars only with xx posts 让你的用户在发表一定贴数之后才可以使用头像. 你可以预先在管理员面版里面设定贴数.phpBB 版本: 2.0.0 - 2.0.1 - 2.0.2 Allow Disallow Signature 此hack和avatars很相似-你可以准许/不准许每个用户有自己的签名.phpBB 版本: 2.0.0 - 2.0.1 - 2.0.2 Allow Unlimited Guest Voting 此hack 允许管理员在论坛里面给所有游客设定投票的权力,并且没有登陆的用户也可在此设定的论坛里面投票。此功能不附带任何跟踪功能,因此游客可以重复投票。phpBB 版本: 2.0.1 - 2.0.2 Auto Un-ban Main Admin 此hack不会防止限制高级管理员,可是此MOD可以在没错网页刷新时解除对于高级管理员的限制(假如高级管理员被限制).phpBB 版本: 2.0.0 Configurable online trading time 此hack让管理员通过控制面版查看用户在线持续时间(以秒计算)。 这个时间将会在"线上人数"里面显示.phpBB 版本: 2.0.0里面显示. " Control Panel modcp Modification 类似于悄悄话:这个功能可以让您一次选modcp里面的全部贴子。使得您更方便的选择贴子phpBB 版本: 2.0.0 - 2.0.1 - 2.0.2 Delete Inactive Users 此程序让你可以删除不活跃的用户。 它包含很多数据,如加入日期,从未登陆,等等.管理员可以建立删除用户的连接。phpBB 版本: 2.0.2 Edit Joined Date per Admin Panel 用此hack, 你可以轻松的修改用户的加入日期. phpBB 版本: 2.0.0 - 2.0.1 - 2.0.2 Edit User s Post Count 修改用户管理面版里面的用户发贴计数。如果某用户因发重复的贴因而积累了很多发贴计数,你可用此功能使得数字回复正常.phpBB 版本: 2.0.1 Enhanced Admin User Lookup 这将会代替管理员面版里面的用户搜索,以更多功能来方便管理员使用。phpBB 版本: 2.0.0 Global Annoucement Hack 此MOD让你更容易的发表使得所有版都可以看到的公告。 它支持管理员,你可以设定可以看此贴的用户,可

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧