用C#实现鼠标左右键的切换
转载地址:http://www.51test.net/show.asp?id=283640&Page=1#top
1. SwapMouseButton
根据MSDN所述,可以通过调用SwapMouseButton这一API来实现鼠标左右键功能互换,Windows控制面板中的相关设置也是通过调用该API来实现的。该API存在于user32.dll文件中,它的原型是:
BOOL SwapMouseButton(
BOOL fSwap
);
我们可以在.NET工程中通过P/Invoke轻松声明对该API的调用。我写的调用声明如下:
// P/Invoke declarations
[DllImport("user32.dll")]
private extern static bool SwapMouseButton(bool fSwap);
其中,fSwap是唯一需要传入的参数,当它的值为true时,系统会把鼠标左右键功能进行互换(即换成左手鼠标);当它的值为false时,系统会把鼠标左右键功能还原为默认状态(即右手鼠标)。因此,当我想使用左手鼠标时,只需向SwapMouseButton方法传入一个true变量即可实现,非常方便。
2. SystemParametersInfo
除了调用SwapMouseButton来实现鼠标左右值功能切换之外,Windows还提供了另外一个实现同样效果的API:SystemParametersInfo。根据MSDN,该API的原型是:
BOOL SystemParametersInfo(
UINT uiAction,
UINT uiParam,
PVOID pvParam,
UINT fWinIni
);
用C#可以进行如下声明:
[DllImport("user32.dll")]
private extern static int SystemParametersInfo(uint uiAction, uint
uiParam, IntPtr pvParam, uint fWinIni);
其中,uiAction指定一个需要获取的系统参数,如屏幕大小、分辨率、鼠标配置等,如果传入参数SPI_SETMOUSEBUTTONSWAP就可以用来设置鼠标功能切换;当向uiParam参数传入正值时,系统就会把鼠标左右键功能进行互换(即换成左手鼠标),当向uiParam传入0时,系统还会把鼠标功能还原成默认状态(即还原为右手鼠标)。
由此,我们需要在uiAction位置传入SPI_SETMOUSEBUTTONSWAP。不过很明显,SPI_SETMOUSEBUTTONSWAP只是C语言中#define编译预定义指令所定义出的一个常量,我们必须在C#代码中对它进行重新定义。OK,打开Winuser.h头文件,在其中搜索SPI_SETMOUSEBUTTONSWAP,找到如下定义(位于8623行):
#define SPI_SETMOUSEBUTTONSWAP 33
可见,SPI_SETMOUSEBUTTONSWAP定义的是整型值33,这样我们就可以在C#中做出如下定义:
private const uint SPI_SETMOUSEBUTTONSWAP = 33;
3. GetSystemMetrics
通过上述两种方法,我们都可以轻松地实现鼠标功能切换了。不过,在每次切换之前,如果我们的应用程序能够获知系统当前的鼠标设 置,那么就可以决定该向哪个(相反)方向进行切换,从而给使用者带来一种更好的用户体验。那么该怎样才能获知当前系统的鼠标设置呢?GetSystemMetrics可以解决这一问题。
根据MSDN,GetSystemMetrics的原型是:
int GetSystemMetrics(
int nIndex
);
其中nIndex参数有SM_SWAPBUTTON值可选,SM_SWAPBUTTON在Winuser.h头文件中的定义是:
#define SM_SWAPBUTTON 23
我们可以在C#中如此定义SM_SWAPBUTTON:
private const int SM_SWAPBUTTON = 23;
声明GetSystemMetrics:
[DllImport("user32.dll")]
private extern static int GetSystemMetrics(int nIndex); // Updated 04.10.22. Many thanks to JGTM'2004 [MVP]
当GetSystemMetrics返回0时,表明当前系统鼠标设为默认状态(右手鼠标),否则表明鼠标已被设为左手鼠标。这样,我们就可以在切换鼠标状态之前获知系统的当前鼠标状态,从而可以做出相反方向的切换了。
用C#实现鼠标左右键的切换相关推荐
- c语言鼠标左右键怎么互换,用C#实现鼠标左右键的切换
在平时用电脑的过程中,我喜欢隔段时间就把鼠标左右调换一下,一来是想让自己一侧的肩.手臂.手腕能得到休息,尽量避免因长期固定姿势使用鼠标而带来的身体不适,另一方面也因为我本来就是个左撇子,喜欢尝试给两只 ...
- iMouse - 快速切换鼠标左右键
(此Blog是iMouse软件的官网) [名称]:iMouse [版本]:v1.2 (v1.2是首个公开发布版本,也是最新版,之前版本没有对外发布) [时间]:2012-01-06 [关键词]:腱鞘炎 ...
- linux下模仿用户左键,linux 鼠标左右键互换实现代码
linux鼠标左右键互换脚本,作者今天, 使用 GNOME, 发现 Linux 也需要这些工具之一, 所以有了这个脚本.非常简单好用. lr="l" for id in `xinp ...
- 转载:注册表修改--鼠标左右键菜单篇
注册表修改--鼠标左右键菜单篇 加Apploc到右键中去: [HKEY_CLASSES_ROOT\exefile\shell\Apploc\command] 再修改其中的默认值为C:\windows\ ...
- linux 鼠标 反向,linux 鼠标左右键互换实现代码
linux鼠标左右键互换脚本,作者今天, 使用 GNOME, 发现 Linux 也需要这些工具之一, 所以有了这个脚本.非常简单好用. lr="l" for id in `xinp ...
- 【Bug】01_VMware虚拟机中鼠标左右键失灵
01 问题描述: VMware进入系统(ubuntu16.04&14.04),鼠标左右键失效. 具体表现为:自宿主系统进入VM鼠标左右键有效,1-3秒过后,鼠标失效:同时,鼠标滚轮有效,且当鼠 ...
- 戴记严选GM3323D 鼠标左右键失效 解决办法
戴记严选 GM3323D 鼠标左右键失效原因分析 GM3323D软件下载 当你下载了驱动了并且使用2.4G连接鼠标时,当你修改RGB设置有几率导致左右键失效 请尝试用触摸板或者其他鼠标 重新点击修改R ...
- C#Winform中DataGridView控件根据鼠标左右键获取单元格值或者行列
有多种方法可以获取单元格的值或者行列,此处选用了两种方式去获取分别用了CurrentCell方法和Rows[].Cells[]的方法去获取行列值 鼠标左键获取单独行列值 此处获取左键行列值的触发条件是 ...
- php左键点改成左键点,window_win10怎么将鼠标左键设置为主键?win10鼠标左右键互换的技巧,当我们的鼠标使用一段时间之 - phpStudy...
win10怎么将鼠标左键设置为主键?win10鼠标左右键互换的技巧 当我们的鼠标使用一段时间之后,会由于左键经常按压而导致老化或者损坏,而对于突然间的损坏,又没有其他可以替代的鼠标时候,就需要对鼠标左 ...
最新文章
- 10分钟写一个markdown编辑器
- windows下生成github ssh key详解
- Spring MVC原理及配置详解
- python各种数据类型的常用方法_Python之数据类型的常用方法
- 小程序基础能力~网络
- Atlas 2.1.0 实践之编译Atlas-Hive
- 免费搭建私人云盘+内网渗透+不限速无限存储
- 查看MXNet模型结构
- 计算机应用基础—多媒体技术(二)
- 商务协同办公市场有「后浪」
- u深度重装系统详细教程_u深度u盘启动盘安装win7详细步骤
- POI导出Excel(二)
- 【C++】读取txt文件中指定行的内容
- 2021英伟达暑期实习面经(芯片设计)
- CodeM资格赛E 数码 题解
- mysql5.1升级到5.6_mysql升级5.1到5.6
- 储能双向变流器(PCS)设备中的电流检测方法
- shell 对字符串去重并排序
- 跟我一起用思维导图复习中小学课本名著
- springboot+Quartz整合!!!简单实用
热门文章
- Win11新电脑开机怎么跳过登录microsoft账户?
- Angular页面出不来,显示空白页面。。。
- 使用GI Agent(XAG)实现GoldenGate的高可用性(二)
- 关于储备(应急储备、管理储备、储备分析)的总结讨论
- 【注释张豪华版 Path酷炫动画】极速get花式Path (支付宝支付成功动画)
- 计算机一级ms office模拟真题,2016计算机一级《MS Office》模拟练习题(含答案)
- matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色
- 微信小程序如何实时监测网络状态变化?
- 【Web】Hexo+Butterfly+Github+Coding搭建个人博客
- 中国联通cdma 1x和中国移动gprs数据业务比较